// In einem
Stringgrid sitzt ein Button in einer Zelle, füllt diese aus
// und wandert beim Scrollen
(logischerweise)
mit der Zelle mit. Ich
// benutze dabei das GraphicControl "TSpeedButton", da für das
WinControl
// "TButton" eine eigene Mausroutine geschrieben werden müsste.
// Getestet mit D4 unter XP
...
private
{ Private-Deklarationen }
public
procedure MyClick(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses Buttons;
var
zeile: integer = 3;
spalte: integer = 2;
drin: boolean;
Btn: TSpeedButton;
procedure TForm1.FormCreate(Sender: TObject);
begin
Btn := TSpeedButton.create(self);
Btn.parent := Stringgrid1;
Btn.Caption := '&Test';
Btn.visible := false;
Btn.OnClick := MyClick;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Btn.free;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with TStringGrid(Sender) do
if (Acol >= Fixedcols) and (ARow >= Fixedrows) then begin
if (ACol = spalte) and (ARow = zeile) then begin
Btn.BoundsRect := Rect;
Btn.visible := true;
drin := true;
end else
drin := false;
end;
end;
procedure TForm1.StringGrid1TopLeftChanged(Sender: TObject);
begin
with TStringGrid(Sender) do begin
refresh;
Btn.visible := drin;
end;
end;
procedure TForm1.MyClick(Sender: TObject);
begin
// machwas, z.B.:
showmessage('Button wurde angeklickt');
end;
|