-
Не удаётся отключить автосоздание формы при запуске Delphi-программы с MCK. При попытке вписать вместо кода создания формы свой код, MCK реагирует, как на код VCL-формы.
-
-
Ага. Но появилась новая проблема: вызов процедуры в dpr запихивается в {$ELSE}. Иначе как запустить код программы?
-
Если отредактировать, сохранить и скомпилировать, то MCK не успевает "поправить", но форма выступает, как отдельный поток. Как можно заставить программу дожидаться окончания работы формы?
-
ShowModal ?
-
if not Assigned( Form1 ) then NewForm1( Form1, Applet ); Form1.Form.Show;
Так запускаю. Form1.Form.ShowModal; имеет тот-же эффект.
-
Возможно, это из-за того, что форма и процедура в одном модуле.
-
Mo*no testovij proekt? Potomu 4to,li4no ya ne ponjal,v 4èm problema...
-
-
При открытии в Delphi 6 на форме нет ни KOLProject, ни KOLForm. Dfm-файл чистый: есть только несколько базовых свойств формы.
-
Vladimir Kladov Похоже, не сохранился. Но это дело менять не должно. Смысл того, что должно делаться остался.
-
В MCK эти 2 компонента отвечают за генерацию кода. Вы чего хотите - руками писать код? Тогда зачем вам MCK-проект? Если вы пишете руками код создания формы (чистый KOL на местном сленге), то никаких форм в смысле VCL вообще быть не должно. Только dpr и pas-файлы просто юнитов.
-
-
Положите на форму TKOLApplet. Если бы вы объяснили цель фокус-покуса, можно было бы понять больше. Хотите, чтобы ничего не запускалось, и даже не появлялось при (не)выполнении определенных условий, и программа сразу бы завершалась, так? Легальный путь с MCK - Applet, который изначально создается невидимым. Проверяете, что нужно, и если надо завершить программу, не делаете его видимым, не создаете форму, и завершаете работу:
Exit;
-
Не совсем понимаю смысл Applet в этом случае. Я его использую для TaskBar. И как он поможет?
-
Всё сделал, но он не повлиял. Похоже, форма использует процедуру, из которой она вызвана, как OnCreate.
-
Я так и не уловил, что же вы хотите. Если используется Applet (лежит на форме), то в отсутствие формы в списке автосоздания код в ProblemProj_0.inc становится таким:
InstallCollapse;
Applet := NewApplet( 'ProblemProj' );
Run( Applet );
Т.е. форма не создается автоматом в этом случае. Applet не только кнопка на панели задач, но и "родитель" всех форм, и в том числе предназначен для случая, когда приложение должно запуститься и что-нибудь сделать до того, как появится хотя бы одно окно. А может быть, и сразу завершить работу, так и не показывая ни окон, ни кнопок на панели задач. Если вы имеете в виду, что вы добавили вызов ProgCode внутри условных скобок, которые специально поставлены, чтобы код внутри них не выполнялся и не компилировался, а он не выполняется и не компилируется, то это уже вопросы к пониманию условной компиляции. Для добавления своего кода, который должен выполняться до создания форм, до запуска на выполнения Run в MCK существуют inc-файлы. В тех, где в комментарии написано, что они для вас, можно добавить свой код. Там, где написано, что они генерируются автоматически и изменять их не надо, ничего добавлять не надо.
-
Vladimir Kladov inc-файлы - не решение для меня, ибо мой код до создания формы тесно связан с последующим. И переменные, которые использует форма, также используются другими частями программы.
-
И что? В inc-файл нельзя поместить вызов процедуры или метода?
-
Ааа, теперь понятно. Спасибо за помощь, ибо оно работает, как надо.
-
Почти как надо. Процедура не дожидается завершения формы.
-
Тему можно закрывать, ибо решение я нашёл: if not Assigned( Form1 ) then
NewForm1( Form1, Applet );
Form1.Form.ShowModal;
Form1.Form.Free;
-
Можно Demo выпустить, в принципе.
-
А можно запустить MCK-поток не запуская формы (или как сделать KOL-поток)?
-
Вы сначала скажите, чего хотите, понятными словами. Или вы не знаете про NewThread(Ex,AutoFree)?
-
Теперь знаю. Дурацкий вопрос: как закрыть Applet? Процедура заканчивает работу и... всё. Программа сидит в процессах.
-
Ну почему же дурацкий. Applet завершается автоматически, когда закрывается главная форма. Если никаких форм нет, но Applet.Close; - но это если уже запущен цикл обработки сообщений Run(Applet); А если не запущен, то просто не дать его запустить: Exit; - пример я уже приводил.
-
Работает, простите.
"Если вы имеете в виду, что вы добавили вызов ProgCode внутри условных скобок, которые специально поставлены, чтобы код внутри них не выполнялся и не компилировался, а он не выполняется и не компилируется, то это уже вопросы к пониманию условной компиляции." Это MCK сам поставил, кстати. ProgCode; записывается снаружи, но MCK "поправляет". Иронично, но если успеть скомпилировать до фиксинга, то Applet не понадобится.
-
Он не поправляет, а всего лишь переставляет строки местами. Код вы ведь написали. Не надо там писать никакого кода, для этого предназначены inc-файлы. Успевать никуда не надо. Если в этот раз не успеет, успеет в следующий раз.
|