Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.29;
Скачать: CL | DM;

Вниз

Когда много форм   Найти похожие ветки 

 
For   (2004-02-15 21:27) [0]

Вопрос: допустим у меня есть событие, при котором создается экземпляр формы.

Form2:=TForm2.Create(self);
Form2.Show;


Допустим я создал Form2 10 раз, тоесть имею 10 одинаковых форм. Как мне отправить пользовательское сообщение всем этим формам? Вариант с массивом Screen не подходит, т.к. там "запоминается" только последняя форма... Заранее благодарен.


 
Islander   (2004-02-15 21:54) [1]

создать массив из форм, а потом в цикле послать сообщение каждой.


 
Soft ©   (2004-02-15 22:46) [2]

создание массива
{....}

var Form2Mass:array of TForm2;
var Formcounter:integer;

инициализация форм
{....}

inc(Formcounter);
Setlength(Form2Mass,Formcounter);
Form2Mass[Formcounter-1].Create(self);
Form2Mass[Formcounter-1].Show;

посылка сообщений
{....}

Form2Mass[XXX].Close;


 
Юрий Зотов ©   (2004-02-15 22:47) [3]

> For (15.02.04 21:27)
> Вариант с массивом Screen не подходит, т.к. там "запоминается"
> только последняя форма...

Какой же тогда это будет массив, если в нем запоминается только одна форма? Может, все-таки не одна?


 
For   (2004-02-15 22:57) [4]


> Юрий Зотов

Так в том то и дело.... Когда создаешь новый экземпляр формы, хендл предедущего удаляеться из масива... Или я что-то не так понял....
> Soft

Спасибо....


 
Юрий Зотов ©   (2004-02-15 23:05) [5]

> For (15.02.04 22:57) [4]

> Или я что-то не так понял.

Именно. Поэтому массив Screen.Forms собираетесь продублировать еще и своим массивом. Зачем?


 
Defunct ©   (2004-02-16 02:51) [6]

> Как мне отправить пользовательское сообщение всем этим формам?

SendMessage(HWND_BROADCAST, MyMsgId, MyParam1, MyParam2);

MyMsgId - какой-нибудь номер, из серии WM_USER + подальше от зарезервированных сообщений.


 
For   (2004-02-16 08:17) [7]


> Defunct

Как отправить само сообщение я заню... :) Меня интересует, как послать сообщение нескольким экземпларам формы...

> Юрий Зотов

Дело в том, что я пробывал делать через screen, но сообщение получала только последняя созданая форма... Делал следующее:
var i:integerl;
begin
for f := 0 to Screen.FormCount - 1 do
Screen.Forms[f].Perform(UM_MyMessage, 42, 42);


 
For   (2004-02-16 08:49) [8]

Что-то я в растеряности.... Попробывал еще поработать с массивом screen и циклом... Все работате... Только я проверилял, не посылая сообщения, а изменял Caption форм... Народ, все, тема закрыта, это что-то я прогнал... :(


 
For   (2004-02-16 08:51) [9]

Нет!, подождите...! Может что-то в
Screen.Forms[f]. Perform(UM_MyMessage, 42, 42); ?
Как можно еще отправить сообщение определенной форме?


 
Hooch ©   (2004-02-16 08:52) [10]

SendMessage(Screen.Forms[f].handle, .....)


 
KSergey ©   (2004-02-16 08:58) [11]

Ну раз уж начали коллекционирование, по сообщение послать можно еще через PostMessage


 
Defunct ©   (2004-02-16 20:19) [12]

> Как отправить само сообщение я заню... :)
Это сомнительно...

> Меня интересует, как послать сообщение нескольким экземпларам формы...

Еще раз повторюсь:
Ключ HWND_BROADCAST - посылка сообщения всем окнам.
все формы получат такое сообщение.


 
Defunct ©   (2004-02-16 20:26) [13]

Да, только формы прийдется создавать не так как у Вас, а так:
Form2:=TForm2.Create( Nil);
Form2.Show;



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

Текущий архив: 2004.02.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
14-94188
default
2004-02-06 15:49
2004.02.29
Задачка


3-93765
Fom
2004-02-04 10:30
2004.02.29
Как правильно обработать onValidate?


4-94241
volser
2003-12-21 18:34
2004.02.29
Эмуляция нажатия клавиши


8-94043
Balda
2003-10-29 10:53
2004.02.29
Синтезация речи.


3-93811
Russko
2004-02-03 13:40
2004.02.29
БД на SQL