Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как произвести обмен данными между MDI-окнами [D5, Paradox]


vita+ ©   (2003-08-11 12:04:00) 

Уважаемые мастера!

Как произвести обмен данными между дочерними окнами MDI. Слезно, очень нужно.


MMF   (2003-08-12 14:42:00) [1]

Если нужнен подбор (примерно как в 1С), то можно сделать так:
//МДИ форма, которую правит пользователь
Procedure TFormOwner.BtnSelectFIOClick(sender: TObject);
begin
if Not(Assigned(fFIODict)) then fFIODict:=TfFIODict.Create(application);
fFIODict.OwnerHandle:=Handle;
fFIODict.Show;
end;

Procedure TFormOwner.SX_USER_SELECT(var msg: TMessage); message SX_USER_SELECT;
begin
if msg.WParam=glcFIOdict then
EditFIO.Text:=globalStringData;

//форма подбора
Procedure TfFIODict.FormCreate(sender...);
begin
OwnerHandle:=nil;
DictionaryID:=glcFIOdict;

Procedure TfFIODict.GridDblClick(..);
begin
if OwnerHandle<>nil then
begin
globalStringData:=DS.FieldByName("FIO").AsString;
PostMessage(OwnerHandle, SX_USER_SELECT, DictionaryID, 0);
Close;


Vitalygavrilov   (2003-08-12 13:30:00) [2]

Ну а если мне надо вставить в Edit по типу календаря, нажал на кнопку и получил в Edit выбранную мною фамилию/

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


Danilka   (2003-08-12 08:00:00) [3]

Общие для нескольких форм датасеты эффективнее держать в одном модуле, вобщем-то для этого TDataModule и придумали.

Там-же и процедуры обмена данными между датасетами, и еще много чего.


Zacho   (2003-08-12 08:00:00) [4]

Не совсем понятно, в чем конкретно проблема. Причем здесь вообще окна ? Данные "находятся" не в окнах, а в компонентах-потомках TDataSet (TTable, TQuery и т.д.) Вот с ними и надо работать.
Предположим, что есть две формы: Tfm1 и Tfm1 (а MDI они или нет, нет никакой разницы) На формах есть компоненты TTable: на fm1 - tbl1, на fm2 - tbl2. По клику на кнопку на fm1 надо вставить текущую запись в из tbl1 в tbl2. Естественно, предпологается, что вторая форма создана и в переменной fm2 находиться указатель на нее. Тогда пишем примерно такой код:
procedure Tfm1.Button1Click(Sender:TObject);
begin
fm2.tbl2.Insert;
fm2.tbl2.Fields[0].Value:=tbl1.Fields[0].Value;
...
fm2.tbl2.Post;
end;


Danilka   (2003-08-12 07:56:00) [5]

Vitalygavrilov © (12.08.03 07:42)
Посмотри в сторону TDataModule.

"File" -> "New..." -> "Data Module" -> F1
:))


ЮЮ   (2003-08-12 07:53:00) [6]

А если открыто три окна?
А если структуры таблиц не совпадают?


Vitalygavrilov   (2003-08-12 07:42:00) [7]

Уважаемые Масстера!

Как сделать чтобы в моей программе между дочерними окнами в приложении MDI осуществить обмен данными между таблицами. Из одной таблицы одного дочернего окна направить (вставить) данные по ячеечно (принудительно, по моему клику) в другое дочернее окно и соответственно в другую таблицу, но не в материнскую форму.

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


Lamer_of_Delphi   (2003-08-11 16:23:00) [8]

unit unit2; //Код дочернего окна
...
procedure TChildForm.Button6Click(Sender: TObject);
begin
MainForm.Label1.Caption:=DataSource1.DataSet.Fields[1].Value;
...
end;
...
Imho :)


vita+   (2003-08-11 14:55:00) [9]

В талице перечислены фамилии, должность и их вставить в Label или Table другого окна.


Zacho   (2003-08-11 12:09:00) [10]

Какими данными ? Подробнее, плиз.


Наверх

Титульная страница Поиск, карта сайта Написать письмо