Archívum - január 4, 2009

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.

Märket

MärketMärket egy kis sziget Svédország és Finnország között. Nincs ebben semmi különös, hiszen rengeteg sziget van Balti-tengerben. Az érdekes a szigeten áthúzódó határvonal. Mivel a sziget egy fontos kereskedelmi útvonalon fekszik, 1885-ben a finnek és az oroszok egy világítótornyot építettek a szigetre. Azonban a sziget felmérése nélkül, ez véletlenül a svéd oldalra sikerült. 1985-ben azonban a helyzetet érdekes módon oldották meg: átrajzolták a határt. Ez mégiscsak egyszerűbb volt mint odébbvinni a világítótornyot vagy a másik országnak adni a területet. Az egyes országokra jutó területet nem lehetett megváltoztatni, ahogy a partvonalat se, hogy ne befolyásolják az egyes országok halászati jogait. A dilemma eredménye lett a szokatlan alakú határ, mely találékonyan kielégítette a finn és a svéd érdekeket is. A határmódosítás óta egy fordított S-re emlékeztett, a világítótornyot csupán egy kis földdarab köti össze Finnország többi részével. A határt 25 évente rendszeresen újrafelméri egy a két ország képviselőiből álló csoport, az utolsó felmérés 2006. augusztusában volt.

Märket világítótornyaA világítótorony egyébként 1979 óta személyzet nélkül, automatikusan működik. Navigációs jelentőségét a korszerűbb navigációs eszközök (GPS) megjelenésével elvesztette. A sziget lakatlan, időnként lelkes rádióamatőrök keresik fel.