2011-12-16 10 views
5

con Delphi 2010come creare dinamicamente un componente in Delphi, come TLabel o TEdit ... ecc

SQLQuery1.First; // move to the first record 
while(not SQLQuery1.EOF)do begin 
    // do something with the current record 
    // What's the code should i write in this part in order to create a TEdit 
    // containing the user fullname the current item. 
    ShowMessage(SQLQuery1['whom']); 
    SQLQuery1.Next; // move to the next record 
end; 
+0

Perché vuoi creare un componente per ogni record? stai invece provando a usare un dbgrid? – RRUZ

+0

Vuoi un controllo di modifica per ogni singolo record? Stanno andando all'interno di una griglia o altrove? Se si utilizza un DBGrid, non è necessario farlo, supporta già la modifica. Se ne hai bisogno per altri motivi, dovrai in qualche modo mantenere un elenco di questi controlli da qualche parte in modo da poterli liberare correttamente una volta terminato. Dipende molto da dove vuoi mettere questi controlli e per quanto tempo vuoi che questi controlli siano visibili. Personalmente penso (se non si utilizza un DBGrid) che si potrebbe voler utilizzare una griglia di stringhe (mostra un'area di modifica per ogni record). –

+0

PS - 'ShowMessage (SQLQuery1 ['who']);' è più sicuro di essere 'ShowMessage (SQLQuery1.FieldByName ('who'). AsString);' –

risposta

5

Beh, per creare un TEdit è necessario effettuare le seguenti operazioni:

Creare una variabile lavorare con. Una variabile locale o un membro della classe.

Edit: TEdit; 

Quindi lo costruisci.

Edit := TEdit.Create(Self); 

Il parametro per il costruttore è il proprietario. Questo assicura che il controllo venga distrutto quando il suo proprietario viene distrutto. La mia ipotesi è che Self sia un modulo.

Ora è necessario assegnare al controllo un genitore.

Edit.Parent := Self; 

o forse è su un pannello.

Edit.Parent := StatusPanel; 

Infine, si imposta il testo.

Edit.Text := SQLQuery1['whom']); 

con un'etichetta è tutto molto simile, tranne che si utilizza la proprietà Caption piuttosto che la proprietà Text.

E sicuramente vorrai impostare altre proprietà ma immagino che tu sappia già come farlo.

+0

Il modo migliore per scoprire quali proprietà sono importanti da impostare quando si crea dinamicamente un componente è posizionarne una su un modulo, passare alla visualizzazione come testo e vedere quali proprietà sono in streaming. Quelli che dovresti prendere in considerazione quando lo crei anche dinamicamente. (Dopo tutto, i componenti in streaming sono creati dinamicamente :)) –

3
Var 
    AnEdit : TEdit; 
Begin 
    AnEdit := TEdit.Create(self); 
    AnEdit.Parent := self; // or some suitable container compoent e.g GroupBox, Panel 
    AnEdit.Top := ?; 
    AnEdit.Left := ? 
    // any other properties you weant to set. 
End; 

Il bit che cattura la gente fuori è l'impostazione genitore.

3

È inoltre possibile progettare visivamente i componenti, utilizzare lo GExperts Components to Code expert su di essi e quindi eliminarli nuovamente dal progettista del modulo. Per una coppia etichetta/modificare questo dà qualcosa come

var 
    Edit1: TEdit; 
    Label1: TLabel; 

    Edit1 := TEdit.Create(Self); 
    Label1 := TLabel.Create(Self); 

    Edit1.Name := 'Edit1'; 
    Edit1.Parent := Self; 
    Edit1.Left := 344; 
    Edit1.Top := 172; 
    Edit1.Width := 121; 
    Edit1.Height := 21; 
    Edit1.TabOrder := 0; 
    Edit1.Text := 'Edit1'; 
    Label1.Name := 'Label1'; 
    Label1.Parent := Self; 
    Label1.Left := 296; 
    Label1.Top := 176; 
    Label1.Width := 65; 
    Label1.Height := 17; 
    Label1.Caption := 'Label1'; 
    Label1.FocusControl := Edit1; 

maggior parte delle volte ha bisogno di qualche rielaborazione (rimuovere le linee TabOrder, sostituire la Sinistra/Top/... roba da SetBounds, allineare o la propria logica, ...) e per alcune proprietà/componenti non funziona affatto. Ma puoi risparmiare molto tempo in quel modo.

Problemi correlati