Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.04 c
1-1105830719
dnd
2005-01-16 02:11
2005.01.30
Как из DateTime вытащить число месяца?


4-1102589793
serg128
2004-12-09 13:56
2005.01.30
Как на WinAPI получить текущий день месяца?


11-1088094745
=Sniper=
2004-06-24 20:32
2005.01.30
метод Application - Undeclared identifier!!!!


3-1103603272
bers
2004-12-21 07:27
2005.01.30
Доброго времени суток, мастера! Тормоза при повторном выполнении


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский