Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.30;
Скачать: CL | DM;

Вниз

Настройка DbGrid   Найти похожие ветки 

 
Leon1   (2005-01-14 14:24) [0]

Вот тут рылся рылся что то ничего не нашел, вопрос наверное банален до ужаса, суть проблемы такова
имеем форму с TDBGrid, Хотим: создать диалоговое окно для настройки данного TDBGrid пользователем, вопрос, как передать этот самый TDBGrid в форму настроек, поставить в uses у формы с настройками на форму с TDBGrid не имеет смысла, ибо должна функция унивесальна быть.... писать для каждый формы с TDBGrid обработчик отдельный обработчик настроек.... бррррр....


 
begin...end ©   (2005-01-14 14:34) [1]

> Leon1   (14.01.05 14:24)

Можно в форму настроек добавить метод, в котором в качестве одного из параметров будет параметр типа TDBGrid.

Например:

procedure TOptionsForm.AdvShow(Grid: TDBGrid);
begin
 // здесь можно какому-нибудь полю в классе
 // этой формы присвоить значение переданного
 // параметра, чтобы потом с ним работать
 Show
end.

И потом показывать форму настроек с помощью этого метода.


 
begin...end ©   (2005-01-14 14:40) [2]

А ещё, вероятно, можно использовать свойство Tag формы настроек.


 
Leon1   (2005-01-14 14:41) [3]

Да пробовал ни фига может конечно  косяк во мне вот код вызова из формы с TDbGrid
........
 FmSetupColumns:=TFmSetupColumns.Create(Self);
 FmSetupColumns.DbGrid:=DbGridEh1;
 FmSetupColumns.ShowModal;
 FmSetupColumns.Free;
........
Фот код формы настроек
unit TableSetupBox;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Buttons, DbGridEh;

type
 TFmSetupColumns = class(TForm)
   ListBox1: TListBox;
   Label1: TLabel;
   BitBtn1: TBitBtn;
   Label2: TLabel;
   Label3: TLabel;
   Edit1: TEdit;
   ComboBox1: TComboBox;
   FontDialog1: TFontDialog;
   Button1: TButton;
   ColorDialog1: TColorDialog;
   Button2: TButton;
   CheckBox1: TCheckBox;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   DbGrid:TDBgridEh;
   { Public declarations }
 end;
var
 FmSetupColumns: TFmSetupColumns;
implementation

{$R *.dfm}
procedure TFmSetupColumns.FormCreate(Sender: TObject);
Var
 I:Integer;
begin
 For I:=0 to DbGrid.Columns.Count-1 do///Тут получаем Access violation
   ListBox1.Items.Add(DbGrid.Columns.Items[i].Title.Caption);
end;

End.


 
Ega23 ©   (2005-01-14 14:44) [4]

Естественно. Потому, что на момент создания TFmSetupColumns твой DBGrid ещё не определён.


 
Leon1   (2005-01-14 14:50) [5]

Ай... я.... вот я балдень млин... а как же его передать то правильнее...


 
Leon1   (2005-01-14 15:08) [6]

Блин ну таже самая ерунда:
Вот вызвываю окно
 FmSetupColumns:=TFmSetupColumns.Create(Application);
 FmSetupColumns.AdvShow(DbGridEh1);
 FmSetupColumns.Free;

Вот окно настроек
unit TableStupBox;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Buttons, DbGridEh;

type
 TFmSetupColumns = class(TForm)
   ListBox1: TListBox;
   Label1: TLabel;
   BitBtn1: TBitBtn;
   Label2: TLabel;
   Label3: TLabel;
   Edit1: TEdit;
   ComboBox1: TComboBox;
   FontDialog1: TFontDialog;
   Button1: TButton;
   ColorDialog1: TColorDialog;
   Button2: TButton;
   CheckBox1: TCheckBox;
   procedure AdvShow(DbGridEh:TdbGrideh);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
var
 FmSetupColumns: TFmSetupColumns;
 DbGrid:TDBgridEh;
implementation

{$R *.dfm}

Procedure TFmSetupColumns.AdvShow(DbGridEh:TdbGrideh);
Var
 I:Integer;
begin
 DbGrid:=DbGridEh;
 ShowModal;
 For I:=0 to DbGrid.Columns.Count-1 do
   ListBox1.Items.Add(DbGrid.Columns.Items[i].Title.Caption);
End;
End.
И ListBox1 пуст как лист бумаги.... что то я помоему не то делаю... :-(


 
Ega23 ©   (2005-01-14 15:11) [7]

Ну тут есть несколько вариантов.
1. Переопределить конструктор у TFmSetupColumns.
Пример:

 TFmSetupColumns = class(TForm)
 private

   { Private declarations }
 public
   { Public declarations }
   DBGrid:TDBGrid;
   constructor CreateForm(AOwner: TComponent; aGrig : TDBGrid);

 end;

constructor TFmSetupColumns.CreateForm(AOwner: TComponent; aGrig : TDBGrid);
begin
Create(AOwner);
DBGrid:=aGrid;
end;

Создание формы тогда будет выглядеть:

FmSetupColumns:=TFmSetupColumns.CreateForm(Application, DBGrid1Eh);



Вариант 2.

Всё что ты делаешь на procedure TFmSetupColumns.FormCreate(Sender: TObject);
убрать в отдельную процедуру с входным параметром TDBGrid


 
Ega23 ©   (2005-01-14 15:12) [8]

Procedure TFmSetupColumns.AdvShow(DbGridEh:TdbGrideh);
Var
I:Integer;
begin
DbGrid:=DbGridEh;
ShowModal;
For I:=0 to DbGrid.Columns.Count-1 do
  ListBox1.Items.Add(DbGrid.Columns.Items[i].Title.Caption);
End;
End.
И ListBox1 пуст как лист бумаги.... что то я помоему не то делаю... :-(


ShowModal ПОСЛЕ цикла вставь.


 
Leon1   (2005-01-14 15:20) [9]

О есть


 
Ega23 ©   (2005-01-14 15:21) [10]

Хотя мне больше нравится вариант с переопределением конструктора...


 
jack128 ©   (2005-01-14 21:31) [11]

Ega23 ©   (14.01.05 15:11) [7]
constructor TFmSetupColumns.CreateForm(AOwner: TComponent; aGrig : TDBGrid);
begin
Create(AOwner);
DBGrid:=aGrid;
end;

только наоборот

DBGrid:=aGrid;
Create(AOwner);
иначе при OldCreateOrder = True в OnCreate можно AV получить.


 
Leon1   (2005-01-17 07:52) [12]

Да это я прогнал, сам создаю форму и присваиваю ей грид в момент создания, есесьно гид в момент создания nil а в момент присвоения форма уже создана.



Страницы: 1 вся ветка

Текущий архив: 2005.01.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
14-1105291367
maxz
2005-01-09 20:22
2005.01.30
КОСОТУР.нет!


3-1103707418
Guitar
2004-12-22 12:23
2005.01.30
Вход на сервер через клиента под разными логинами.


1-1105791544
Sicilla
2005-01-15 15:19
2005.01.30
Память


14-1105436087
WondeRu
2005-01-11 12:34
2005.01.30
Я Госы на 5 сдал!!!


3-1103790797
Russko
2004-12-23 11:33
2005.01.30
"Поломка базы данных"