Zmiana rozmiaru komponentu po maksymalizacji formularza

0

Witam
W zdarzeniu "On Resize" formy mam taki kod:

if WindowState = wsMaximized then
Groupbox1.ClientWidth:=500;
Groupbox1.Left:= +520;
Groupbox2.ClientWidth:=500;

Problem w tym że rozmiar jak i położenie komponentów zmienia się od razu po uruchomieniu aplikacji pomimo że mam ustawione WindowState na "Normal" mogę ustawić aby aplikacja uruchamiała się zmaksymalizowana ale to tylko półśrodek a nie dobre rozwiązanie, wie ktoś dlaczego zmienia rozmiar i położenie komponentów zanim forma zostanie zmaksymalizowana? Dopisanie do kodu WindowState := wsNormal; też nic nie daje, z góry dziękuje za ewentualne sugestie mogące pomóc mi rozwiązać problem.

1

Dowiedz się do czego służy begin i end.

0

Przecież gdybym nie miał w kodzie begin oraz end to aplikacja nie skompilowałaby się a wtedy nie wiedziałbym że nieprawidłowo działa więc nie wiem po co taka sugestia z Twojej strony.

2

Przeczytaj może zrozumiesz If . Zapewniam że tam jest opisany przykład podobnego błędu.

1

Z Tego kodu co podałeś warunek if wykonuje tylko jedna instrukcję, która jest zaraz pod

if WindowState = wsMaximized then
Groupbox1.ClientWidth:=500; ///< ta instrukcja wykonuje się w warunku
Groupbox1.Left:= +520; ///< ta już nie
Groupbox2.ClientWidth:=500; ///< oo i tak też nie :O

Zrób jak pisze @kAzek

if WindowState = wsMaximized then
begin
    Groupbox1.ClientWidth:=500;
    Groupbox1.Left:= +520; 
    Groupbox2.ClientWidth:=500;
end;
0

Faktycznie jeżeli chodzi o wykonywanie instrukcji to miałem błąd z IF ale nie miał on żadnego wpływu na problem który opisałem, przetestowałem też podany kod używając Delphi XE3 i okazało się że działa tak jak powinien więc nie wiem już o co chodzi, dodam że korzystam z Delphi 7 Personal.

0

Może tak obejrzysz właściwość Anchor ...

0

We właściwościach anchors mam wszystko ustawione tak jak trzeba problem polega na tym że rozmiar komponentów zmienia się już po stworzeniu formularza czyli jeszcze zanim zostanie on zmaksymalizowany co mnie dziwi bo ten sam kod na Delphi XE3 działa tak jak trzeba.

0

Może użyć debuggera, którym ustawisz breakpointy i poanlizuj do jakich metod przy uruchomieniu się odwołuje program.

0
laiczny napisał(a):

... problem polega na tym że rozmiar komponentów zmienia się już po stworzeniu formularza ...
W onCreate blokujesz wyrównywanie komponentów zaś w onShow odblokowujesz - proste.

0

Natomiast gdy zastosuje kod jak poniżej to instrukcja wykona się dopiero gdy zmaksymalizuje aplikację i powrócę do stanu poprzedniego, nie chodzi mi o żadne wyłudzanie kodu a jedynie o sugestie co odpowiada za taki stan rzeczy, "skopana" wersja Delphi czy może coś innego? pod Delphi XE3 wszystko działa tak jak powinno.

procedure TForm1.FormResize(Sender: TObject);
begin
if WindowState = wsMaximized  then
begin
ShowMessage ('Zmaksymalizowano');
end;
end;
end.

1 użytkowników online, w tym zalogowanych: 0, gości: 1