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

Вниз

Свойства формы   Найти похожие ветки 

 
Sedunov Vitaly   (2002-09-18 11:39) [0]

Добрый день! У меня следующая проблема. Вызываемая форма(Форма1) может вызываться из разных форм(Форма2,Форма3,Форма4). В зависимости от того, из какой формы вызывалась Форма1, нужно вернуть параметры в Форма2 или Форма3 или Форма4. В Форма1 я передаю имя формы, откуда была вызвана форма, т.е. "Form2" или "Form3" или "Form4". Почему-то не работает следующая конструкция: TForm2(FindComponent("Form2")).retparam:=..., то же самое и TForm(FindComponent("Form2")).retparam:=... Но срабатывает Form2.retparam:=... Меня это не устраивает, т.к. экземпляров формы Форма2(Form2) может быть много. Простите за долгое объяснение. Буду рад вашей помощи.

С уважением.


 
qube   (2002-09-18 11:46) [1]



Если экземпляров формы может быть много, то никакой поиск по имени не поможет. Эту форму надо убрать из auto-create, создавать динамически, и тогда все заработает.


 
AlexT1000   (2002-09-18 11:49) [2]

а зачем ты передаешь имя формы ? передавай просто форму.

procedure PutForm( Sender : TForm);
begin
Sender.FindComponent(..........
end;


PutForm(TForm(Form2));
PutForm(TForm(Form3));



 
AlexT1000   (2002-09-18 11:50) [3]

procedure PutForm(Var Sender : TForm);

так вроде точнее


 
Sedunov Vitaly   (2002-09-18 11:57) [4]

Все формы создаются динамически. AutoCreate тут ни при чем. Сейчас попробую передавать форму. Спасибо!


 
Старый Паскалист   (2002-09-18 12:10) [5]

Можно сделать так:

function TForm1.Execute(Caller: TForm; var retparam: TSomeType; {...}): Boolean;
begin
// Инициализация
Result := (ShowModal = mrOk);
if Result then
begin
// Ознакомление заинтересованных лиц с результатами

// Неудобно работать с формами, не имеющими общего предка, напрямую
// if Caller is TForm2 then (Caller as TForm2).retparam := ???;
// else if Caller is TForm3 then (Caller as TForm3).retparam := ???;

retparam := Что-нибудь;


// Есть и другие способы уведомления:
// Можно, напр, объявить пользовательское сообщение
// SendMessage(Caller.Handle, WM_MYRESULT, retparam, 0);
// - Это вариант для асинхронного режима, когда форма показыаается немодально

// Или просто сделать св-во Form1.SomeWorkResult: TSomeType;
// А вызывающие формы уже сами будут его читать при необходимости

// Можно через RTTI - но слишком увлекаться RTTI тоже не стоит
end;
end;

...

procedure TForm2.CallForm1;
begin
with TForm1.Create(nil) do
begin
try
if Execute(Self, retparam) then ...;
finally
Free;
end;
end;
end;


 
qube   (2002-09-18 12:31) [6]

Что-то вы замутили сверхсложное. А функцией нельзя возвращать значение, что ли?


 
Старый Паскалист   (2002-09-18 12:54) [7]

2qube ©

Да какие проблемы. Можно и результатом ф-и.
Всё можно сделать десятью тысячами различных способов,
и я постарался перечислил лишь некоторые варианты.

(возвращение через var мало отличается от результата ф-и,
а в качестве результата ф-и для модального случая
я привык возвращать подтверждение/отказ).



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

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

Наверх





Память: 0.46 MB
Время: 0.008 c
3-97943
DenisLK
2002-09-06 13:26
2002.09.30
Помогите правильно построить запрос


1-98070
velk
2002-09-19 12:47
2002.09.30
Подскажите как вызвать стандартное окно Dial-Up?


14-98352
koks
2002-09-05 17:56
2002.09.30
кто юзает ExpressBars 4...


1-98099
Serg455
2002-09-19 01:32
2002.09.30
MessageBox


1-98109
r0land
2002-09-19 02:39
2002.09.30
Показывать форму повер других форм





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