// Es wird ein Verschieben des Fensters verhindert.
// Siehe aber auch
Verschieben und Größenänderung verhindern

// Getestet mit D4 unter XP


// Variante1: Das Fenster kann nicht mit der Maus, jedoch mit den
//            Tasten verschoben werden.

... 
private 
{ Private-Deklarationen } 
public 
 
procedure WMNChittest(var msg: TWMNChittest); message WM_NChittest; 
end; 
 
var 
  Form1: TForm1; 
 
implementation 
 
{$R *.DFM} 
 
procedure TForm1.WMNChittest(var msg: TWMNChittest); 
begin 
  DefaultHandler(Msg); 
  if Msg.result = HTCAPTION then 
    Msg.result := HTCLIENT; 
end;



//-------------------------------------------------------------
 

// Variante2: Das Fenster kann zunächst verschoben werden, springt
//            aber beim Loslassen der Maustaste wieder auf seinen
//            Platz zurück. Beim Verschieben mit Tasten, bleibt das
//            Fenster jedoch am Ziel.

... 
private 
{ Private-Deklarationen } 
public 
 
procedure WMNChittest(var amsg: TWMNChittest); message WM_NChittest; 
  procedure Mausfrage(var maus: TMessage); message WM_NCLBUTTONDOWN; 
end; 
 
var 
  Form1: TForm1; 
 
implementation 
 
{$R *.DFM} 
 
const 
  erlaubt: boolean = false; 
 
var 
  merkx, merky: integer; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  merkx := left; 
  merky := top; 
end; 
 
procedure TForm1.WMNChittest(var amsg: TWMNChittest); 
begin 
  DefaultHandler(amsg); 
  if amsg.result = HTCAPTION then 
    erlaubt := true 
  else 
    erlaubt := false; 
end; 
 
procedure TForm1.Mausfrage(var maus: TMessage); 
begin 
  DefaultHandler(maus); 
  if (maus.result = 0) and erlaubt then 
    setbounds(merkx, merky, width, height); 
end; 

//-------------------------------------------------------------
 

// Variante3: Das Fenster kann überhaupt nicht verschoben werden.

procedure TForm1.FormCreate(Sender: TObject); 
var 
  m: HMenu; 
begin 
  m := GetSystemMenu(Form1.handle, false); 
  RemoveMenu(m, $F010, MF_BYCOMMAND); 
end;





Zugriffe seit 6.9.2001 auf Delphi-Ecke