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

Вниз

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

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

Наверх




Память: 0.46 MB
Время: 0.005 c
1-64622
tovSuhov
2002-05-08 10:46
2002.05.20
ProcessMessages


3-64533
JaMin
2002-04-23 17:23
2002.05.20
Помогите!!!


3-64501
ng
2002-04-23 09:42
2002.05.20
Помогите беда


1-64668
Mebius
2002-05-05 14:03
2002.05.20
Печать формы в разных разрешениях


1-64662
ASM
2002-05-05 14:43
2002.05.20
Вопрос по Splitter у





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