![]() |
|
|
Регистрация | << Правила форума >> | 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. |