SMF - Just Installed!
14 Dic 2011 - Direttiva $macroA volte è utile usare delle macro come in C per una miglior leggibilità del codice o un porting più facile.
Freepascal ci viene in contro con la direttiva $macro Sintassi Codice: [Seleziona]
possiamo anche usare macro in macro come nel seguente esempio Codice: [Seleziona]
FreePascal ha alcune macro già impostate Codice: [Seleziona]
08 Dic 2011 - Indy gestiore server FTP lato Clientqueste note si riferiscono ai componenti Indy
utilizzare il package Indy dal pannello IndyClients Core utilizzare il componente TCP - sul form IdTCPClient1 dal pannello IndyClients Protocols (am) utilizzare il componente TIdFTP - sul form IdFTP1 in un Form inserite - controllo TTreeView e assegnate nell'ObjectInspector Name = TVFolder - controllo TListBox e assegnate nell'ObjectInspector Name = LbDirectory - sRootDirFTP: string; Codice: [Seleziona]
questa sezione si occupa di visualizzare le directory presenti nel server Codice: [Seleziona]
il componente IdFTP ha degli eventi che possono essere utilizzati per avere un controllo sullo stato di avanzamento del file. IdFTP1.OnWorK FTPWork(ASender, AWorkMode, AWorkCount); IdFTP1.WorkBegin - chiamata all'inizio del trasferimento //iDimFile dovra' essere Int64 e non Int -> iDimFile: Int64; if AWorkMode = wmRead then AWorkCountMax := iDimFile; FTPWorkBegin(ASender, AWorkMode, AWorkCountMax); IdFTP1.WorkEnd FTPWorkEnd(ASender, AWorkMode); per scaricare un file dal server usate la funzione Get IdFTP1.Get(s, SaveFile.FileName, True, IdFTP1.ResumeSupported); Codice: [Seleziona]
per Inviare al Server usate la funzione Put IdFTP1.Put(OpenFile.FileName, ExtractFileName(OpenFile.FileName)); [/code] procedure Tfrm_AccessoRemoto.act_UploadExecute(Sender: TObject); begin //utilizzata la unit Dialogs per scgliere il file if OpenFile.Execute then begin IdFTP1.TransferType := ftBinary; IdFTP1.Put(OpenFile.FileName, ExtractFileName(OpenFile.FileName)); DisplayFTP; end; end; [/code] per cambiare Directory , attivate nel TVFolder (TTreeView), l'evento OnDblClick, in modo da poter cambiare. Codice: [Seleziona]
da un qualunque livello per tornare alla radice utilizzare la variabile sRootDirFTP memorizzata al momento della connessione conviene utilizzare la variabile anziche' ChangeDir('\') , non sapendo a priori quale Directory il server utilizzera' come Root Codice: [Seleziona]
07 Dic 2011 - TImage su Form e Panelin Delphi utilizzando JvBackground (Librerie Jedi), si risolve il problema;
in Lazarus si puo' ottenere lo stesso effetto con un minimo di ingegno; in base alle dimensioni della BitMap si calcola quante volte puo' essere scritta nel Form (ClientWidth e ClientHeight) si utilizzano 2 Array di tipo TImage BmpX: array[0..1300] of TImage; // per il Form BmpT: array[0..50] of TImage; // per il Panel nel form si utilizza un TImage e si carica un'immagine/logo da un file (Image1) scriveremo una procedure DisegnaBmp ed una EliminaArrayBmp (presenti in fondo al testo) vediamo passo passo come costruire: calcoliamo il numero di volte che il Form puo' contenere la BitMap in orizzontale Codice: [Seleziona]
stessa cosa in vericale Codice: [Seleziona]
tenendo presente che ad ogni Ridimensionamento del form le immmagini andranno eliminate e ricreate, si creano n BitMap creazione ed assegnazione di n TImage per il Form Codice: [Seleziona]
creazione ed assegnazione di n TImage per il Panel Codice: [Seleziona]
a questo punto basta un ciclo, che visualizzi le Immagini Codice: [Seleziona]
ad ogni cambio di Dimensioni del Form (Evento OnResize), si eliminano le BitMap create e si ripete il ciclo di disegno Codice: [Seleziona]
Cosa analoga si puo' fare per simulare la trasparenza su un TPanel; Si disegnano le BitMap sul TPanel; Esistono altre tecniche sovrascrivendo il metodo CreateParams dei genitore TWinControl, che pero' non danno sempre i rusltati attesi, spesso per i temi utilizzati (Windows) es: procedure CreateParams(var Params: TCreateParams); override; procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited; Params.ExStyle := WS_EX_TRANSPARENT; end; procedure TForm1.FormCreate(Sender: TObject); begin Brush.Style := bsClear; BorderStyle := bsNone; end; la soluzione neutra, di scrivere le BitMap dentro il Panel , funziona sempre anche sotto Linux Codice: [Seleziona]
ed a fine ciclo si portano in primo piano i vari controlli presenti sul TPanel stesso es: Codice: [Seleziona]
di seguito le procedure necessarie Eventu attivato su Form OnResize Codice: [Seleziona]
Si occupa di Disegnare sul Form e Panel Codice: [Seleziona]
Elimina spazio alocato per le TImage Codice: [Seleziona]
07 Dic 2011 - PopUpMenu sotto Pulsante (TSpeedButton)Chi usa le Librerie Jedy in Delphi trova su TJvSpeedButton la property DropDownMenu.
A volte risulta necessario, visualizzare, un Menu in una posizione voluta, per farlo basta sfruttare un PopUpMenu, posizionandolo dove serve. Nell'esempio visualizzeremo un Menu di tipo PopUp sotto un Pulsante (TSpeedButton). Utilizzeremo ClientOrigin.X e ClientOrigin.Y delllo SpeedButton per posizionare il PopUp menu dove serve; creiamo qualche procedura di verifica controlla quale Pulsante e' stato cliccato mnuAttivo,mnuPrecedente variabili di tipo TPopUpMenu su X e Y si scrive la posizione del Pulsante Codice: [Seleziona]
si va a verificare se il menu visualizzato e' diverso da quello assegnato al Pulsante e si posiziona il Menu con PopUp(X,Y), dove X = posizione orizzontale del Pulsante Y = posizione verticale del Pulsante Codice: [Seleziona]
inserire un Form 3 TSpeedButton, e 3 TPopUpMenu dichiarare mnuAttivo, mnuPrecedente: TPopUpMenu; 06 Dic 2011 - Conversione numericaConversione da/per una qualsiasi base
A volte è utile rappresentare un numero in una base differente dalla decimale, vediamo come fare.... |