Dafür habe ich Button in ein Panel gelegt, so wie im Anhang.
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;
FHeight: integer;
FWidth: integer;
procedure KreuzClick(Sender: TObject);
procedure SetButton;
procedure SetHeight(AValue: integer);
procedure SetWidth(AValue: integer);
public
property ButtonNr: integer read FButtonNr;
property Width: integer read FWidth write SetWidth;
property Height: integer read FHeight write SetHeight;
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
end;
implementation
{ TSteuerKreuz }
constructor TSteuerKreuz.Create(TheOwner: TComponent);
var
i: integer;
begin
inherited Create(TheOwner);
Caption := 'Kreuz';
FHeight := inherited Height;
FWidth := inherited Width;
SetLength(BitBtn, 6);
for i := 0 to Length(BitBtn) - 1 do begin
BitBtn[i] := TBitBtn.Create(Self);
BitBtn[i].Parent := Self;
BitBtn[i].Tag := i;
BitBtn[i].OnClick := @KreuzClick;
end;
SetButton;
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;
procedure TSteuerKreuz.SetButton;
procedure But(const ABitBtn: TBitBtn; ALeft, ATop: integer; ACaption: string);
begin
ABitBtn.Left := ALeft * Width div 3;
ABitBtn.Top := ATop * Height div 3;
ABitBtn.Caption := ACaption;
end;
var
i: Integer;
begin
for i := 0 to Length(BitBtn) - 1 do begin
BitBtn[i].Height := Height div 3;
BitBtn[i].Width := Width div 3;
end;
But(BitBtn[0], 1, 0, 'Y+');
But(BitBtn[1], 1, 2, 'Y-');
But(BitBtn[2], 0, 1, 'X-');
But(BitBtn[3], 2, 1, 'X+');
But(BitBtn[4], 0, 2, 'Z-');
But(BitBtn[5], 2, 0, 'Z+');
end;
procedure TSteuerKreuz.SetHeight(AValue: integer);
var
i: integer;
begin
FHeight := AValue;
inherited Height := FHeight;
SetButton;
end;
procedure TSteuerKreuz.SetWidth(AValue: integer);
var
i: integer;
begin
FWidth := AValue;
inherited Width := FWidth;
SetButton;
end;
end.Code: Alles auswählen
procedure TForm1.FormResize(Sender: TObject);
begin
SteuerKreuz1.Width := ClientWidth * 2 div 3;
SteuerKreuz1.Height := ClientHeight * 2 div 3;
end; Code: Alles auswählen
SteuerKreuz1.Align := alClient;Wie ich es wie in einem anderen Post gelesen habe, kann ich auf die Destroy-Destructor vollkommen verzichten ?