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

Вниз

События OnCreate, OnShow, OnActivate для формы   Найти похожие ветки 

 
MsGuns ©   (2002-11-04 19:17) [0]

Есть такой проект:

program ValBnk;

uses
Forms,
MainU in "MainU.pas" {MainForm},
DMVlBank in "..\DataMod\DMVlBank.pas" {dmBank: TDataModule},
SprsStat in "SprsStat.pas",
SprBxSch in "SprBxSch.pas" {frmSprSch},
GetPer in "GetPer.pas" {frmGetPeriod},
Setting in "Setting.pas" {frmComSet};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TdmBank, dmBank);
Application.CreateForm(TfrmSprSch, frmSprSch);
Application.CreateForm(TfrmGetPeriod, frmGetPeriod);
Application.CreateForm(TfrmComSet, frmComSet);
Application.Run;
end.


В событии MainForm.OnActivate происходит обращение к процедуре, определенной в модуле frmComSet для считывания стартовых опций из ini-файла. В этой процедуре происходит такая вещь:

procedure ReadComParams;
var
i: integer;
begin
ComIni := TIniFile.Create(ComLib+"VBCom.ini");
for i := 0 to frmComSet.Panel1.ControlCount-1 do
if frmComSet.Panel1.Controls[i].ClassType=TEdit then
TEdit(frmComSet.Panel1.Controls[i]).Text :=
ComIni.ReadString(VB_COMMONSECTIONID,frmComSet.Panel1.Controls[i].Name,"");
end;


При обращении к контролам панели вылетает по Access Violation..
Такое впечатление, что форма еще не создана или не завершен конструктор для всех ее контролов. Где я глючу и как проверить из главной формы полностью ли "построена" нужная дочерняя ?


 
MsGuns ©   (2002-11-04 19:23) [1]

Вопрос вдогонку:

Как вообще ничего не показывать на экране, кроме часиков, пока ПОЛНОСТЬЮ не завершится конструктор всех форм и контролов, да еще БД откроется (DataModule.OnCreate) ?
Есть способ проверки всех флажков в цикле, которые "поднимает" каждая форма в конце OnCreate, но это совсем уж деревянно и хочется "как у людей"


 
Alex4444444444   (2002-11-04 19:27) [2]

Poprobujte postavit" activaciyu pered Application.Run. Nuzhno, navernoe, eshe postavit" ShowMainForm := False, a posle activacii, MainForm.Show.


 
MsGuns ©   (2002-11-04 19:39) [3]

В событии MainForm.OnCreate поставил MainForm.Hide, а в конце MainForm.Activate MainForm.Show, но что-то мне подсказывает, что это в корне не верно (как может форма активизироваться, если она невидима ?).
Эффекта никакого. Да, кстати, к первому вопросу (сабж) это вообще никак не относится.


 
MsGuns ©   (2002-11-04 19:49) [4]

Мастера ! Ну кто-нибудь ! Ведь для вас это вопрос плевый ! Я пока начал копать по хэлпу TApplication. Верной дорогой иду, товарищи ?


 
Alex4444444444   (2002-11-04 19:58) [5]

Eshe raz: otredactirujte file proecta (chtoby ego otkryt", nazhmite F8, naprimer). Postav"te initializaciyu pered Run:

Application.CreateForm(...)
Application.CreateForm(...)

// Initialization goes here

Application.Run


 
MsGuns ©   (2002-11-04 20:06) [6]

Я сделал так:

begin
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TdmBank, dmBank);
Application.CreateForm(TfrmSprSch, frmSprSch);
Application.CreateForm(TfrmGetPeriod, frmGetPeriod);
Application.CreateForm(TfrmComSet, frmComSet);
Application.Initialize; //NEW !!!
Application.Run;
end.


Однако сабж глючит по-прежнему. Мне надо из Гл.формы проверить, в полном ли объеме завершен конструктор формы frmComSet. Как это сделать ?
Простите за тупость, я еще не Мастер, я только учусь :)))


 
Alex4444444444   (2002-11-04 20:15) [7]

Application.Initialize ne delaet nichego! (sm. Help).
Postav"te tam VASHU initializatiyu (e.g.,


type TMainForm = ...
...
procedure Initialize;
...
end;

procedure TMainForm.Initialize;
begin
// What used to be OnActivate
end;

Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TdmBank, dmBank);
Application.CreateForm(TfrmSprSch, frmSprSch);
Application.CreateForm(TfrmGetPeriod, frmGetPeriod);
Application.CreateForm(TfrmComSet, frmComSet);

MainForm.Initialize; //All forms created!!!

