32 Урока Borland Delphi



             

Урок 31 - часть 13


{меняем стиль окна}

Style:=Style or WS_OVERLAPPEDWINDOW;

SetWindowLong(Button1.Handle, GWL_STYLE, Style);

{обновление окна (Invalidate не сработает)}

SetWindowPos(Button1.Handle, HWND_TOP, 0, 0, 0, 0,

SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER or SWP_DRAWFRAME

or SWP_NOACTIVATE);

end;

Указать свой стиль окна во время его создания можно, если переопределить для любого оконного объекта (включая TForm) процедуру CreateParams:

type

TForm1 = class(TForm)

. . .

procedure CreateParams(var Params:TCreateParams);

override;

. . .

end;

. . .

procedure TForm1.CreateParams(var Params: TCreateParams);

begin

inherited CreateParams(Params);

Params.Style:=Params.Style and not WS_CAPTION;

end;
 
 

IV. Распахивание (maximize) и захлопывание (minimize) окон.

Иногда нужно, чтобы окно при нажатии кнопки “Maximize” распахивалось не на весь экран, а только на часть его. Вспомните редактор исходных текстов в среде Delphi. Эта задача, как и многие другие, решается написанием обработчика соответствующего события - WM_GETMINMAXINFO. Это сообщение посылается системой в окно при максимизации окна или при изменении его размеров с помощью рамки. Окно возвращает требуемые размеры и положение.

TForm1 = class(TForm)

. . .

private

procedure WMGetMinMaxInfo(var M: TWMGetMinMaxInfo);

message WM_GETMINMAXINFO;

. . .

end;

. . .

procedure TForm1.WMGetMinMaxInfo(var M: TWMGetMinMaxInfo);

begin

{на всякий случай}

inherited;

{указываем верхнюю границу окна ниже другого окна}

M.MinMaxInfo^.PTMaxPosition.Y := Form2.Top+Form2.Height;

end;

С помощью обработчика данного события устанавливается не только место и размер распахнутого полностью окна, но и минимальные/максимальные размеры окна при изменении их с помощью рамки. Пример, установка в обработчике события WM_GETMINMAXINFO

m.minmaxinfo^.ptMinTrackSize.y := 100;

m.minmaxinfo^.ptMaxTrackSize.y := 300;

не даст сделать вертикальный размер окна менее 100 и более 300 точек.


1.7 Обработка событий от клавиатуры


I. Эмуляция нажатия клавиши.

Внутри приложения это выполняется достаточно просто с помощью вызова функции Windows API SendMessage() (можно воспользоваться и методом Perform того объекта (или формы), кому посылается сообщение о нажатой клавише).




Содержание  Назад  Вперед