// Im Folgenden wird ein Prinzip gezeigt, wie Buttons neben dem Fenster
// platziert werden können. Im Beispiel sitzen diese direkt am Fenster, sie
// können aber auch weiter weg angebracht sein.

// Getestet mit D4 unter WinME

unit Unit1; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
  StdCtrls; 
 
type 
  TForm1 = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    procedure FormDestroy(Sender: TObject); 
  private 
    { Private-Deklarationen } 
  public 
    procedure Nachricht(var Msg: TMsg; var Handled: Boolean); 
    procedure OnMove(var aMsg: TWMMove); message WM_MOVE; 
  end; 
 
var 
  Form1: TForm1; 
 
  procedure MLClick1; 
  procedure MLClick2; 
  procedure MLClick3; 
 
implementation 
 
{$R *.DFM} 
 
const 
  bttn: array[0..2] of THandle = (0, 0, 0); 
  pr: array[0..2] of procedure = (MLClick1, MLClick2, MLClick3); 
 
var 
  welcher: integer; 
  r: array[0..2] of TRect; 
  s: array[0..2] of string; 
  links, oben, breit, hoch: array[0..2] of integer; 
 
  procedure MLClick1; 
  begin 
  // Mach was, z.B.: 
    showmessage('Klick-1'); 
  end; 
 
  procedure MLClick2; 
  begin 
  // Mach was, z.B.: 
    showmessage('Klick-2'); 
  end; 
 
  procedure MLClick3; 
  begin 
  // Mach was, z.B.: 
    showmessage('Klick-3'); 
  end; 
 
  procedure TForm1.Nachricht(var Msg: TMsg; var Handled: Boolean); 
  var x, y, z: integer; 
  begin 
    if (Msg.message = WM_LBUTTONUP) then begin 
      x := Msg.LParam and $FFFF; 
      y := Msg.LParam shr 16; 
      for z := 0 to 2 do 
        if (Msg.hwnd = bttn[z]) and (ptinrect(r[z], point(x, y))) 
          then begin 
          pr[z]; 
          break; 
        end; 
    end; 
  end; 
 
  function MLButton(parnt: TWincontrol): THandle; 
  begin 
    result := CreateWindow('BUTTON', pchar(s[welcher]), WS_VISIBLE or WS_CHILD 
      or BS_PUSHBUTTON or WS_POPUP, links[welcher], oben[welcher], 
      breit[welcher], hoch[welcher], parnt.handle, 0, HINSTANCE, nil); 
  end; 
 
  procedure TForm1.FormCreate(Sender: TObject); 
  var x: integer; 
  begin 
    Application.OnMessage := Nachricht; 
    breit[0] := 65; 
    hoch[0] := 40; 
    links[0] := left - breit[0]; 
    oben[0] := top; 
    s[0] := 'Key1'; 
    r[0] := rect(0, 0, breit[0], hoch[0]); 
    breit[1] := 85; 
    oben[1] := top + hoch[0]; 
    hoch[1] := 25; 
    links[1] := left - breit[1]; 
    s[1] := 'Key2'; 
    r[1] := rect(0, 0, breit[1], hoch[1]); 
    hoch[2] := 30; 
    oben[2] := top - hoch[2]; 
    links[2] := left; 
    breit[2] := 75; 
    s[2] := 'Key3'; 
    r[2] := rect(0, 0, breit[2], hoch[2]); 
    welcher := 0; 
    for x := 0 to 2 do begin 
      bttn[x] := MLButton(Form1); 
      inc(welcher); 
    end; 
  end; 
 
  procedure TForm1.OnMove(var aMsg: TWMMove); 
  begin 
    inherited; 
    setwindowpos(bttn[0], 0, left - breit[0], top, breit[0], hoch[0], 0); 
    setwindowpos(bttn[1], 0, left - breit[1], top + hoch[0], breit[1], 
      hoch[1], 0); 
    setwindowpos(bttn[2], 0, left, top - hoch[2], breit[2], hoch[2], 0); 
  end; 
 
  procedure TForm1.FormDestroy(Sender: TObject); 
  var x: integer; 
  begin 
    for x := 0 to 2 do 
      DestroyWindow(bttn[x]); 
  end; 
 
end.

 


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke