Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2009, 13:20   #1
8alig8
Пользователь
 
Аватар для 8alig8
 
Регистрация: 03.06.2008
Сообщений: 11
Восклицание Передача параметров между MDI Child

Здравствуйте. Такая вот проблема у меня есть.
На главной форме (MDI Form) создан 1 MDI Child (TFormDocList).
В этом MDI Child я хочу создать еще один MDI Child (TFormPNakl) и передать ему параметры.

В экземпляре TFormPNakl пишу параметры, которые хочу заполнить при создании, естественно в разделе public.

Код:
unit PNaklUnit;
....
  public
    ifnew : Boolean;
    DocID : Integer;
    { Public declarations }
....
В TFormDocList пишу создание формы TFormPNakl с передачей параметров:

Код:
procedure TFormDocList.pmPNaklNewClick(Sender: TObject);
var
  PNakl : TFormPNakl;
  DocID : Integer;
begin
  PNakl := TFormPNakl.Create(Application);
  ...
  PNakl.ifnew := True;
  PNakl.DocID := DocID; //DocID имеет значение например 5
  ...
end;
Когда форма TFormPNakl создана, то оказывается, что параметры
ifnew и DocID не записались, они имеют значения соответственно
Код:
ifnew = False;
DocID = 0;
Что нужно сделать, чтобы правильно все работало?
8alig8 вне форума Ответить с цитированием
Старый 22.06.2009, 13:42   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
которые хочу заполнить при создании
Ну дык и заполяй в обработчике OnCreate той формы что создаешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2009, 14:37   #3
8alig8
Пользователь
 
Аватар для 8alig8
 
Регистрация: 03.06.2008
Сообщений: 11
По умолчанию

Уважаемый Stilet, вы скорее всего не поняли то, что мне нужно.
Создав экземпляр формы PNakl, мне нужно еще перед его открытием передать входные параметры PNakl.ifnew и PNakl.DocID, в качестве источника я использую данные формы TFormDocList, которая к слову тоже создана как экземпляр.
Код:
procedure TFormDocList.pmPNaklNewClick(Sender: TObject);
var
  PNakl : TFormPNakl;
  DocID : Integer;
begin
  PNakl := TFormPNakl.Create(Application);
  ...
  PNakl.ifnew := True;
  PNakl.DocID := DocID; //DocID имеет значение например 5
  ...
end;
Для заполнения параметров в OnCreate формы TFormPNakl нужно другая методика. Она я уверен сложнее.

Дело в том, что в приложении, где используется обычный AutoCreate Forms. Данный метод работал как часы. Например, вот так:

Код:
unit InfoDogParUnit; //Это форма куда передаются входные параметры
....
  public
    UserID : Integer;
    ifNew : Boolean;
    DocID : Integer;
    FirmName, ZName, CarName : string;
    FirmID, ZID, CarID : Integer;
    DocChange,DocReaport : Integer;
    OtherConditionID : Integer;
  end;
...
Код:
unit InfoDogListUnit; //это форма, которая открывает предыдущую
                            //с входными параметрами.
....
procedure TFormInfoDogList.btnReadClick(Sender: TObject);
begin
  FormInfoDogPar.DocID := pFIBDataSetZayavka.FieldValues['ID'];
  FormInfoDogPar.UserID := UserID;
  FormInfoDogPar.ifNew := False;
  FormInfoDogPar.Caption := 'Информ-договор';
  FormInfoDogPar.DocChange := DocChange;
  FormInfoDogPar.show;
