![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Настройка DbGrid [D7]
Leon1 © (2005-01-14 14:24:00)Вот тут рылся рылся что то ничего не нашел, вопрос наверное банален до ужаса, суть проблемы такова
имеем форму с TDBGrid, Хотим: создать диалоговое окно для настройки данного TDBGrid пользователем, вопрос, как передать этот самый TDBGrid в форму настроек, поставить в uses у формы с настройками на форму с TDBGrid не имеет смысла, ибо должна функция унивесальна быть.... писать для каждый формы с TDBGrid обработчик отдельный обработчик настроек.... бррррр....
Leon1 (2005-01-17 07:52:00) [1]Да это я прогнал, сам создаю форму и присваиваю ей грид в момент создания, есесьно гид в момент создания nil а в момент присвоения форма уже создана.
jack128 (2005-01-14 21:31:00) [2]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 получить.
Ega23 (2005-01-14 15:21:00) [3]Хотя мне больше нравится вариант с переопределением конструктора...
Leon1 (2005-01-14 15:20:00) [4]О есть
Ega23 (2005-01-14 15:12:00) [5]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 ПОСЛЕ цикла вставь.
Ega23 (2005-01-14 15:11:00) [6]Ну тут есть несколько вариантов.
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
Leon1 (2005-01-14 15:08:00) [7]Блин ну таже самая ерунда:
Вот вызвываю окно
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 пуст как лист бумаги.... что то я помоему не то делаю... :-(
Leon1 (2005-01-14 14:50:00) [8]Ай... я.... вот я балдень млин... а как же его передать то правильнее...
Ega23 (2005-01-14 14:44:00) [9]Естественно. Потому, что на момент создания TFmSetupColumns твой DBGrid ещё не определён.
Leon1 (2005-01-14 14:41:00) [10]Да пробовал ни фига может конечно косяк во мне вот код вызова из формы с 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.
begin...end (2005-01-14 14:40:00) [11]А ещё, вероятно, можно использовать свойство Tag формы настроек.
begin...end (2005-01-14 14:34:00) [12]> Leon1 (14.01.05 14:24)
Можно в форму настроек добавить метод, в котором в качестве одного из параметров будет параметр типа TDBGrid.
Например:
procedure TOptionsForm.AdvShow(Grid: TDBGrid);
begin
// здесь можно какому-нибудь полю в классе
// этой формы присвоить значение переданного
// параметра, чтобы потом с ним работать
Show
end.
И потом показывать форму настроек с помощью этого метода.