Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизНастройка 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c