2009-05-14 9 views
6

Ho un problema che non riesco a risolvere anche se passo molto tempo a provare a farlo.GridPanel non regola al primo ridimensionamento

Di solito utilizzo GridPanels per allineare i controlli sui moduli. Ha, tuttavia, un bug fastidioso. Quando la modalità di allineamento di GridPanel è alClient e io massimizzo la sua finestra genitore, GridPanel si adatta alla nuova dimensione di quella finestra, tuttavia i controlli che si trovano sulla griglia non lo fanno. Rimangono nella stessa posizione in cui si trovavano prima della ridimensionamento della finestra. Succede solo alla massimizzazione della prima finestra. Se la finestra viene prima ridimensionata manualmente, tutto è OK. Penso che la griglia aggiusta i suoi controlli figli dopo il secondo evento di ridimensionamento (??).

Cosa fare per far funzionare correttamente GridPanel se si tratta di questo errore? Potrebbe essere sufficiente inviare un messaggio (ma quale messaggio?), Non lo so. Ho provato a usare Realign, Refresh, ecc., Ma non mi hanno aiutato.

Grazie per il vostro aiuto in anticipo,

Mariusz.

risposta

7

Ah, ho avuto anche problemi simili. Potrebbe essere correlato a un problema di ridimensionamento nella VCL. Potresti provare a provare the fix by Andreas Hausladen. Sembra funzionare per me nella maggior parte dei casi.

1

Ho avuto anche questo errore, su diversi progetti. Non sono sicuro di come ho risolto questo problema (si trattava di progetti per il mio precedente datore di lavoro, non ho più accesso a questo codice sorgente). Penso che ho dovuto ridisegnare/aggiornare quel frame o form genitore su cui è stato posizionato GridPanel.

0

sul ridimensionamento della chiamata proprietario GridPanel.Invalidate. Non l'ho provato. Spero sia un lavoro.

2

Ho trovato un trucco.

in OnResize evento di parent del pannello griglia, modificare la larghezza del pannello griglia di 1 pixel.

poi gridPanel noterà dimensioni cambiato, quindi riorganizzare sotto-comandi in gridpanel ..

campione è seguito ..

procedure TForm1.FormResize(Sender: TObject); 
begin 
    GridPanel1.Width := GridPanel1.Width - 1; // subtract 1 
    GridPanel1.Width := GridPanel1.Width + 1; // recover width by adding 1 
end; 
+0

in qualche modo legato http://qc.embarcadero.com/wc/qcmain.aspx?d=45827 – manlio

2

Modifica della larghezza/invalidare il controllo non funziona per me (qualcosa è cambiato con le versioni recenti di RAD Studio?).

In ogni caso una simile, semplice soluzione lungo quella linea è:

procedure TForm1.FormResize(Sender: TObject); 
begin 
    GridPanel1.ControlCollection.BeginUpdate; 
    GridPanel1.ControlCollection.EndUpdate; 
end;