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:

http://qc.embarcadero.com/wc/qcmain.aspx? d = 90324

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top