Re[4]: Как открыть окно сразу в нескольких экземплярах?
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 21.03.08 13:17
Оценка: 6 (1)
Здравствуйте, wallaby, Вы писали:

W>Не понял. Что значит прийдет в экземпляр формы? ИМХО прийдет в обработчик OnClose, общий для всех экземпляров.


Экземпляр класса формы. Обработчик не ОБЩИЙ! Одинаковый — да, но не общий. Сделай и посмотри:
Procedure TForm2.OnClose(Sender:TObject);
begin
  if (Sender is TComponent) then  ShowMessage((Sender as TСomponent).Name);
end;
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re: Как открыть окно сразу в нескольких экземплярах?
От: wallaby  
Дата: 21.03.08 06:03
Оценка: 1 (1)
Здравствуйте, atomAltera, Вы писали:

A>Привет всем!

A>Как мне из form1 открыть несколько копий form2 но с разными настройками (width, top, image1.picture, button1.caption)???
A>И неплохо было бы, если после закрытия одной из форм (form2.close), память из под неё освобождалась...
A>Спасибо заранее!

Дык.

Form2_1:= TForm2.Create(Application);
Form2_2:= TForm2.Create(Application);

И настраивай каждую копию как нужно
---
The optimist proclaims that we live in the best of all possible worlds; and the pessimist fears this is true
Как открыть окно сразу в нескольких экземплярах?
От: atomAltera  
Дата: 21.03.08 04:23
Оценка:
Привет всем!
Как мне из form1 открыть несколько копий form2 но с разными настройками (width, top, image1.picture, button1.caption)???
И неплохо было бы, если после закрытия одной из форм (form2.close), память из под неё освобождалась...
Спасибо заранее!
Re: Как открыть окно сразу в нескольких экземплярах?
От: wallaby  
Дата: 21.03.08 08:49
Оценка:
Здравствуйте, atomAltera, Вы писали:

A>И неплохо было бы, если после закрытия одной из форм (form2.close), память из под неё освобождалась...


Не заметил второй вопрос — если нужно чтобы конкретный экземпляр формы самоуничтожался при закрытии формы юзером, нужно сделать примерно такой обработчик OnClose:

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Sender = Form2_1 then Action:= caFree;
end;
---
The optimist proclaims that we live in the best of all possible worlds; and the pessimist fears this is true
Re[2]: Как открыть окно сразу в нескольких экземплярах?
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 21.03.08 11:16
Оценка:
Здравствуйте, wallaby, Вы писали:

A>>И неплохо было бы, если после закрытия одной из форм (form2.close), память из под неё освобождалась...


W>Не заметил второй вопрос — если нужно чтобы конкретный экземпляр формы самоуничтожался при закрытии формы юзером, нужно сделать примерно такой обработчик OnClose:


W>
W>procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
W>begin
W>  if Sender = Form2_1 then Action:= caFree;
W>end;
W>


Нафига? OnClose и так придет в тот экземпляр формы, для которого определен. Просто Action:=csFree и фсе.
Если уж очень нужна проверка, то if (Sender=Self) then...

Кстати: вот я держу форму в отдельном модуле (MyForm2), а вызываю из главной формы (модуль MainForm). Чтобы сделать твою проверку мне надо:
1) сделать CrossRef в MyForm2 на MainForm
2) сделать Form2_1...Form2_NNNN переменными, доступными из MyForm2
3) озаботится, когда NNNN достигнет 1000, созданием отдельной структуры/класса для хранения и мониторинга

Дальше обьяснять?
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[3]: Как открыть окно сразу в нескольких экземплярах?
От: wallaby  
Дата: 21.03.08 11:42
Оценка:
Здравствуйте, DarkMaster, Вы писали:

DM>Нафига? OnClose и так придет в тот экземпляр формы, для которого определен. Просто Action:=csFree и фсе.


Не понял. Что значит прийдет в экземпляр формы? ИМХО прийдет в обработчик OnClose, общий для всех экземпляров. И по Sender там можно решить, что с каким экземпляром делать. Практической пользы от этого мало, но в принципе так.
---
The optimist proclaims that we live in the best of all possible worlds; and the pessimist fears this is true
Re[5]: Как открыть окно сразу в нескольких экземплярах?
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 21.03.08 13:18
Оценка:
Здравствуйте, DarkMaster, Вы писали:

W>>Не понял. Что значит прийдет в экземпляр формы? ИМХО прийдет в обработчик OnClose, общий для всех экземпляров.


DM>Экземпляр класса формы. Обработчик не ОБЩИЙ! Одинаковый — да, но не общий. Сделай и посмотри:

DM>
DM>Procedure TForm2.OnClose(Sender:TObject);
DM>begin
DM>  if (Sender is TComponent) then  ShowMessage((Sender as TСomponent).Name);
//  ПОПРАВКА, конечно же ShowMessage('From:'(Sender as TComponent).Name+' To:'+Self.Name);
DM>end;
DM>
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[5]: Как открыть окно сразу в нескольких экземплярах?
От: wallaby  
Дата: 21.03.08 13:25
Оценка:
Здравствуйте, DarkMaster, Вы писали:

DM>Обработчик не ОБЩИЙ!


Ну да, у каждого экземпляра свой. Переклинило. Короче с пятницей!
---
The optimist proclaims that we live in the best of all possible worlds; and the pessimist fears this is true
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.