end;
....
Данная методика в MDI работать не хочет ((
8alig8 вне форума Ответить с цитированием
Старый 22.06.2009, 15:08   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
вы скорее всего не поняли то, что мне нужно.
Неа. Видимо не понял. Тогда давай попробую понять.
Тебе нужно создавать форму в форме, так? И про создании этой второй ты хочешь проинициализировать некоторые свойства так?

Вот смотри:
Вот вторая форма - подчиненная:
Код:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public    q,w,e:integer;
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
 FormStyle:=fsMDIChild;
 q:=1;w:=2;e:=q*w;
end;

end.
В ней при создании инициализируются некоторые свойства

Вот главная форма, где я сознаю экземпляр подчиненной:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FormStyle:=fsMDIForm;
end;

procedure TForm1.Button1Click(Sender: TObject);
var f:TForm2;
begin
  f:=TForm2.Create(Form1);
  f.Parent:=self;
  f.Show;
  caption:=intToStr(f.e);
end;

end.
Как видишь обе формы MDI связаны.

А само создание формы автоматом я убрал из проекта:
Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);

  Application.Run;
end.
Если я прав кивни пяткой
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2009, 15:35   #5
8alig8
Пользователь
 
Аватар для 8alig8
 
Регистрация: 03.06.2008
Сообщений: 11
По умолчанию

пяткой кивнул, но не совсем. Инициализировать переменные мы должны не в TForm2. В TForm2 мы используем переменные со значениями, заданными в TForm1.
Покажу на данном примере:

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FormStyle:=fsMDIForm;
end;

procedure TForm1.Button1Click(Sender: TObject);
var f:TForm2;
begin
  f:=TForm2.Create(Form1);
  f.Parent:=self;
//вот это самое интересное место
  f.q := 1;
  f.w := 2;
  f.e := f.q*f.w;

  f.Show;
end;

end.
Теперь вторая форма:

Код:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public    q,w,e:integer;
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
 FormStyle:=fsMDIChild;
 Edit1.text := FloatToStr(e);
end;

end.
Т.е. задал грубо говоря входные параметры для TForm2.
8alig8 вне форума Ответить с цитированием
Старый 22.06.2009, 15:55   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Моя очередь пятками кивать
Предлагаю сделать эти свойства через Properties что позволит им взаимодействовать с твоими эдитами. Если я правильно понял - три зеленых свистка в воздух )

Главная форма:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FormStyle:=fsMDIForm;
end;

procedure TForm1.Button1Click(Sender: TObject);
var f:TForm2;
begin
  f:=TForm2.Create(Form1);
  f.Parent:=self;
  f.Show;
  f.q:=1;
  caption:=intToStr(f.q);
end;

end.
Подчиненная:
Код:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    Fq: integer;
    procedure Setq(const Value: integer);
    { Private declarations }
  public
   Property q:integer read Fq write Setq;
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
 FormStyle:=fsMDIChild;

end;

procedure TForm2.Setq(const Value: integer);
begin
  Fq := Value;
 Edit1.Text:=IntToStr(Value);
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2009, 16:00   #7
8alig8
Пользователь
 
Аватар для 8alig8
 
Регистрация: 03.06.2008
Сообщений: 11
По умолчанию

Вообщем, я полез в частности. Переформулирую вопрос. Как мне задать произвольные параметры в создаваему форму?

Уважаемы Stilet. Ваш совет мне помог.
Преогромнейшее спасибо. С ооп знакомится начал недавно и сам пока недодумался.
Очень класно что есть хорошие специалисты, такие как Вы. Еще раз спасибо

Последний раз редактировалось Stilet; 22.06.2009 в 16:38.
8alig8 вне форума Ответить с цитированием
Старый 22.06.2009, 16:39   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Ваш совет мне помог
Ну и славненько, ибо признаться я вопроса сразу недопонял. Впредь советую четче формулировать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача и параметров между страницами Killer_djon JavaScript, Ajax 3 04.02.2009 04:07
Передача параметров aesoem Общие вопросы Delphi 8 15.07.2008 21:51
Ошибка создания MDI Child формы VVVadim Общие вопросы Delphi 7 05.06.2008 19:25
MDI Child форма в единственном екземпляре VVVadim Общие вопросы Delphi 3 29.02.2008 18:18
Передача параметров Gudzon Общие вопросы Delphi 12 08.02.2007 08:19