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



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke