Cita:
Empezado por AzidRain
supongamos 3 grids en sus ventanas "apiladas" (tile), tome la que quiero usar como "maestra" y veo que tiene 5 filas, las demás tienen igual 5 o menos, pero los campos son exactamente las mismas.
El comportamiento a reproducir es que si movemos el scrollbar o bien la celda con el foco en nuestro grid maestro, esto se replique en los demás grids, obviamente los que tengan menos filas o solo una quedarían en el mismo lugar, la idea principal es que en todo momento todas las grids tengan seleccionado el mismo campo ya que su estructura es idéntica.
|
Hola AzidRain.
Hice este código que creo que en líneas generales hace lo que buscas.
MDIForm:
Código Delphi
[-]
...
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus,
Unit2;
type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
private
procedure GridChange(Sender: TObject; Valor: string);
public
end;
var
Form1: TForm1;
implementation {$R *.dfm}
uses Unit3, Unit4;
procedure TForm1.FormShow(Sender: TObject);
begin
with TForm2.Create(Self) do
GridOnChange:= GridChange;
TileMode:= tbVertical;
Tile;
end;
procedure TForm1.GridChange(Sender: TObject; Valor: string);
begin
Form3.DBGrid1.DataSource.DataSet.Locate('Campo',Valor,[]);
Form4.DBGrid1.DataSource.DataSet.Locate('Campo',Valor,[]);
end;
...
MDIChild emisor (maestro):
Código Delphi
[-]
...
type
TGridChangeEvent = procedure(Sender: TObject; Valor: string) of object;
TForm2 = class(TForm)
DataSet: TTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure DataSetAfterScroll(DataSet: TDataSet);
private
FGridChange: TGridChangeEvent;
public
property GridOnChange: TGridChangeEvent read FGridChange write FGridChange;
end;
var
Form2: TForm2;
implementation {$R *.dfm}
procedure TForm2.DataSetAfterScroll(DataSet: TDataSet);
begin
if Assigned(FGridChange) then
FGridChange(Self,DataSet.FieldByName('Campo').AsString);
end;
...
Es decir el MDIForm es el encargado de posicionar los DBGrids receptores cuando es disparado el evento TGridChangeEvent en el form que contiene el DBGrid 'maestro' (Form2 en el ejemplo).
Espero te ayude o al menos te hacerque alguna idea...
Un saludo.
Edito: (El tercer y cuarto MDIChilds están en creación automática para simplificar el ejemplo)