2009-05-14 12 views
6

Mam problem, którego nie mogę rozwiązać, mimo że spędzam dużo czasu próbując to zrobić.GridPanel nie koryguje się przy pierwszej zmianie rozmiaru

Zwykle używam GridPanels do wyrównania kontroli formularzy. Ma jednak irytujący błąd. Kiedy tryb wyrównania GridPanel to alClient, a ja maksymalizuję jego okno nadrzędne, to GridPanel dostosowuje się do nowego rozmiaru tego okna, jednak kontrolki leżące na siatce nie. Pozostają w tej samej pozycji, w jakiej znajdowały się przed zmianą rozmiaru okna. Zdarza się tylko przy maksymalizacji pierwszego okna. Jeśli okno jest najpierw skalowane ręcznie, wszystko jest w porządku. Myślę, że siatka dostosowuje swoje kontrolki podrzędne po drugim zdarzeniu zmiany rozmiaru (??).

Co zrobić, aby GridPanel działał poprawnie, jeśli chodzi o ten błąd? Może wystarczy wysłać do niego wiadomość (ale jaką wiadomość?), Nie wiem. Próbowałem użyć Realign, Refresh itp., Ale one nie pomogły.

Dzięki za pomoc z góry,

Mariusz.

Odpowiedz

7

Ah, miałem również podobne problemy. Może to być związane z problemem zmiany rozmiaru w VCL. Możesz spróbować the fix by Andreas Hausladen. W większości przypadków wydaje mi się, że działa.

1

Mam również ten błąd w kilku projektach. Nie jestem pewien, jak to rozwiązałem (było to w przypadku projektów dla mojego poprzedniego pracodawcy, nie mam już dostępu do tego kodu źródłowego). Wydaje mi się, że przerysowałem/odświeżyłem ramkę lub formularz macierzysty, na którym umieszczono GridPanel.

0

przy zmianie rozmiaru połączenia właściciela GridPanel.Invalidate. Nie przetestowałem tego. Mam nadzieję, że to działa.

2

Znalazłem jedną lewę.

w OnResize wydarzenie nadrzędne z gridpanela, zmiana szerokości gridpanela o 1 piksel.

następnie gridPanel zauważy rozmiar zmienił, a następnie zmienić formantów podrzędnych w gridpanel ..

próbka jest poniżej ..

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

Nieco podobne http://qc.embarcadero.com/wc/qcmain.aspx?d=45827 – manlio

2

Zmiana szerokości/unieważniania sterowania nie działa dla mnie (coś zmieniło się w ostatnich wersjach RAD Studio?).

Zresztą podobna, proste obejście wzdłuż tej linii to:

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