Текущий архив: 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.48 MB
Время: 0.009 c