Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1284040424
Zenith
2010-09-09 17:53
2010.12.19
Уроки от ЮЗа


2-1285069581
guest
2010-09-21 15:46
2010.12.19
Почему не работает?


10-1171452696
ajlekceu
2007-02-14 14:31
2010.12.19
Можно ли узнать кто до меня открыл файл в Excel?


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


15-1284008288
Miko
2010-09-09 08:58
2010.12.19
задержка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский