// 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.
|