![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
заNILить форму после Close;
ничтожная козявка © (2008-08-21 12:37:00)
Страницы: < 1 2 3 4 5 6 7 8 9 10 >
В некой dll есть функция, показывающая форму. Перед созданием формы, она проверяет ее на NIL:
if not Assigned(Form1) then Form1 := TForm1.Create(AOwner);
также требуется, что бы после закрытия (Close) форма была уничтожена:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
...
Action := caFree;
...
end;
ВОПРОС: как сделать так, чтоб она была не только уничтожена, но и переменная Form1 приняла значение NIL. Т.к. поскольку эта переменная не NIL, при повторной попытке создать форму, ее конструктор
if not Assigned(Form1) then Form1 := TForm1.Create(AOwner);
не вызывается, и в последствии сыпятся AV.
ничтожная козявка (2008-08-21 16:37:00) [161]тогда в чем соль?
Amoeba (2008-08-21 16:33:00) [162]Да.
Можно.
BPL всего лишь разновидность DLL.
ничтожная козявка (2008-08-21 16:29:00) [163]
> Сергей М. © (21.08.08 16:01) [24]
> Кури BPL.
некий экзешник может выполнять одну и туже функцию по-разному, подключая каждый раз нужные длл. BPL позволит это делать? можно использовать BPL настолько же динамически как длл?
Юрий Зотов (2008-08-21 16:09:00) [164]> @!!ex © (21.08.08 15:48) [22]
1. Чему будет равно поле формы после ее уничтожения?
2. И вот летят они навстречу друг другу... и ничего друг о друге не знают...
Выводы:
1. Не нужно усложнять то, что можно сделать просто.
2. Даже правильные, в принципе, вещи (отсутствие глобальных перменных, неразмещение форм в DLL и пр.) не нужно превращать в абсолютные догмы. При грамотном использовании нет ничего страшного ни в глобальных переменных, ни в DLL с формами. А при неграмотном можно напортачить и без них.
Сергей М. (2008-08-21 16:06:00) [165]
> кто виноват
Известно кто - говнюк-начальник)
> как наказать
О, это отдельная история)
Уж мы оттянемся по полной программе - дай-ка только сюда "виновного")
Сергей М. (2008-08-21 16:01:00) [166]
> ничтожная козявка (21.08.08 14:26) [15]
Кури BPL.
Выбора у тебя нет.
@!!ex (2008-08-21 15:50:00) [167]> [11] ничтожная козявка (21.08.08 14:11)
Вот и не делай так никогда. ЮЗ скорее всего издевнулся... Вот уж он то из тех, кто знат что ТАК делать не стоит.
@!!ex (2008-08-21 15:48:00) [168]> [8] Юрий Зотов © (21.08.08 14:04)
Хотя бы затем, что "Класс "Пассажирский самолёт ТУ-154М" не должен ничего знать о пассажирском самолёте ТУ-154М с бортовым номером 34567 и базирующимся в Благовещенске."
(С)Ega23
http://www.delphimaster.ru/cgi-bin/forum.pl?n=3&id=1213366269&p=2
пост номер 158.
Anatoly Podgoretsky (2008-08-21 15:28:00) [169]
> ничтожная козявка (21.08.08 12:37)
Что бы определить существует форма или нет, глобальных переменных для этого не надо, а надо использовать Screen.Forms
Anatoly Podgoretsky (2008-08-21 15:26:00) [170]
> Leonid Troyanovsky © (21.08.08 15:02) [18]
Это не отвечает на вопрос "Как наказать", а наказать надо примерно, с отрыванием.
Leonid Troyanovsky (2008-08-21 15:15:00) [171]
> Dennis I. Komarov © (21.08.08 14:55) [17]
> TForm1(Sender) := nil;
> не спасет?
Особенно трогательно выглядит TForm1().
И, во-ще, хватит извращений:
1. глобальные переменные - MD,
2. формы в длл - MD.
--
Regards, LVT.
Leonid Troyanovsky (2008-08-21 15:02:00) [172]
> ничтожная козявка (21.08.08 13:58) [6]
> как полагается реализовывать это?
http://www.podgoretsky.com/OtherParts/DM/BadTips.aspx
--
Regards, LVT.
Dennis I. Komarov (2008-08-21 14:55:00) [173]> [16] Ega23 © (21.08.08 14:32)
procedure TForm1.OnDestroy(...);не спасет?
begin
TForm1(Sender) := nil;
end;
Ega23 (2008-08-21 14:32:00) [174]
procedure TForm1.OnDestroy(...);
begin
Form1 := nil;
end;
Ага, а она у меня и вовсе не Form1, а
var
tmpfrm : TForm1
ничтожная козявка (2008-08-21 14:26:00) [175]
> Сергей М. © (21.08.08 14:23) [14]
довольно уж тянуть кота за резину :)) советуйте как дОлжно быть, чем грозит, кто виноват и как наказать :))
Сергей М. (2008-08-21 14:23:00) [176]Ну что ж ... Дословно так дословно)
Но геморрой при этом грозит не тем кто лепил ТЗ, а тебе)
ничтожная козявка (2008-08-21 14:18:00) [177]
> Сергей М. © (21.08.08 14:17) [12]
дословно
Сергей М. (2008-08-21 14:17:00) [178]И в ТЗ прямо так и написано - пихать всю эту форменную беду не иначе как в DLL ?
ничтожная козявка (2008-08-21 14:11:00) [179]
> Юрий Зотов © (21.08.08 14:04) [8]
я кстати постеснялся сначала так делать:)
ничтожная козявка (2008-08-21 14:10:00) [180]
> Сергей М. © (21.08.08 14:00) [7]
это что-то навроде плагина.. ТЗ так велит.
> @!!ex © (21.08.08 13:08) [5]
>
> > А нельзя ли Self для этих целецей использовать?
>
> Нет.
ога, я понял, потому что Self и Form1 это две большие разницы и заниливание одного из этих указателей ничего не даст.