Реализация события OnColumnClick из TListView для TStringGrid



Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{
There are two routines to implement the OnColumnClick Methods for a TStringGrid.
Set the first row as fixed and the Defaultdrawing to True.
Mit folgenden zwei Routinen kann man in einem TStringgrid
die Methode OnColumnClick eines TListView erzeugen (visuell).
Reihe 0 mu? fixiert sein undDefaultDrawing = True
}
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
zelle: TRect; // cell 
acol, arow: Integer;
public
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Text: string;
begin
with stringgrid1 do
begin
MouseRoCell(x, y, acol, arow);
if (arow = 0) and (button = mbleft) then
case acol of
0..2:
begin
// Draws a 3D Effect (Push) 
// Zeichnet 3D-Effekt (Push) 
zelle := CellRect(acol, arow);
Text := Cells[acol, arow];
Canvas.Font := Font;
Canvas.Brush.Color := clBtnFace;
Canvas.FillRect(zelle);
Canvas.TextRect(zelle, zelle.Left + 2, zelle.Top + 2, Text);
DrawEdge(Canvas.Handle, zelle, 10, 2 or 4 or 8);
DrawEdge(Canvas.Handle, zelle, 2 or 4, 1);
end;
end;
end;
end;
procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Text: string;
begin
with StringGrid1 do
begin
// Draws a 3D-Effect (Up) 
// Zeichnet 3D-Effekt (Up) 
Text := Cells[acol, arow];
if arow = 0 then
begin
Canvas.Font := Font;
Canvas.Brush.Color := clBtnFace;
Canvas.FillRect(zelle);
Canvas.TextRect(zelle, zelle.Left + 2, zelle.Top + 2, Text);
DrawEdge(Canvas.Handle, zelle, 4, 4 or 8);
DrawEdge(Canvas.Handle, zelle, 4, 1 or 2);
MouseToCell(zelle.Left, zelle.Top, acol, arow);
end;
end;
if (arow = 0) and (Button = mbleft) then
case acol of
0..2:
begin
// Code to be executed... 
// Programmcode der ausgefuhrt werden soll 
ShowMessage('Column ' + IntToStr(acol));
zelle := stringgrid1.CellRect(1, 1);
end;
end;
end;
end.

Далее: Сменить цвет выделения в StringGrid »»