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

Вниз

Дано Х {3} кнопок при нажатию на любую из них выдается окно и тол   Найти похожие ветки 

 
СОС   (2003-01-14 05:34) [0]

ько одно! Т.е. при нажатии на первой кнопке вывелось окно с заголовком 1. Если я его не закрыл то повторное нажатие на первой кнопке сделает активным мне это окно а не создаст новое. Новое создается только в том случае если окно не создано. СОздаваться окно должно динамически, сворачиваться на панель задачь. Сам вроде все заделал но есть загвоздка не знаю как отследить в массиве кнопок что форма была закрыта?


 
Думкин   (2003-01-14 05:50) [1]

Когда окно закрывается - можно уведомить об этом кнопки, но ты еще подумай.


 
СОС   (2003-01-14 06:12) [2]

Я заводил массив это из основной формы
type
....
TFields=record
Fr :TfSendFile; //это как раз указатель на экземпляр новых форм ТАМ уже описано caFree на ОнКлозе
end;

var
Form1: TForm1;
FFF:array[0..2] of TFields; //это массив куда я пихаю вот таким методом...
...

procedure TForm1.ButtonClick(Sender: TObject);
var
i:byte;
begin
i:=(Sender as TButton).Tag;
with fff[i] do begin
if (not Assigned(Fr)) then begin
fr:=TfSendFile.Create(nil);
end;
try
Fr.Show;
except
Application.MessageBox(PChar("пРОБЛЕМА :("), "


 
Alx2 ©   (2003-01-14 07:47) [3]

>СОС (14.01.03 06:12)
Сначала заполни массив нулями.
Потом просто show (если форма закрыта, но не уничтожена).
Если же форму все-таки уничтожаешь, то из события OnDestroy уничтожаемой формы обнуляй соотв. элемент массива (найти его можно, например, так:

for k := 0 to 2 do
if fff[k]=Self then
begin
fff[k] := Nil;
break;
end;
)

Либо из того же события информируй главную форму о том, что "караул, убивают". А главная форма обнулит соотв. элемент массива. Глагол "информируй" можно реализовать с помощью посылки сообщения. Например:
Application.MainForm.Perform(wm_user,<Некоторое уникальное значение>,Integer(Self)) - в событии OnDestroy убиенной формы

В главной же форме реализуй метод
procedure CleanArrayItem(Var MSG : TMessage); message wm_user;

procedure TForm1.CleanArrayItem(var MSG: TMessage);
Var k : integer;
begin
if Msg.WParam = <Некоторое уникальное значение>
then
for k := 0 to 2 do
if Integer(fff[k])=MSG.LParam then
begin
fff[k] := Nil;
break;
end;

end;

Некоторое преимущество последнего: массив fff можно хранить внутри класса главной формы, что более соответствует парадигме ООП.


 
СОС   (2003-01-14 14:55) [4]

Спасибо! Примерно об этом думал.
Сейчас реализовал все вот так - {еще требовалось передать несколько параметров форме} - заоплнил в форме мои параметры + передал @соего элемента в массиве на ОнДестрое - его делаю 0.
Все заработало.
ЗЫ. Конечно надо было полностью освобождать форму после закрытия.
Почему спрашивал - интересно было наиболее оптимальное правильное решение в основном из-за ресурсов винды.
Еще раз спасибо!



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

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

Наверх




Память: 0.47 MB
Время: 0.015 c
3-72131
Dimedrol
2002-12-27 15:15
2003.01.23
Jpeg в DBGrid-e


14-72540
Poirot
2003-01-03 08:57
2003.01.23
Киньте примеры к книгеDirectX. Графика в проектах Delphi.


7-72576
CatC
2002-11-11 17:08
2003.01.23
Память WinXP


3-72058
Picco
2003-01-05 13:09
2003.01.23
форматы Access 97,2000,2002


3-72065
Ich Hasse
2003-01-05 21:06
2003.01.23
Access