Ich will ein Steuerkreuz machen, und für die Richtungen verwende ich Button.
Code: Alles auswählen
unit steuerkreuz;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Controls, Buttons, Graphics, Forms, StdCtrls, ExtCtrls;
type
{ TSteuerKreuz }
TSteuerKreuz = class(TPanel)
private
FButtonNr: integer;
BitBtn: array of TBitBtn;
procedure KreuzClick(Sender: TObject);
public
property ButtonNr: integer read FButtonNr;
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
end;
implementation
{ TSteuerKreuz }
constructor TSteuerKreuz.Create(TheOwner: TComponent);
var
i: integer;
procedure SetButton(const BitBtn: TBitBtn; Left, Top: integer; Caption: string);
begin
BitBtn.Left := Left * 30;
BitBtn.Top := Top * 30;
BitBtn.Caption := Caption;
end;
begin
inherited Create(TheOwner);
Caption := 'Kreuz';
Height := 10;
Width := 10;
SetLength(BitBtn, 6);
for i := 0 to Length(BitBtn) - 1 do begin
BitBtn[i] := TBitBtn.Create(Self);
BitBtn[i].Parent := Self;
BitBtn[i].Height := 25;
BitBtn[i].Width := 25;
BitBtn[i].Tag := i;
BitBtn[i].OnClick := @KreuzClick;
end;
SetButton(BitBtn[0], 1, 0, 'Y+');
SetButton(BitBtn[1], 1, 2, 'Y-');
SetButton(BitBtn[2], 0, 1, 'X-');
SetButton(BitBtn[3], 2, 1, 'X+');
SetButton(BitBtn[4], 0, 2, 'Z-');
SetButton(BitBtn[5], 2, 0, 'Z+');
for i := 0 to Length(BitBtn) - 1 do begin
if Width <= BitBtn[i].Left + 25 then begin
Width := BitBtn[i].Left + 25;
end;
if Height <= BitBtn[i].Top + 25 then begin
Height := BitBtn[i].Top + 25;
end;
end;
end;
destructor TSteuerKreuz.Destroy;
var
i: integer;
begin
for i := 0 to Length(BitBtn) - 1 do begin
BitBtn[i].Free;
end;
inherited Destroy;
end;
procedure TSteuerKreuz.KreuzClick(Sender: TObject);
begin
FButtonNr := TButton(Sender).Tag;
Click;
end;
end.
Was noch gut währe, wen ich irgendwie Click; durch Click(ButtonNr) ersetzen könnte.