Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

 SendMessage(hwnd, WM_SETREDRAW, 0, 0);

end;

procedure EndScreenUpdate(hwnd : THandle; erase : Boolean);

begin

 if (hwnd = 0) then hwnd := Application.MainForm.Handle;

 SendMessage(hwnd, WM_SETREDRAW, 1, 0);

 RedrawWindow(hwnd, nil, 0, DW_FRAME + RDW_INVALIDATE + RDW_ALLCHILDREN + RDW_NOINTERNALPAINT);

 if (erase) then Windows.InvalidateRect(hwnd, nil, True);

end;

– Jeff Johnson 

Минимизация

модального окна

Мне нужно открыть из моей формы модальное окно, т.е. приостановить работу в моей форме до обработки этого модального окна. Но при этом я теряю возможность убрать (минимизировать) мою форму

Nomadic советует:

function TMyForm.Execute: TModalResult;

begin

 Show;

 try

SendMessage(Handle, CM_ACTIVATE, 0, 0);

ModalResult := 0;

repeat

Application.HandleMessage;

if Application.Terminated then ModalResult := mrCancel;

if ModalResult = mrCancel then CloseModal;

until ModalResult <> 0;

Hide;

Result := ModalResult;

SendMessage(Handle, CM_DEACTIVATE, 0, 0);

 finally

Hide;

 end;

end;

Конечно, в TMyForm должно быть FormStyle := fsStayOnTop;

Прозрачная форма

Dmitry V. Koreyba советует:

Высылаю прогу которая делает прозрачной форму. Может кому-нибудь поможет в его дизайнерских изысканиях.

var FullRgn, ClientRgn, CtlRgn : THandle;

procedure TForm1.DoInvisible;

var

 AControl : TControl;

 A, Margin, X, Y, CtlX, CtlY : Integer;

begin

 Margin := (Width - ClientWidth) div 2;

 FullRgn := CreateRectRgn(0, 0, Width, Height);

 X := Margin;

 Y := Height - ClientHeight - Margin;

 ClientRgn := CreateRectRgn(X, Y, X + ClientWidth, Y + ClientHeight);

 CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF);

 for A := 0 to ControlCount - 1 do begin

AControl := Controls[A];

if (AControl is TWinControl) or (AControl is TGraphicControl) then

with AControl do begin

if Visible then begin

CtlX := X + Left;

CtlY := Y + Top;

CtlRgn := CreateRectRgn(CtlX, CtlY, CtlX + Width, CtlY + Height);

CombineRgn(FullRgn, FullRgn, CtlRgn, RGN_OR);

end;

end;

 end;

 SetWindowRgn(Handle, FullRgn, TRUE);

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

 DeleteObject(ClientRgn);DeleteObject(FullRgn);

 DeleteObject(CtlRgn);

end;

procedure TForm1.DoVisible;

begin

 FullRgn := CreateRectRgn(0, 0, Width, Height);

 CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY);

 SetWindowRgn(Handle, FullRgn, TRUE);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

 DoInvisible;

end;

Каким

образом можно изменить системное меню формы?

Nomadic советует:

Hе знаю как насчет акселераторов,надо поискать, а вот добавить пункт меню(Item) — пожалуйста

type TMyForm=class(TForm)

 procedure wmSysCommand(var Message:TMessage); message WM_SYSCOMMAND;

end;

const

 ID_ABOUT = WM_USER+1;

 ID_CALENDAR=WM_USER+2;

 ID_EDIT = WM_USER+3;

 ID_ANALIS = WM_USER+4;

implementation

procedure TMyForm.wmSysCommand;

begin

 case Message.wParam of

 ID_CALENDAR:DatBitBtnClick(Self);

 ID_EDIT :EditBitBtnClick(Self);

 ID_ANALIS:AnalisButtonClick(Self);

Поделиться с друзьями: