Hogyan akadályozzuk meg, hogy egy Delphi form a képernyőn kívülre kerüljön?

A Delphi TForm objektuma rendelkezik minden olyan szükséges tulajdonsággal és eseménnyel, amelyek általában szükségesek. Néha előfordulhat, hogy ezek közül néhány mégis hiányzik valami. Próbáljunk készíteni egy egszer alkalmazást, majd mozgassuk a formot a képernyőnk kívülre. Ezt nagyon egyszerűen megtehetjük, ha a form címsoránál megragadjuk az egérrel mozgatjuk.

De mi van akkor, ha nem szeretném, hogy az alkalmazást ne kerülhessen a képernyőn kivülre? Ilyenkor jól jönne egy OnMoving esemény amivel kezelhetnénk, de sajnos nincs ilyen. Szerencsére a Delphivel könnyű ilyet készíteni.

  1. Az OnMoving esemény kezeléséhez adjuk hozzá a következő definíciót a form privát szekciójához:
     private
     { Private declarations }
     procedure WMMoving(var Msg:TWMMoving); message WM_MOVING;
    Mozgatásakor WM_MOVING üzenetet kap az ablak. Az üzenet feldogozásával ellenőrizhetjük az elmozdulási téglalapot és ha szükséges, módosíthatjuk a méretét vagy a pozícióját.
  2. Írjuk meg a form elmozdulásait kezelő kódot, ami megakadályozza a képernyőn kívülre kerülést:
    procedure TForm1.WMMoving(var Msg:TWMMoving) ;
    var WorkArea: TRect;
    begin
     WorkArea:=Screen.WorkAreaRect;
     with Msg.DragRect^ do begin
     if Left<WorkArea.Left then OffsetRect(Msg.DragRect^,WorkArea.Left-Left,0);
     if Top<WorkArea.Top then OffsetRect(Msg.DragRect^,0,WorkArea.Top-Top);
     if Right>WorkArea.Right then OffsetRect(Msg.DragRect^,WorkArea.Right-Right,0) ;
     if Bottom>WorkArea.Bottom then OffsetRect(Msg.DragRect^,0,WorkArea.Bottom-Bottom);
     end;
     inherited;
    end;

 A fenti WM_MOVING eseménykezelő megakadályozza, hogy a form a képernyőn kívülre kerüljön.

Címkék: