Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Вниз

Вернуть параметр из MDI-Child   Найти похожие ветки 

 
sCORpio80 ©   (2005-08-01 13:41) [0]

Помогите,plz. Не могу сообразмить как вернуть параметр из Mdi-дочернего окна.
1. Создаю Mdi-child.
2. Во время работы заполняю свойство в разделе public.
3. Здесь нужно вернуть параметр в вызывающую форму и уничтожить окно.

Немогу это сделать так как при закрытии Action:=caFree; дочернее окно просто уничтожается.
Пробовал так:
try
MdiChildForm:=TMdiChildForm.Create(Application);
Считываю параметр
finally
mdiChildForm.free;
end;
Но так создается и сразу убивается, а параметр остается пустой


 
TSa   (2005-08-01 13:44) [1]

создай функцию которая будет вызывать тебе твоё дочернее окно ав "строчке считываю" параметр приствой необзодимое значение резльтату функции.


 
sCORpio80 ©   (2005-08-01 13:51) [2]

не помогло


 
TSa   (2005-08-01 13:55) [3]

только функцию которая в класс не входит к твоей mdiChildForm


 
GLFox ©   (2005-08-01 14:01) [4]

Вообще я обычно делаю так:
- передаю классу дочернего окна в пропертю указатель из главного окна;
- засовываю по этому указателю данные при закрытии чайлда.
Все работает.


 
sCORpio80 ©   (2005-08-01 14:03) [5]

что значит в класс TMdiChildForm не входит, естественноона туда не вхрдит, я ее просто в модуле описал, все равно тоже самое


 
sCORpio80 ©   (2005-08-01 14:05) [6]

to GLFox: так нельзя т.к. дочернее окно может вызываться из разных форм
У меня был вариант вынести все такие переменные в отдельный модуль, наверно так и сделаю


 
GLFox ©   (2005-08-01 14:08) [7]

И что? Эти разные формы все одновременно используют это бедное дочернее окно?


 
sCORpio80 ©   (2005-08-01 14:14) [8]

могут и одновременно и таких дочерних окон разных много


 
TSa   (2005-08-01 14:16) [9]

поробуй сделать модальное окно !


 
GLFox ©   (2005-08-01 14:20) [10]

Если тебе нужно это значение и после закрытия этого чайлда, то пожалуй, тогда без глобальных описаний данных не обойтись.


 
sCORpio80 ©   (2005-08-01 14:21) [11]

в том то и фишка, что оно не должно модальным быть


 
sCORpio80 ©   (2005-08-01 14:25) [12]

да не получится с глобальным, экземпляры этой формы могут вызваны из разных окон, тогда мне нужно будет запомнить 2 параметра и т.д., поэтому свойство мне нужно хоть как ханить в дочернем окне, одна проблема с вызовом и возвращением результата


 
GLFox ©   (2005-08-01 14:30) [13]

>sCORpio80 ©   (01.08.05 14:25) [12]

Так значит, все таки, ЭКЗЕМПЛЯРЫ. Т.е. я так понимаю, твое многострадальное окно может иметь только одного предка. Тогда, в принципе, вариант с передачей по указателю вполне работоспособен.


 
TSa   (2005-08-01 14:31) [14]

пошаго пройди и  посмотри почему значения в функии не остаются и расскажи !!!


 
sCORpio80 ©   (2005-08-01 14:34) [15]

to GLFox:
Я так понял ты предлагаешь следующее:
frm:=tfrmChildForm.Create(frmMain);
главная форма владелец.
А как обратится к ней из дочернего окна?


 
sCORpio80 ©   (2005-08-01 14:37) [16]

to Tsa: они не остаются, потому что я в окне ничего не выбираю, просто создается и сразу уничтожается, на экране просто мигнуло окно и все, т.е. действий от меня никаких нет, получается что управление(фокус) не переходит в это окно


 
GLFox ©   (2005-08-01 14:40) [17]

>sCORpio80 ©   (01.08.05 14:34) [15]


TfrmMain = class(TForm)
...
public
 iSomeParam: Integer;
end;

...
 frm:=tfrmChildForm.Create(frmMain);
 frm.SomeParamPointer:=@iSomeParam;
// frm.SomeParamPointer должен быть описан в public чайлда
// хотя бы так:
// public
//   SomeParamPointer: PInteger;
// ...


А при OnClose чайлда пишем:

if SomeParamPointer<>nil then SomeParamPointer^:=0;


 
sCORpio80 ©   (2005-08-01 14:59) [18]

to GLFox:
Спасибо работает, но как бы сделать так чтобы возвращалось действие на следующей строке
т.е.
frm:=tfrmChildForm.Create(frmMain);
frm.SomeParamPointer:=@iSomeParam; - это выполнилось, а затем я хочу:
Caption:=IntToStr(iSomeParam); - уже не работает;


 
GLFox ©   (2005-08-01 15:06) [19]

Тогда надо сделать немножко иначе:

TfrmChildForm = class(TForm)
...
 procedure SetSomeParamPointer(Value: PInteger);
public
 property SomeParamPointer: PInteger write SetSomeParamPointer;
end;

...

procedure TfrmChildForm.SetSomeParamPointer(Value: PInteger);
begin
 Value^:=0;
end;

В данном случае значение iSomeParam установится сразу при присвоении адреса.



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

Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.074 c
14-1122792765
dr Tr0jan
2005-07-31 10:52
2005.08.21
Сегодня День ВМФ


14-1119676221
cyborg
2005-06-25 09:10
2005.08.21
Ламповый автомобильный CD-ресивер


4-1119592168
NikNet
2005-06-24 09:49
2005.08.21
Как старшее и младшое слово сделать DWORD? на DELPHI.


4-1119600206
officeman
2005-06-24 12:03
2005.08.21
Как скопировать приложение используемое ОС-ой, как его Удалить?


4-1120125721
TDionis
2005-06-30 14:02
2005.08.21
перехват mb_вторая_слева





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский