Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];
ВниззаNILить форму после Close; Найти похожие ветки
← →
ничтожная козявка (2008-08-21 12:37) [0]В некой 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.
← →
@!!ex © (2008-08-21 12:41) [1]
TForm1 = class
public
FormLinkPointer:^TForm1;
end;
....
Form1:TForm;
Form1:=TForm.Create();
Form1.FormLinkPointer:=@Form1;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FormLinkPointer^:=nil;
end;
← →
Ega23 © (2008-08-21 12:41) [2]Ну самого себя занилить у тебя не получится.
Форма модальная?
← →
ничтожная козявка (2008-08-21 12:52) [3]@!!ex
Ок, спасибо! Это работает. А нельзя ли Self для этих целецей использовать?
Ega23
Модальной ее делать нельзя, к сожалению.
← →
Leonid Troyanovsky © (2008-08-21 13:01) [4]
> ничтожная козявка (21.08.08 12:37)
> В некой dll есть функция, показывающая форму.
Это ошибка.
--
Regards, LVT.
← →
@!!ex © (2008-08-21 13:08) [5]> А нельзя ли Self для этих целецей использовать?
Нет.
← →
ничтожная козявка (2008-08-21 13:58) [6]Leonid Troyanovsky
> Это ошибка
как полагается реализовывать это?
← →
Сергей М. © (2008-08-21 14:00) [7]
> ничтожная козявка (21.08.08 13:58) [6]
А как она, форма, там завелась ?
Что ей не жилось спокойно в ехе ?
← →
Юрий Зотов © (2008-08-21 14:04) [8]> @!!ex © (21.08.08 12:41) [1]
Зачем такие извраты?
procedure TForm1.FormClose(...);
begin
Action := caFree;
end;
procedure TForm1.OnDestroy(...);
begin
Form1 := nil;
end;
И вся морковь.
← →
{RASkov} © (2008-08-21 14:08) [9]А зачем эта ссылка на форму вообще? убрать ее нафик...
И будет достаточно Action := caFree; а "единичность формы"(если именно ее преследует автор) можно будет сделать "такой же" глобальной переменной, только например Булевого типа.... и делов.
← →
ничтожная козявка (2008-08-21 14:10) [10]
> Сергей М. © (21.08.08 14:00) [7]
это что-то навроде плагина.. ТЗ так велит.
> @!!ex © (21.08.08 13:08) [5]
>
> > А нельзя ли Self для этих целецей использовать?
>
> Нет.
ога, я понял, потому что Self и Form1 это две большие разницы и заниливание одного из этих указателей ничего не даст.
← →
ничтожная козявка (2008-08-21 14:11) [11]
> Юрий Зотов © (21.08.08 14:04) [8]
я кстати постеснялся сначала так делать:)
← →
Сергей М. © (2008-08-21 14:17) [12]И в ТЗ прямо так и написано - пихать всю эту форменную беду не иначе как в DLL ?
← →
ничтожная козявка (2008-08-21 14:18) [13]
> Сергей М. © (21.08.08 14:17) [12]
дословно
← →
Сергей М. © (2008-08-21 14:23) [14]Ну что ж ... Дословно так дословно)
Но геморрой при этом грозит не тем кто лепил ТЗ, а тебе)
← →
ничтожная козявка (2008-08-21 14:26) [15]
> Сергей М. © (21.08.08 14:23) [14]
довольно уж тянуть кота за резину :)) советуйте как дОлжно быть, чем грозит, кто виноват и как наказать :))
← →
Ega23 © (2008-08-21 14:32) [16]
procedure TForm1.OnDestroy(...);
begin
Form1 := nil;
end;
Ага, а она у меня и вовсе не Form1, аvar
tmpfrm : TForm1
← →
Dennis I. Komarov © (2008-08-21 14:55) [17]> [16] Ega23 © (21.08.08 14:32)
procedure TForm1.OnDestroy(...);
не спасет?
begin
TForm1(Sender) := nil;
end;
← →
Leonid Troyanovsky © (2008-08-21 15:02) [18]
> ничтожная козявка (21.08.08 13:58) [6]
> как полагается реализовывать это?
http://www.podgoretsky.com/OtherParts/DM/BadTips.aspx
--
Regards, LVT.
← →
Leonid Troyanovsky © (2008-08-21 15:15) [19]
> Dennis I. Komarov © (21.08.08 14:55) [17]
> TForm1(Sender) := nil;
> не спасет?
Особенно трогательно выглядит TForm1().
И, во-ще, хватит извращений:
1. глобальные переменные - MD,
2. формы в длл - MD.
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2008-08-21 15:26) [20]
> Leonid Troyanovsky © (21.08.08 15:02) [18]
Это не отвечает на вопрос "Как наказать", а наказать надо примерно, с отрыванием.
← →
Anatoly Podgoretsky © (2008-08-21 15:28) [21]
> ничтожная козявка (21.08.08 12:37)
Что бы определить существует форма или нет, глобальных переменных для этого не надо, а надо использовать Screen.Forms
← →
@!!ex © (2008-08-21 15:48) [22]> [8] Юрий Зотов © (21.08.08 14:04)
Хотя бы затем, что "Класс "Пассажирский самолёт ТУ-154М" не должен ничего знать о пассажирском самолёте ТУ-154М с бортовым номером 34567 и базирующимся в Благовещенске."
(С)Ega23
http://delphimaster.net/view/15-1213366269/
пост номер 158.
← →
@!!ex © (2008-08-21 15:50) [23]> [11] ничтожная козявка (21.08.08 14:11)
Вот и не делай так никогда. ЮЗ скорее всего издевнулся... Вот уж он то из тех, кто знат что ТАК делать не стоит.
← →
Сергей М. © (2008-08-21 16:01) [24]
> ничтожная козявка (21.08.08 14:26) [15]
Кури BPL.
Выбора у тебя нет.
← →
Сергей М. © (2008-08-21 16:06) [25]
> кто виноват
Известно кто - говнюк-начальник)
> как наказать
О, это отдельная история)
Уж мы оттянемся по полной программе - дай-ка только сюда "виновного")
← →
Юрий Зотов © (2008-08-21 16:09) [26]> @!!ex © (21.08.08 15:48) [22]
1. Чему будет равно поле формы после ее уничтожения?
2. И вот летят они навстречу друг другу... и ничего друг о друге не знают...
Выводы:
1. Не нужно усложнять то, что можно сделать просто.
2. Даже правильные, в принципе, вещи (отсутствие глобальных перменных, неразмещение форм в DLL и пр.) не нужно превращать в абсолютные догмы. При грамотном использовании нет ничего страшного ни в глобальных переменных, ни в DLL с формами. А при неграмотном можно напортачить и без них.
← →
ничтожная козявка (2008-08-21 16:29) [27]
> Сергей М. © (21.08.08 16:01) [24]
> Кури BPL.
некий экзешник может выполнять одну и туже функцию по-разному, подключая каждый раз нужные длл. BPL позволит это делать? можно использовать BPL настолько же динамически как длл?
← →
Amoeba © (2008-08-21 16:33) [28]Да.
Можно.
BPL всего лишь разновидность DLL.
← →
ничтожная козявка (2008-08-21 16:37) [29]тогда в чем соль?
← →
Amoeba © (2008-08-21 16:39) [30]
> ничтожная козявка (21.08.08 16:37) [29]
>
> тогда в чем соль?
В отсутствии множества граблей.
← →
Vlad Oshin © (2008-08-21 16:45) [31]
> тогда в чем соль?
http://softwarer.ru/packages.html
← →
ничтожная козявка (2008-08-21 16:50) [32]
> Vlad Oshin © (21.08.08 16:45) [31]
спасибо, нашел уже
тут тоже пишут: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=274
← →
Vlad Oshin © (2008-08-21 16:56) [33]
> ничтожная козявка (21.08.08 16:50) [32]
Тоже читал. Собственно:
Вот это впечатляет:
С пакетами первый раз компилим и без пакетов второй раз
В DLL экспортируется следующая функция:
function GetObjectClass : TClass ;
begin
Result := TObject ;
end ;
В главном файле приложения результат функции сравнивается с ожидаемым:
var Result : AnsiString ;
begin
if GetObjectClass = TObject
then Result := "MainProject.TObject = DllProject.TObject"
else Result := "MainProject.TObject <> DllProject.TObject" ;
MessageBox ( 0, PChar ( Result ), PChar ( "Линковка" ), MB_OK ) ;
end.
← →
ЛшдлуттнСфе (2008-08-21 17:20) [34]не по существу, но я люблю глобальные переменные.
← →
Leonid Troyanovsky © (2008-08-21 17:55) [35]
> ЛшдлуттнСфе (21.08.08 17:20) [34]
> не по существу, но я люблю глобальные переменные.
А я - лесбиян, люблю девушек.
--
Regards, LVT.
← →
ЛшдлуттнСфе (2008-08-21 18:17) [36]
> Leonid Troyanovsky © (21.08.08 17:55) [35
а я не лесбиян, я просто люблю девушек...
← →
Сергей М. © (2008-08-21 18:38) [37]
> я не лесбиян, я просто люблю девушек
Девушкам-то "вкайф", а каковО тому, о ком идет "любовь" ?
Им-то, знаешь ли, кАково)
← →
Leonid Troyanovsky © (2008-08-21 20:03) [38]
> ЛшдлуттнСфе (21.08.08 18:17) [36]
Любвиобилен.
--
Regards, LVT.
← →
Германн © (2008-08-21 20:07) [39]
> Leonid Troyanovsky © (21.08.08 20:03) [38]
>
>
> > ЛшдлуттнСфе (21.08.08 18:17) [36]
>
> Любвиобилен.
>
Чего ещё можно ждать от кота?
:)
← →
@!!ex © (2008-08-21 20:52) [40]> 1. Чему будет равно поле формы после ее уничтожения?
Согласен, лучше обнулять на уничтодение, а не на закрытие.
> 1. Не нужно усложнять то, что можно сделать просто.
а нет там усложнения. А вот когда выяснится, что нужно две TForm1 будет СТОЛЬКО граблей...
Мы все таки с использованием ООП пишем, или только вид делаем?
Страницы: 1 2 3 4 5 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.008 c