Buenas,
Me tomé el atrevimiento de hacer un ejemplito muy simple de algo similar a lo que pedís. Y en consideración de la admiración que les tengo a Uds para mí es todo un placer poder colaborar, aunque sea con una idea:
Código Delphi
[-]
unit CustomDBGrid1;
interface
uses
Windows, Messages, Dialogs, SysUtils, Classes, Controls, Grids, DBGrids;
type
TEv_ColumnWidthChg = procedure (Sender: TObject; Columna: Longint) of object;
type TCustomDBGrid1 = class(TDBGrid)
private
bColMoved : Boolean;
varColWidthChg : TEv_ColumnWidthChg;
varCurrentCell : TGridCoord;
procedure Proc_MovedEvent(Sender: TObject; FromIndex, ToIndex: Longint);
public
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
constructor Create(AOwner : TComponent); override;
procedure ColWidthsChanged; override;
published
property OnColumnWidthChange : TEv_ColumnWidthChg read varColWidthChg write varColWidthChg;
end;
procedure Register;
implementation
procedure TCustomDBGrid1.Proc_MovedEvent(Sender: TObject; FromIndex, ToIndex: Longint);
begin
bColMoved := True;
end;
procedure TCustomDBGrid1.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
inherited MouseDown(Button, Shift, X, Y);
varCurrentCell := TCustomGrid(Self).MouseCoord(X - 5, Y);
end;
procedure TCustomDBGrid1.ColWidthsChanged;
begin
inherited ColWidthsChanged;
if not bColMoved then begin
if Assigned(varColWidthChg) then varColWidthChg(Self, varCurrentCell.X);
end;
bColMoved := False;
end;
constructor TCustomDBGrid1.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
Self.OnColumnMoved := Proc_MovedEvent;
bColMoved := False;
end;
procedure Register;
begin
RegisterComponents('TEST', [TCustomDBGrid1]);
end;
end.