我想要一个所有行看起来都相同的网格 在Delphi中,如何让用户在没有固定行的情况下调整TStringGrid列的大小?通常,您只能调整固定行,而不能修复整个网格。
我正在使用XE2。
TIA
标记
答案 0 :(得分:1)
您可以覆盖CalcSizingState。
设置
- 如果符合条件,请说明gsRowSizing(在下面的示例中检查是否在MouseMove中按下了Alt键)和
- 使用MouseToCell从MouseDown索引计算索引。
可能需要进行一些微调。
type
TStringGrid = Class(Grids.TStringGrid)
private
FIsSizing: Boolean;
FIndex: Integer;
procedure CalcSizingState(X, Y: Integer; var State: TGridState; var Index: Longint; var SizingPos, SizingOfs: Integer; var FixedInfo: TGridDrawInfo); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
private
End;
TForm3 = class(TForm)
StringGrid1: TStringGrid;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
{ TStringGrid }
procedure TStringGrid.CalcSizingState(X, Y: Integer; var State: TGridState; var Index, SizingPos, SizingOfs: Integer; var FixedInfo: TGridDrawInfo);
begin
inherited;
if FIsSizing then
State := gsRowSizing;
if (FIndex > -1) then
begin
Index := FIndex;
end;
end;
procedure TStringGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
Col: Integer;
begin
inherited;
MouseToCell(X, Y, Col, FIndex);
end;
procedure TStringGrid.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
inherited;
FIsSizing := ssAlt in Shift;
end;