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

Вниз

Косяк при создании форм   Найти похожие ветки 

 
SPeller ©   (2002-05-05 05:54) [0]

Такой вот косяк в Дельфях. В модуле проекта в зависимости от передаваемых программе параметров выбираю как она дальше будет работать и какие формы создавать:

tm:=uppercase(paramstr(1));
if (tm="/C")or(tm="C")or(tm="-C") then
Application.CreateForm(TfrmConfig, frmConfig)
else begin
Application.CreateForm(TfrmOpen, frmOpen);
Application.CreateForm(TfrmTest, frmTest);
Application.CreateForm(TfrmEnd, frmEnd);
end;

Но. Если так сделать, то проект перестаёт запускаться вообще(!), хотя с успехом компилируется (Ctrl+F9) и выполняется. При попытке закрыть страницу с модулем вылазит
Error in module ***: Call to Application.CreateForm is missing or incorrect.
Закрыть проект можно только на File -> Close All. То же самое если открывать проект. Вылазит эта мессага и проект не загружается.
Однако опять же это можно преодолеть если сделать так:

tm:=uppercase(paramstr(1));
if (tm="/C")or(tm="C")or(tm="-C") then
Application.CreateForm(TfrmConfig, frmConfig);
if not((tm="/C")or(tm="C")or(tm="-C")) then begin
Application.CreateForm(TfrmOpen, frmOpen);
Application.CreateForm(TfrmTest, frmTest);
Application.CreateForm(TfrmEnd, frmEnd);
end;

Фактически никакой разницы в этих вариантах нет, алгоритм работы один и тот же, первый даже лучше с точки зрения написания кода, но вот Дельфям первый не нравится хоть убей.
Что это за нафиг и можно ли как-нибудь справиться с этим ??


 
SeF ©   (2002-05-05 08:29) [1]

не знаю что у тебя но:

program Project1;

uses
Forms,sysutils,
Unit1 in "Unit1.pas" {Form1},
Unit2 in "Unit2.pas" {Form2},
Unit3 in "Unit3.pas" {Form3},
Unit4 in "Unit4.pas" {Form4};

{$R *.res}

var
tm:string;

begin
Application.Initialize;
tm:=uppercase(paramstr(1));
if (tm="/C")or(tm="C")or(tm="-C")then
Application.CreateForm(TForm1, Form1)
else
begin
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
end;
Application.Run;
end.

Замечательно скомпилился и выполнился..........
"истина где-то рядом..."


 
SPeller ©   (2002-05-05 11:28) [2]

Вот полностью код модуля:


program UniTest;

uses
Forms,
sysutils,
Windows,
controls,
utconst in "UTConst.pas",
UTFuncs in "UTFuncs.pas",
UTFileFuncs in "UTFileFuncs.pas",
mfrmOpen in "mfrmOpen.pas" {frmOpen},
mfrmTest in "mfrmTest.pas" {frmTest},
mLED in "mLED.pas",
mfrmend in "mfrmend.pas" {frmEnd},
mfrmconfig in "mfrmconfig.pas" {frmConfig},
strfuncs in "strfuncs.pas";

{$R *.res}
var tm:string;

begin
{$MAXSTACKSIZE 2000000}
{$X+}

setpriorityclass(getcurrentprocess,realtime_priority_class);
screen.Cursor:=crappstart;
apppath:=extractfilepath(application.exename);
tm:=ut_testfolder;
if not directoryexists(apppath+tm)then createdirectory(pchar(apppath+tm),nil);
tm:=ut_testfolder+"\"+ut_testimgfolder;
if not directoryexists(apppath+tm)then createdirectory(pchar(apppath+tm),nil);
Application.Initialize;

tm:=uppercase(paramstr(1));
if (tm="/C")or(tm="C")or(tm="-C") then begin
Application.CreateForm(TfrmConfig, frmConfig)
end else begin
Application.CreateForm(TfrmOpen, frmOpen);
Application.CreateForm(TfrmTest, frmTest);
Application.CreateForm(TfrmEnd, frmEnd);
end;
screen.Cursor:=crdefault;
application.HintPause:=300;
application.HintHidePause:=20000;
setpriorityclass(getcurrentprocess,normal_priority_class);
Application.Run;

end.


Ну не хотит он работать как надо.


 
KSergey ©   (2002-05-06 10:20) [3]

Попробуйте убрать AutoCreate формы в св-свойствах проекта. Может в этом дело? Может это место дельфя не может корректно обработать?


 
Севостьянов Игорь ©   (2002-05-07 13:23) [4]

Вот тебе рабочий пример...
Причем не забудь в Project Options указать на закладке Forms
AutoCreate forms: frmConfig и ничего более...
Нужен код пришлю пиши на мыло...

program UniTest;
{$MAXSTACKSIZE 2000000}
{$X+}

uses
Forms,
SysUtils,
Windows,
Controls,
FileCtrl,
mfrmOpen in "mfrmOpen.pas" {frmOpen},
mfrmTest in "mfrmTest.pas" {frmTest},
mfrmEnd in "mfrmEnd.pas" {frmEnd},
mfrmConfig in "mfrmConfig.pas" {frmConfig};

{$R *.RES}

const
UT_TestFolder = "Testing";
UT_TestImgFolder = "Images";
var
AppPath, tm: string;

begin
SetPriorityClass(GetCurrentProcess, RealTime_Priority_Class);
Screen.Cursor := crAppStart;
AppPath := ExtractFilePath(Application.ExeName);
ForceDirectories(AppPath+"\"+UT_TestFolder);
ForceDirectories(AppPath+"\"+UT_TestImgFolder);
Application.Initialize;
tm := UpperCase(ParamStr(1));

if (tm = "/C") or (tm = "C") or (tm = "-C") then
begin
Application.CreateForm(TfrmConfig, frmConfig);
end
else
begin
Application.CreateForm(TfrmOpen, frmOpen);
Application.CreateForm(TfrmTest, frmTest);
Application.CreateForm(TfrmEnd, frmEnd);
end;
Application.HintPause := 300;
Application.HintHidePause := 20000;
SetPriorityClass(GetCurrentProcess, Normal_Priority_Class);
Screen.Cursor := crDefault;
Application.Run;

end.



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

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

Наверх




Память: 0.48 MB
Время: 0.026 c
7-64849
Olfi
2002-01-26 12:33
2002.05.20
Как можно узнать параметры компьютера?


3-64479
Alexander Vasjuk
2002-04-22 17:09
2002.05.20
Блокировать вставку стрелкой вниз


6-64756
fixxxer
2002-03-06 17:04
2002.05.20
Работа с Е-mail-ом


4-64885
Gayrus
2002-03-17 14:06
2002.05.20
Папки


1-64655
VJar
2002-05-07 14:15
2002.05.20
Запрет на перетаскивание