Форум: "Начинающим";
Текущий архив: 2010.12.19;
Скачать: [xml.tar.bz2];
ВнизСоздание формы Найти похожие ветки
← →
faiwer © (2010-09-25 11:28) [0]Доброго времени суток. В моей программе, при редактировании или создании новой записи в БД, динамически создаются формы соответствующего типу записи класса. ~ таким образом:
procedure NewAExecute(Sender: TObject);
var
form: TForm;
begin
...
case a of
item_0: form:=TSome0F.NewRecord(..); // имена классов, разумеется
item_1: form:=TSome1F.NewRecord(..); // более адекватные, это для примера
end;
end;
...
TEditFormF = class(TForm);
...
public
constructor NewRecord(...);
...
end;
TSome0F = class(TEditFormF);
constructor TEditFormF.NewRecord(...);
begin
// MainF - главная форма, пробовал и от Application, не помогло
inherited Create(MainF);
...
end;
procedure TEditFormF.FormClose(Sender: TObject; var Action: TCloseAction);
begin
...
Destroy;
end;
И всё бы ничего, всё работает как часы, но созданные формы, даже будучи не активными отображаются поверх главного окна программы. Вот так: http://s57.radikal.ru/i155/1009/9b/2f1444faec5a.jpg
В своих прошлых проектах я не создавал формы "на лету", и они вели себя как нормальные окна, не затмевая главную форму, будучи не активными.
P.S. D2010, W7
← →
RWolf © (2010-09-25 12:49) [1]Возможно, при рисовании формы был установлен FormStyle = fsStayOnTop.
> procedure TEditFormF.FormClose(Sender: TObject; var Action: TCloseAction);
> begin ... Destroy;end;
Обычно это делается по-другому:procedure TEditFormF.FormClose(Sender: TObject; var Action: TCloseAction);
begin
...
Action := caFree;
end;
← →
faiwer © (2010-09-25 13:14) [2]
> Обычно это делается по-другому:
> procedure TEditFormF.FormClose(Sender: TObject; var Action:
> TCloseAction);
> begin
> ...
> Action := caFree;
> end;
Спасибо, не знал про такую возможность
> Возможно, при рисовании формы был установлен FormStyle =
> fsStayOnTop.
По умолчанию стоит fsNormal, в коде нигде это свойство не меняется, после загрузки так и остаётся fsNormal (только что проверил). Похоже дело не в этом. Самое обидное - фантазии не хватает, чтобы хотя бы нагуглить а эту тему, какой запрос написать )
← →
Плохиш © (2010-09-25 15:19) [3]
> Спасибо, не знал про такую возможность
Интересно, в какой дерьмокнижке рекомендуют выполнять Destroy в OnClose формы?
← →
faiwer © (2010-09-25 15:24) [4]Плохиш, Евгений Ваганович аплодирует стоя, но всё же, что по существу вопроса?)
← →
Плохиш © (2010-09-25 15:40) [5]
> faiwer © (25.09.10 15:24) [4]
>
> Плохиш, Евгений Ваганович аплодирует стоя, но всё же, что
> по существу вопроса?)
Надо убрать из программы подобный уже озвученному дерьмокод.
PS. У меня 99% форм создаётся "на лету" и они никогда себя как описано в [0] не ведут, т.ч. делаю вывод - проблемы надо искать в вашем коде.
← →
faiwer © (2010-09-25 15:58) [6]Специально для вас, о мудрый учитель, склепал новый проект, который состоит только из описанного выше говнокода (без сторонних не сертифицированных примесей). Весит всего 9 Кб, если вы соизволите его открыть и нажать F9 в 10-ой RAD-студии, то убедитесь что проблема присутствует
Сам файл - http://www.sendspace.com/file/g8rubs
← →
faiwer © (2010-09-25 17:37) [7]Нашёл решение здесь - http://www.programmersforum.ru/showthread.php?t=65809
Забавно, но там у человека получилась диаметрально-противоположная ситуация :) Не понимаю в чём дело. В общем сделал так, и помогло:
> TEditForm = class(TForm)
> ...
> protected
> procedure CreateParams(var Params: TCreateParams); override;
>
> ...
> end;
>
> procedure TEditFormF.CreateParams;
> begin
> inherited;
> Params.WndParent:=Application.Handle;
> end;
← →
Плохиш © (2010-09-25 17:57) [8]Выкинь в файле проекта строчку
Application.MainFormOnTaskbar := True;
и можно баг в ембаргадеро отправлять.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.12.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c