![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Люди добрые, код следующий. после наследование при вызове процедуры doEqualColumnWidthes не меняется ширины колонки.
Мышкой расширяется колонка , но значенеи своство DBGrid1.Columns[i].Width. Чего я не правильно делаю? Задача такая : При изменение ширина колонки DBGrid1-a автоматическ изменить ширыны соответствующий колонки StringGrid1 -а Код:
unit Unit16;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.Grids, Vcl.DBGrids,
FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param,
FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf,
FireDAC.Comp.DataSet, FireDAC.Comp.Client, Vcl.StdCtrls;
type TDbgrid=class(vcl.dbgrids.TDbgrid)
protected
OnColumnResized:TProc;
procedure ColWidthsChanged; override;
end;
type
TForm16 = class(TForm)
Dbgrid1:Tdbgrid;
StringGrid1: TStringGrid;
FDMemTable1: TFDMemTable;
DataSource1: TDataSource;
btn_doEqulaColumns: TButton;
procedure FormCreate(Sender: TObject);
procedure btn_doEqulaColumnsClick(Sender: TObject);
private
procedure doEqualColumnWidthes;
public
{ Public declarations }
end;
var
Form16: TForm16;
implementation
{$R *.dfm}
procedure TDbgrid.ColWidthsChanged;
begin
//
end;
procedure TForm16.btn_doEqulaColumnsClick(Sender: TObject);
begin
doEqualColumnWidthes;
end;
procedure TForm16.doEqualColumnWidthes;
var i:integer;
begin
for I := 0 to self.DBGrid1.Columns.Count-1 do
self.StringGrid1.ColWidths[i]:=self.DBGrid1.Columns[i].Width;
end;
procedure TForm16.FormCreate(Sender: TObject);
begin
self.FDMemTable1.Close;
self.FDMemTable1.FieldDefs.Clear;
FDMemTable1.FieldDefs.Add('name', ftString,20);
FDMemTable1.FieldDefs.Add('age', ftinteger) ;
FDMemTable1.CreateDataSet;
FDMemTable1.Append;
FDMemTable1.FieldByName('name').AsString:='Alise';
FDMemTable1.FieldByName('age').AsInteger:=20;
FDmemtable1.post;
FDMemTable1.Append;
FDMemTable1.FieldByName('name').AsWideString:='Bob';
FDMemTable1.FieldByName('age').AsInteger:=20;
FDmemtable1.post;
self.DataSource1.DataSet:=self.FDMemTable1;
self.DBGrid1.DataSource:=self.DataSource1;
self.StringGrid1.FixedCols:=0;
Self.StringGrid1.RowCount:=2;
self.StringGrid1.ColCount:=self.DBGrid1.Columns.count;
doEqualColumnWidthes;
end;
end.
|
|
#2
|
|||
|
|||
|
Delphi XE3. Вот такой код работает как по кнопке, так и автоматически:
Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids, Vcl.DBGrids,
Data.DB, dxmdaset;
type
TDBGrid = class(vcl.dbgrids.TDBGrid)
private
FColResize : TNotifyEvent;
protected
procedure ColWidthsChanged; override;
public
property OnColResize : TNotifyEvent read FColResize write FColResize;
end;
TForm1 = class(TForm)
dxMemData1: TdxMemData;
dxMemData1Field1: TStringField;
dxMemData1Field2: TStringField;
dxMemData1Field3: TStringField;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
StringGrid1: TStringGrid;
btSyncColWidths: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btSyncColWidthsClick(Sender: TObject);
private
{ Private declarations }
procedure SyncColWoidths;
procedure DBGridColResize(Sender : TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TDBFrid }
procedure TDBGrid.ColWidthsChanged;
begin
inherited;
if Assigned(FColResize) then
FColResize(Self);
end;
{ TForm1 }
procedure TForm1.btSyncColWidthsClick(Sender: TObject);
begin
SyncColWoidths;
end;
procedure TForm1.DBGridColResize(Sender: TObject);
begin
SyncColWoidths;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
dxMemData1.Active := True;
dxMemData1.AppendRecord([1,'Rec1 Fld1','Rec1 Fld2','Rec1 Fld3']);
dxMemData1.AppendRecord([2, 'Rec2 Fld1','Rec2 Fld2','Rec2 Fld3']);
dxMemData1.AppendRecord([3, 'Rec3 Fld1','Rec3 Fld2','Rec3 Fld3']);
SyncColWoidths;
DBGrid1.OnColResize := DBGridColResize;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
dxMemData1.Active := False;
end;
procedure TForm1.SyncColWoidths;
var
I : Integer;
begin
for I := 0 to DBGrid1.Columns.Count-1 do
StringGrid1.ColWidths[i] := DBGrid1.Columns[i].Width;
end;
end. |