Работа с прозорци като в Deplhi IDE

Моля, кажете ми как да организирам взаимодействието на прозорците, както в Delphi. Така че в горната част да има onkno с лента с инструменти и меню, а в долната част, когато щракнете върху бутона за разширяване , те ще се разгънат, за да не затворят главния (горния прозорец).

Събитие на долния прозорец: procedure TFormDogovor.FormResize(Sender: TObject); begin if Top ако височината на горния прозорец е 100, тогава се оказва, че разширявате прозореца на цял екран, но ако просто разтегнете долния прозорец нагоре, той се оказва напълно грозен. Може би можете по някакъв начин да уловите момента, когато WindowState стане wsMax имизиран ?

дим Съобщения за прозорец.

> дими Window Messages.Plin, какво е това, което трябва да влезеш в WinAPI?

procedure TFormDogovor.FormResize(Sender: TObject); begin If (form1.WindowState = wsMaximized) Then .

Но не, събитието за преоразмеряване се случва преди WindowState да приеме стойността wsMaximized

проверих опцията от [0], когато преоразмеряването е съвсем нормална опция, само когато преместите прозореца, можете да го вдигнете по-високо.

и няма onMove за прозореца, очевидно все едно, но WinApi

Моля, кажете ми как точно да хвана разширяването на прозореца. И след това WM_GETMINMAXINFO "хваща" много други неща

Поне ако погледнете: TForm1 procedure WMUser(var Msg: TMessage); съобщение WM_GETMINMAXINFO; .

procedure TForm1.WMUser(var Msg: TMessage); begin showmessage(inttostr(Msg.LParam)); end;

Ето го. Не знам как е преди кода, но външно работи като прозорците на Delphi:

тип TForm1 = клас(TForm) BitBtn1: TBitBtn; Панел1: TPanel; procedure FormResize(Sender: TObject); частен < Лични декларации > публичен < Публични декларации > procedure WMUser(var Msg:TMessage); съобщение WM_GETMINMAXINFO; край;

var Формуляр1: TForm1; Пълен размер:boolean=false; const HederFormHeight=100;

procedure TForm1.WMUser(var Msg: TMessage); begin if (Msg.LParam=1238916) and (Self.WindowState=wsNormal) then begin FullSize:=true; WindowState:=wsMaximized; изход; край; край;

procedure TForm1.FormResize(Sender: TObject); begin if ((WindowState=wsMaximized) and (FullSize)) then begin Top:=HederFormHeight; Височина:=Височина на екрана-129; Пълен размер:=false; край; край;

Когато 1238916 е научно зададено, 129 е височината на лентата на задачите.

Пийте на когото не е мързел.

> Nifika не работи, но това, което трябваше да бъде, го направих > не разбрах :(Разбирам защо не работи. За всеки прозорец трябва да се намери Msg.LParam. В един случай се оказа 1238916 (в експериментална програма), но що се отнася до основната задача, която върнах за първия прозорец оказа се, че е 1238912. Друг компютър, стартиран със същия номер, ще се промени.

накратко,> Така. дръжте се за плужека. :)има нещо за това.

Оказва се, че Msg.LParam не е число, а указател. Въпросът е как да извлечем нещо полезно от него

Триндец. Заиграх се. Решението се побира в 2 реда:

тип TForm1 = клас(TForm) BitBtn1: TBitBtn; Панел1: TPanel; частен < Лични декларации > публичен < Публични декларации > procedure WMUser(var Msg: TWMGetMinMaxInfo); съобщение WM_GETMINMAXINFO; край;

var Form1: TForm1; const HederFormHeight=100;