Application.Run;



 
Alex4444444444   (2002-11-04 20:19) [8]

K stati, na skol"ko ya pomnyu, OnActivate proishodit KAZHDYJ raz, kogda Application (ili Form ?) poluchaet focus. Vu zhe ne hotite ee kazhdyj raz initializirovat" :)


 
MsGuns ©   (2002-11-04 20:27) [9]

Простите, но я действительно не понимаю.
В верху приведенного Вами фрагмента идет описание моей формы. Но оно же в самой форме ! Мне что, повторять ее - у меня мозги уже едут 8(.
Следующий фрагмент вообще не понятен - что за процедура Initialize ? Что я там должен определять ? Гл.форма САМА ПО СЕБЕ все имеет, но мне надо ПРОВЕРИТЬ, СОЗДАНА ЛИ ДРУГАЯ ФОРМА. Простите еще раз за тупость и не посчитайте за труд пояснить поподробнее. Спасибо что возитесь со мной.


 
Pat ©   (2002-11-04 20:27) [10]

В AutoCreated Forms попробуйте поставить MainForm в конец.


 
MsGuns ©   (2002-11-04 20:29) [11]

>Pat © (04.11.02 20:27)

> В AutoCreated Forms попробуйте поставить MainForm в конец.

Но она у меня Главная и таковой должна быть, т.е. открываться первой !



 
Pat ©   (2002-11-04 20:31) [12]

Сорри...не то.. :-((


 
Pat ©   (2002-11-04 20:34) [13]

>Мне надо из Гл.формы проверить, в полном ли объеме завершен
>конструктор формы frmComSet. Как это сделать ?
if frmComSet<>nil then создана


 
Alex4444444444   (2002-11-04 20:36) [14]

Пардон, я привел куски двух разных модулей. Напишите процедуру TMainForm.Initialize в описании главной формы, вместо OnActivate, и вставьте в нее все то, что Вы хотели сказать в OnActivate. А в модуле программы, ПОСЛЕ того, как все формы созданы, вызовите ее.


 
Sectey ©   (2002-11-04 20:36) [15]

Извени не понимаю проблему :)
Проверил на своем приложении

Application.Initialize;
На сколько я понимаю сначало необходимо
инициализировать Applicatio, а потом создавать формы.
Application.CreateForm(TfmRtOrder, fmRtOrder);
Application.CreateForm(TDM, DM);
Application.Run;


procedure TfmRtOrder.FormActivate(Sender: TObject);
begin
DM.cnTTN_BASE.ConnectPath := DirBaseTtnBase;
end;


 
MsGuns ©   (2002-11-04 20:46) [16]

>Alex4444444444 (04.11.02 20:36)

Вроде вышло ! По крайней мере не вылетает. Чтобы посмотреть полный результат, надо время. Но в любом случае спасибо огроменное ! Я уже хотел перестраивать концепцию динамики хранимых параметров, но, похоже, обойдется 8))


 
Alex4444444444   (2002-11-04 20:49) [17]

Good luck!


 
MsGuns ©   (2002-11-04 20:51) [18]

>Alex4444444444 (04.11.02 20:49)

Для полного счастья может все же подскажете как добиться того, чтобы форма моя ВОЗНИКАЛА на экране только после того, как все будет построено (т.е.после того самого Initialize) ?


 
MsGuns ©   (2002-11-04 20:54) [19]

Савсэм плахой стал даа ?
Разобрался, блин. Просто в дизайне главной форме Visible:=false, а в конце Initialize в true.
Все нормальненько !!!


 
Alex4444444444   (2002-11-04 20:55) [20]

Ya dumayu, chto tak (no ne testiroval):
MainForm.Visible := False (v ObjectInspector)


Application.Initialize;
Application.ShowMainForm := False;
Application.CreateForm(...)
...
MainForm.Initialize;
MainForm.Show;
Application.Run;


 
MsGuns ©   (2002-11-04 21:45) [21]

>Alex4444444444

Еще раз большое спасибо за науку ! Надеюсь когда-нибудь ответить тем же.



Страницы: 1 вся ветка

Текущий архив: 2002.11.14;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.021 c
8-45998
BOA_KAA
2002-07-25 16:26
2002.11.14
Выделение части рисунка в TImage


1-45845
Guest2
2002-11-05 12:56
2002.11.14
Как автоматически проматывать ScroolBar?


3-45712
sterran
2002-10-24 10:16
2002.11.14
Вопрос по SQL


1-45828
Igorek
2002-10-30 20:22
2002.11.14
Стиль: саморазрушение


1-45931
kc-action
2002-11-03 20:33
2002.11.14
Компонент