Jun 15

Создание модальной формы

Интересно, что сами модальные формы гораздо чаще более выгодно (если брать к вниманию использования памяти) создавать временно, и после того, как форма уже была вызвана, отработана и в итоге закрыта,
- стирать полностью ее из памяти... Если же удаление игнорировать, Delphi-приложение вполне стать может
"тяжеловесом памяти”.

К примеру, таков бывает вызов данной
формы:

ModalForm := TModalForm.Create(Self);
try
ModalForm.ShowModal;
finally
ModalForm.Free;
end;

Как вы можете увидеть, исходя из кода показанного выше, данный код хотьи является небольшим по собственному размеру, но с легкостью удовлетворяет он все необходимые запросы программиста именно в этом конкретном вопросе. Поэтому мы и привели его здесь (в этой статье!).

Удачного кода и успешного программирования дорогие "дельфийцы"!

Спонсор поста: желаете узнать больше о l2, la2 и mmorpg, а также попробовать создать lineage 2? Посетите портал посвященный игровым разработкам - l2lol.ru, где вы сможете почепнуть интересующую вас информацию и узнать много нового о современном игровом мире!


  1. Борис
     Add karma Subtract karma  +4
    Цитировать.

    Спасибо, мистер очевидность.

    1
  2. sw
     Add karma Subtract karma  +2
    Цитировать.

    +1
    ну и ещё можно даже так делать (чтобы не заводить отдельную переменную):
    with TModalForm.Create(Self) do
    try
    ShowModal;
    finally
    Free;
    end;

    Но главное, на мой взгляд, это делать именно Free (в таком контексте), а не Release, как делают некоторые программисты… В Help’е можно почитать, что метод Release формы действительно может оказаться полезным (особенно в тех случаях, когда форма уничтожает сама себя), но если разобраться, как работает этот механизм…

    2
  3. waik
     Add karma Subtract karma  +1
    Цитировать.

    Что-то не пойму в чем тут “ноухау”? Создал-убил. Как в букваре написано. А вот огульное использование модальных форм я бы не советовал. Все таки обычно они для выполнения какой-то функции вызываются , а потом проверяется результат действий пользователя
    if ModalForm.ShowModal=mrOk then
    begin
    …..
    end
    else
    begin
    …..
    end;

    3
  4. юрий
     Add karma Subtract karma  +1
    Цитировать.

    Вообще то, Пачеко рекомендовал так. И это работает без проблем.

    ModalForm := TModalForm.Create(Self);
    try
    ModalForm.ShowModal;
    finally
    ModalForm.Release;
    ModalForm:=nil;
    end;

    4
  5. Stalker
     Add karma Subtract karma  +1
    Цитировать.

    Лучше ИМНО так:

    ModalForm := TModalForm.Create(Self);
    try
    ModalForm.ShowModal;
    finally
    FreeAndNil(ModalForm);
    end;

    5
  6. exayler
     Add karma Subtract karma  +1
    Цитировать.

    Можно не вызывать ModalForm.Free после закрытия формы, но тогда в событии OnClose формы надо сделать:
    procedure TModalForm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    Action := caFree;
    end;

    6
  7. Bolvan
     Add karma Subtract karma  +1
    Цитировать.

    Методы Пачеко мне никогда не внушали доверия, хотя приведенный в коменте више вариант и имеет право на жизнь

    7
  8. Eugene
     Add karma Subtract karma  +2
    Цитировать.

    Да это прямо таки новое слово в программировании на Дельфи! :-D :-D:-D

    8

Поделитесь вашими мыслями

Поддерживаемые теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>