Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: xinyiman - Settembre 26, 2018, 12:19:59 pm

Titolo: Creare componenti a runtime dentro scrollbox
Inserito da: xinyiman - Settembre 26, 2018, 12:19:59 pm
Ciao ragazzi, ho fatto un esempietto di prova per creare dei componenti a runtime dentro un TScrollBox. I componenti li crea corretti, ma lo scrollbox non funziona come mi aspetto. Allego il sorgente, potete vedere che si mangia parte della listbox e non mi fa scrollare come invece mi aspetterei. Come se dovessi dirgli di ricalcolare lo spazio occupato. Ma non so come fare. Idee?

Grazie
Titolo: Re:Creare componenti a runtime dentro scrollbox
Inserito da: bonmario - Settembre 26, 2018, 01:39:07 pm
Ciao,
non sono sicuro di aver capito, ma credo che il problema sia questa riga di definizione della ListBox:
Codice: [Seleziona]
item.Anchors:=[akTop, akBottom,akLeft,akRight];

Se la commenti si risolve.


P.S. Se mi posso permettere, ti darei un consiglio: in testa alla unit Unit_runtime_components, dichiara delle costanti come ad esempio:
Codice: [Seleziona]
CstTipoLabel=1;
CstTipoEdit=2;
CstTipoComboBox=3;

... e così via.

Poi, nella "procedure TRunTimeComponents.DrawComponents;", avrai:
Codice: [Seleziona]
if id_tipo_campo = CstTipoLabel then //label
if id_tipo_campo = CstTipoEdit then //edit

... e così via.

In questo modo, hai 2 vantaggi:
- se per qualsiasi motivo devi cambiare uno di quei valori, ti basta cambiare il valore della costante, e tutti i programmi che la usano continueranno a funzionare
- se fai una ricerca nei tuoi sorgenti con ad esempio "CstTipoEdit", tutto ciò che troverai, sarà riferito a questa gestione. Se fai una ricerca con "2", ti toccherà guardare caso per caso a cosa fa riferimento.

Ciao, Mario
Titolo: Re:Creare componenti a runtime dentro scrollbox
Inserito da: xinyiman - Settembre 27, 2018, 09:03:57 am
Si esatto funziona. Grazie non sono molto avvezzo al TScrollBox. Per le costanti si è vero, lo avevo già in mente solo che tendo a farlo a lavoro completato.