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

Вниз

Как произвести обмен данными между MDI-окнами   Найти похожие ветки 

 
Vitalygavrilov ©   (2003-08-26 08:27) [0]

Уважаемые мастера!
Я уже писал врпрос как сделать обмен данными, но Ваши ответы привязаны к Вашим программам и некоторые ответы мне просто не понятны. Если возможно то подскажите как правильно сделать. Я понимаю что привязка к МДИ не важна но всетаки как правильно!

С уважением Гаврилов В.А.


 
roottim   (2003-08-26 09:00) [1]

> Как произвести обмен данными между MDI-окнами
Какой вопрос, такой и (видимо был получен) ответ.

Честно скажу, даже желания нет отвечать на безтолковые вопросы.


 
Vitalygavrilov ©   (2003-08-26 09:04) [2]

Списобо.


 
Sergey13 ©   (2003-08-26 09:09) [3]

2Vitalygavrilov © (26.08.03 08:27)
>Я уже писал врпрос как сделать обмен данными,
И ты предлагаешь всем вспомнить этот вопрос? Задай снова с уточненной формулировкой и описанием задачи. Может кто и подскажет.


 
ЮЮ ©   (2003-08-26 09:17) [4]

Вызвать нужный метод нужного экземпляра класса, передав ему необходимые параметры, а он пусть уж разбирается (ему ближе к телу), что от него хотят


 
Zacho ©   (2003-08-26 09:17) [5]


> Vitalygavrilov © (26.08.03 09:04) [2]

Не обижайся. Просто твой вопрос действительно сформулирован крайне невразумительно. Формулируй вопросы точнее, конкретнее и тогда будешь получать нормальные, понятные ответы.
А по существу твоего вопроса могу сказать следущее:
Данные находяться не в окнах, а в наборах данных (TTable, TQuery). Так что и обмен надо делать между нужными наборами данных. Например, так:
procedure TForm1.Button1Click(Sender:TObject);
begin
Form2.Table2.Insert;
Form2.Table2.FieldByName("Field1").Value:=Table1.FieldByName("Field1") .Value;
...
Form2.Table2.Post;
end;

Если это не то, что тебе надо - напиши более конкретно чего же ты все-таки хочешь и что именно (и как именно) не получается.


 
asp ©   (2003-08-26 10:58) [6]

procedure TMyMDIForm.AddData(const DataSet: TDataSet);
var
i: Integer;
begin
Self.Query1.Append;
for i:= 0 to Self.Query1.FieldCount - 1 do
Self.Query1.Fields[i].Value:= DataSet.FieldByName(Self.Query1.Fields[i].FieldName).Value;
Self.Query1.Post
end;

procedure TMyMDIForm.SendData(const DestForm: TMyMDIForm);
begin
DestForm.AddData(Self.Query1)
end;

Ищи нужную MDI-форму и вызывай SendData.
Но конкретный ответ не получишь, по причине отсутствия конкретного вопроса.


 
Alek Aaz ©   (2003-08-26 11:03) [7]

Ну мне нужно что-то аналогичное.

Данные:
DataModule.Table1
Главная форма:
Form1.DBGrid1
в зависимости от значения поля DataModule.Table1.FieldByName("FizUr") нужно выбрать какую форму создавать для юридических или для физических. На этих формах валяются всякие DBEditы.
Хочу сделать так:
Создание формы:
Application.CreateForm(TForm3, Form3);
^^^^^^
Как нужно задавать это имя? Скажем для первой формы все прокатит, а для второй?

Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm3, Form3);
Если выполнить код то появятся 3 формы. Почему не ругается на имя? Ведь создаются 3 экземпляра одного класса но с ОДНИМ именем!
Непонимаю.
Где можно почитать про работу с MDI формами?

А передать данные так:
Form3.DataSource1:=DataModule.Table1.DataSource;

