Come evitare problemi quando incorporare un TForm in un altro TForm?
-
10-10-2019 - |
Domanda
Mi capita spesso di incorporare un discendente TForm
in un altro discendente TForm
in questo modo:
var
Form1: TForm1;
Form2: TForm2;
begin
Form2.Parent := Form1;
Form2.BorderStyle := bsNone;
Form2.Align := alClient;
Form2.Show;
end;
Di solito questo funziona bene, ma a volte i controlli in Form2 non sono allineati correttamente. C'è una soluzione per questo tipo di problema?
Qualcuno sa che cosa sta causando questo "disallineamento"?
So che potrei usare TFrame
per questo tipo di lavoro, ma ho un sacco di codice libreria che avrei dovuto riscrivere e non vedo alcuna ragione per cui il TForm
di approccio TForm
non dovrebbe lavoro?
Modifica Ho identificato il TcxListView
componente come il colpevole qui, ho presentato un bug report al venditore componente (DevExpress):
http://www.devexpress.com/issue=B194161
Modifica 2: Gli sviluppatori di DevExpress hanno analizzato il problema e detto che è in realtà un difetto nel componente TGridPanel
da Embarcadero:
Soluzione
Lo faccio così e io uso la seguente routine per farlo accadere:
procedure TMyForm.PlaceInsideContainer(Container: TWinControl);
begin
Parent := Container;
Align := alClient;
BorderIcons := [];
BorderStyle := bsNone;
ParentBackground := True;
Show;
end;
Non ho alcun problema con questo. L'unica differenza che ho potuto immaginare che potrebbe essere rilevante è l'assegnazione di BorderIcons, ma mi metterebbe in dubbio che causa un problema.
Altri suggerimenti
Ho letto una domanda simile (dovrete google) e la risposta da TeamB non era quello di fare questo come il comportamento è stato imprevedibile e che si dovrebbe utilizzare TFrame invece (che è quello che ho sempre fatto).