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

Вниз

Дано Х {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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
1-72396
MV-GROB
2003-01-13 12:10
2003.01.23
Не хочет работать COM DLL


1-72332
pet
2003-01-11 20:55
2003.01.23
Срочно.Горячие клавиши


1-72292
fifo
2003-01-15 12:57
2003.01.23
VarArrayCreate c типом Record


1-72379
Sectey
2003-01-13 10:36
2003.01.23
В Паскале ParamStr, а в Си?


3-72063
Alek Aaz
2003-01-05 06:24
2003.01.23
Запись/чтение BLOB полей





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