ИМХО. Чую работать не будет. :(

Так все-таки КАК!?!?!


 
asp ©   (2003-08-26 11:12) [8]

MDI-форм можешь создать сколько угодно. И с MainForm DBGrid лучше бы убрать...
Кстати, я обычно делаю:
procedure TMainForm.CreateDocumentForm(const DocID: Variant);
var
p: TDocumentForm;
begin
p:= TDocumentForm.Create(Application);
p.DocID:= DocID;
p.OpenData
end;

И имена классов здесь ни при чем. Ищи нужную форму через:
MainForm.MDIChildCount
MainForm.MDIChildren


 
NikB   (2003-08-26 11:16) [9]

> Vitalygavrilov ©

Ia delaiu tak:
1. V MDIChild, kotoroi doljen peredavat danni posilaiu Msg (Post) k MainForm.
2. MainForm proweriaet validnost MDIChild poluchatelia i esli est validen poluchatel (ani mogut bit bolshe odnovo) vipolniaet ego metod poluchenia danni.

Ia polzuiu eto v progu s neskolko raznih tipov MDIChild i obichno po tip MDIChild znaiu kuda otpravliat danni, no eto ne obiazatelno - samie danni mogut soderjat info o svoego poluchatelia, a MDIMain znaet vse.


 
NikB   (2003-08-26 11:19) [10]

>Alek Aaz
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm3, Form3);

eto ochen pohoje na:
a:=3;
a:=4;
a:=5;
pochemu hochesh rugatsa

>asp
a pochemu tolko MDIForm - eto dlia vseh objectov validno, esli s konteinerom net problem


 
asp ©   (2003-08-26 11:22) [11]

NikB (26.08.03 11:19) [10]> Я же не сказал, что только для MDIForm. Просто сейчас речь идет именно о них.


 
Alek Aaz ©   (2003-08-26 11:57) [12]

2NikB
>pochemu hochesh rugatsa
:) да не хочу я ругаться. Если то что ты сказал правда(а это очень похоже на правду) то непонятно как тогда добратся до 3.
Буду делать как asp сказал.


 
Slayer   (2003-08-26 11:57) [13]

Как я понял!!!
Создай некий список (TList например). Где будут храниться указатели на твои МДИ формы. Так же создай класс от TForm и наследуй МДИ формы от него и в этом классе опиши интерфейс который тебе нужен для обмена. И все будет нормально


 
asp ©   (2003-08-26 12:08) [14]

Slayer (26.08.03 11:57) [13] > Он (список) уже есть!


 
Vitalygavrilov ©   (2003-08-26 12:17) [15]

Я попробывал как сказали, но у меня другая проблема.
Как только я из Form4.Table1(Face.db) вставил данные в MDIChild.Edit1, то после вставки из Form5.Table1(Face.db) вставил в MDIChild.Edit2 у меня пропадает данные из MDIChild.Edit1. Как быть ума не приложу.


 
Kit   (2003-08-26 12:18) [16]

Думается что список создавать не нужно, для этого есть Application.MainForm.MDIChildren.
А интерфейс может быть, например, таким:
Наследников от TForm не создаем, а описываем сообщение MY_MESSAGE=WM_USER+... Передаваемые данные складываем в свою структуру (объект, массив...) и указатель на нее передаем в SendMessage. Остается только написать в получателе обработчик:

procedure My_MessageHandler(var Msg: TMessage); message MY_MESSAGE;

и в нем выцепить данные по указателю. imho красивее приведения Application.MainForm.MDIChildren[i] к своему типу и вызова интерфейсного метода.



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

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

Наверх




Память: 0.51 MB
Время: 0.021 c
14-48684
AndreySoft
2003-08-28 13:06
2003.09.15
Как зашифровать текст и поместить его в файл


4-48832
Still Swamp
2003-07-16 11:18
2003.09.15
Как установить мышиный курсор?


3-48475
lesalesa
2003-08-22 17:31
2003.09.15
Перерисовка scrollbar в dbGrid?


9-48387
com2003
2003-03-15 02:13
2003.09.15
Вывод графики


14-48765
Esu
2003-07-29 18:07
2003.09.15
---|Ветка была без названия|---