Własna maksymalizacja formy

Własna maksymalizacja formy
LE
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 4 lata
  • Postów:232
0

Witam, mam taki problem. Mam formę borderstyle = false, i chciałbym miec możliwośc maksymalizacji jej w trakcie działania programu. Opcja:

Kopiuj
Showwindow( form1.Handle,SW_MAXIMIZE); // oraz SW_SHOWMAXIMIZED

nie dziala jak należy, maksymalizuje formę na FULLSCREEN przykrywając także pasek start.

Czy da się jeszcze jakoś inaczej zmaksymalizować formę w sposób normalny, tak jak robimy to normalnie ikonkami systemowymi?
Pozdrawiam!

edytowany 1x, ostatnio: Legalnl
unikalna_nazwa
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 10 lat
0

WindowState na wsMaximized?
Ewentualnie wyślij komunikat WM_SIZE z parametrem 3

Ale w temat wszedłem bo chciałem polecić Ci bieganie na zmaksymalizowanie własnej formy :/


Pół giga extra na dropboxie? Pół giga extra na dropboxie! Tyle wygrać! >>Klik here<<
edytowany 1x, ostatnio: unikalna_nazwa
LE
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 4 lata
  • Postów:232
0

wsmaximized to samo, daje mi fullscreen

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Gorlice
0

Nie wiem na pewno, bo u mnie nawet ShowWindow działa prawidłowo (mam Windows XP i pasek zadań pozostaje widoczny) ale jeszcze możesz spróbować:

Kopiuj
SendMessage(Form1.Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0); //SC_RESTORE przywraca

Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • Postów:1668
1
Kopiuj
var r:TRect;
begin
  r:=Screen.WorkAreaRect;
  Showwindow( form1.Handle,SW_MAXIMIZE);
  SetWindowPos(handle, 0, r.Left, r.Top, r.Right, r.Bottom, SWP_SHOWWINDOW);
end;
edytowany 1x, ostatnio: cimak
LE
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 4 lata
  • Postów:232
0
cimak napisał(a)
Kopiuj
var r:TRect;
begin
  r:=Screen.WorkAreaRect;
  Showwindow( form1.Handle,SW_MAXIMIZE);
  SetWindowPos(handle, 0, r.Left, r.Top, r.Right, r.Bottom, SWP_SHOWWINDOW);
end;

Świetny pomysł i co najważniejsze działa :) Dzięki!

tak naprawde wystarczy tylko

Kopiuj
var r:TRect;
begin
  r:=Screen.WorkAreaRect;
  SetWindowPos(handle, 0, r.Left, r.Top, r.Right, r.Bottom, SWP_SHOWWINDOW);
end;

Po co maksymalizować okno na maxa skoro SetWindowPos() i tak ustawia jego rozmiar taki jaki trzeba :)

edytowany 1x, ostatnio: Legalnl
Zobacz pozostałe 2 komentarze
cimak
nie zaszkodzi a lepiej zeby bylo.
LE
a jednak szkodzi, bo widac że forma skacze, najpierw leci na full a potem zmniejsza sie o pasek zadan.
unikalna_nazwa
poza tym czemu okno ma "wiedzieć że jest zmaksymalizowane" skoro tak naprawdę nie jest? widać że w przypadku okien bez krawędzi maksymalizacja oznacza pokrycie całego ekranu
LE
i tak jest, okna z bs false maksymalizują sie na fullscreen. Jednak ja w programie mam własne ramki dlatego. wystarczy jeszcze spisac położenie i rozmiar przed maksymalizacją i można okno zdemaksymalizować.
KR
jeśli widać ramkę okna i można kliknąć na maksymalizację okna albo przywracanie to informowanie okna o tym, że jest zmaksymalizowane powinno być, w innym wypadku (np. pełnoekranowe aplikacje) w zasadzie nawet nie powinno się tego robić.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.