Delphi Tips & Tricks softsale > Delphi Tips & Tricks      

< poprzednia rada następna rada >

Okno podrzędne niezależne od okna main

Czasem chcemy aby okno podrzędne było widoczne również wtedy kiedy okno nadrzędne zostanie zwinięte do ikony. Na przykład z form1 wołamy form2, ale chcemy aby po zwininięciu do ikony form1, form2 była widoczna. Aby to zrobić trzeba zmienić własność określająca rodzica naszego okna. Jedynym miejscem, gdzie można to zrobić jest procedura CreateParams. Procedura ta inicjalizuje parametry potrzebne do wyświetlenia okna przekazywane następnie do CreateWindowHandle. Parametrem CreateParams jest Params, będący następującą strukturą:

type

  TCreateParams = record
     Caption: PChar;
     Style: Longint;
     ExStyle: Longint;
     X, Y: Integer;
     Width, Height: Integer;
     WndParent: HWND;
     Param: Pointer
     WindowClass: TWndClass;
     WinClassName: array[0..63] of Char;
  end;

Jednym z pól struktury TCreateParams jest WndParent. Parametr ten określa uchwyt okna będącego rodzicem okna tworzonego. W przypadku, kiedy chcemy aby nasze okno podrzędne było niezależne od okna main, ustawiamy mu rodzica jako okno najwyżej w hierarchi, czyli Windowsowe okno desktopu. Uchwyt do tego okna można określić poprzez wywołanie API GetDesktopWindow.

W deklaracji private dla form2 należy nadpisać procedurę CreateParams

private
      { Private declarations }
      procedure
         CreateParams(var Params : TCreateParams); override;
      public
         { Public declarations }

A oto ciało naszej procedury CreateParams:

procedure TForm2.CreateParams(var Params : TCreateParams); 
begin
  inherited CreateParams(Params);
  Params.WndParent := GetDesktopWindow;
end;

SOFTSALE - Oprogramowanie i Szkolenia
softsale@softsale.com.pl

03-565 Warszawa , ul. Borzymowska 43 lok. 301C
tel/fax:4084840,GSM:0607612428