Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.12.19;
Скачать: CL | DM;

Вниз

Создание формы   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
15-1284369868
Дмитрий С
2010-09-13 13:24
2010.12.19
rad 2010 и 2007 будут жить на одном компе?


15-1283946635
12
2010-09-08 15:50
2010.12.19
Надоело писать программы. Может временно?


2-1285168987
Rembo2010
2010-09-22 19:23
2010.12.19
Как в Delphi сделать нестандартную форму?


15-1283874133
И. Павел
2010-09-07 19:42
2010.12.19
В честь чего такой гугл сегодня?


4-1242970329
kioki
2009-05-22 09:32
2010.12.19
Диалог выбора папки из скрытых ресурсов(c$,d$) на пк в сети