Главная страница
    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.03 c
3-1121279740
Michael5
2005-07-13 22:35
2005.08.21
Как удалять строки из DBGrid кнопкой Delete?


1-1123066555
Гость22
2005-08-03 14:55
2005.08.21
Как слелать текст на форме мигающим?


14-1122850334
Pavel__
2005-08-01 02:52
2005.08.21
try...except и try...finally


1-1123134256
TerminalHead
2005-08-04 09:44
2005.08.21
Горячие клавишы


6-1115489058
Ландграф Павел
2005-05-07 22:04
2005.08.21
получить статистику текущего соединения с интернет





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