PDA

Visualizza la versione completa : [Delphi] runtime - creazione componenti


kate71
13-10-2003, 17:49
Vorrei creare dei componenti a runtime su un PageControl.
La creazione dei TabSheet a runtime funziona.
ma vorrei che su di essi si visualizzassero delle label .
La label me la crea da qualche parte... ma sicuro non la visualizza
sul Tabsheet che ho appena creato...x essere + precisi..credo
che la crei sotto il pageControl , ossia sulla form.
Come potrei fargli capire che quella label va proprio
sul tabsheet che ho appena cretao?

questo il codice che sto sperimentando:

with PageControl1 do
begin
with TTabSheet.Create(Self) do
begin
PageControl := PageControl1;
Name := 'TabSheet2';
TabVisible := True;
Caption := 'Concessionario' ;
PageIndex := 1;
with TLabel.Create(owner) do
begin
Top := 72;
Left := 19;
Caption := 'Test';
Name := 'Label12';
Visible := True;
Enabled := True;
end; //TCustomLabel
end;
end;

dove sto sbagliando ?
Grazie
Kate71

alka
13-10-2003, 20:13
Manca l'impostazione della proprietą Parent del controllo.

Il parametro AOwner che viene specificato nella creazione dell'etichetta tramite il metodo Create dovrebbe essere sostituito da Self, in modo che sia la form stessa a fungere da Owner per il controllo; l'Owner č il componente che ha la responsabilitą di distruggere i controlli posseduti al momento della distruzione dell'Owner stesso.

La proprietą Parent di un controllo visuale, invece, indica il controllo al quale si riferiscono le proprietą Left e Top che servono poi a visualizzare correttamente il controllo stesso all'interno del controllo designato come contenitore.

Nel tuo codice, devi memorizzare da qualche parte il riferimento al TabSheet creato e impostarlo come Parent della Label.

Un esempio:


procedure TForm1.Button1Click(Sender: TObject);
var
TabSheet: TTabSheet;
Lbl: TLabel;
begin
TabSheet := TTabSheet.Create(Self);
TabSheet.PageControl := PageControl1;
TabSheet.Caption := 'Concessionario';
TabSheet.PageIndex := 1;
Lbl := TLabel.Create(Self);
Lbl.Parent := TabSheet;
Lbl.Left := 10;
Lbl.Top := 10;
end;


Io eviterei di attribuire dinamicamente nomi ai controlli creati, poichč la creazione di un secondo controllo analogo non andrebbe a buon fine se ad esso venisse attribuito un nome identico al precedente.

Ciao! :ciauz:

kate71
14-10-2003, 12:27
Non so davvero come ringraziarti!
Inutile dire che funziona perfettamente!!
Grazie per la chiarezza e la celeritą delle tue risposte!
:ciauz:
Kate71

alka
14-10-2003, 12:28
Originariamente inviato da kate71
Non so davvero come ringraziarti!
Inutile dire che funziona perfettamente!!
Grazie per la chiarezza e la celeritą delle tue risposte!

"De nada", signorina. ;)
Sono casi che ho gią affrontato, quindi č abbastanza facile trovare una risposta.

Ciao! :ciauz:

Loading