Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];

Вниз

События 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.008 c
8-46005
Slaem
2002-07-26 17:27
2002.11.14
media


1-45800
Sectey
2002-11-04 17:42
2002.11.14
Доступ к файлу.


3-45748
Ээх
2002-10-24 22:45
2002.11.14
Как установить ширину столбца в RxDBGrid, чтоб был виден ...


3-45786
Ээх
2002-10-24 22:37
2002.11.14
Я с помощью sql запроса делаю выборку из 2,3, ... n таблиц в DBGr


14-46080
Beginner-Designer
2002-10-24 16:00
2002.11.14
Как реализовать что-то типа if...then в Builder e?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский