Конференция "KOL" » Отключение автосоздания формы в MCK [Delphi, Windows]
 
  • Darth Revan © (05.06.10 00:02) [0]
    Не удаётся отключить автосоздание формы при запуске Delphi-программы с MCK. При попытке вписать вместо кода создания формы свой код, MCK реагирует, как на код VCL-формы.
  • RusSun © (09.06.10 20:49) [1]
    Что-то вроде этого http://slil.ru/29303533 ?
  • Darth Revan © (10.06.10 17:42) [2]
    Ага. Но появилась новая проблема: вызов процедуры в dpr запихивается в {$ELSE}. Иначе как запустить код программы?
  • Darth Revan © (10.06.10 17:59) [3]
    Если отредактировать, сохранить и скомпилировать, то MCK не успевает "поправить", но форма выступает, как отдельный поток. Как можно заставить программу дожидаться окончания работы формы?
  • Vladimir Kladov © (13.06.10 20:15) [4]
    ShowModal ?
  • Darth Revan © (20.06.10 17:22) [5]
    if not Assigned( Form1 ) then
     NewForm1( Form1, Applet );
    Form1.Form.Show;

    Так запускаю.
    Form1.Form.ShowModal; имеет тот-же эффект.
  • Darth Revan © (23.06.10 13:18) [6]
    Возможно, это из-за того, что форма и процедура в одном модуле.
  • MTsv DN (23.06.10 13:47) [7]
    Mo*no testovij proekt? Potomu 4to,li4no ya ne ponjal,v 4èm problema...
  • Darth Revan © (23.06.10 14:02) [8]
    http://www.sharemania.ru/0108675
    Проект-пример.
  • Vladimir Kladov © (25.06.10 22:38) [9]
    При открытии в Delphi 6 на форме нет ни KOLProject, ни KOLForm. Dfm-файл чистый: есть только несколько базовых свойств формы.
  • Darth Revan © (26.06.10 19:46) [10]
    Vladimir Kladov
    Похоже, не сохранился. Но это дело менять не должно.
    Смысл того, что должно делаться остался.
  • Vladimir Kladov © (28.06.10 12:01) [11]
    В MCK эти 2 компонента отвечают за генерацию кода. Вы чего хотите - руками писать код? Тогда зачем вам MCK-проект? Если вы пишете руками код создания формы (чистый KOL на местном сленге), то никаких форм в смысле VCL вообще быть не должно. Только dpr и pas-файлы просто юнитов.
  • Darth Revan © (28.06.10 15:03) [12]
    Vladimir Kladov
    Вы меня явно не поняли.
    http://www.sharemania.ru/0236456
    Поправил.
  • Vladimir Kladov © (28.06.10 17:16) [13]
    Положите на форму TKOLApplet. Если бы вы объяснили цель фокус-покуса, можно было бы понять больше. Хотите, чтобы ничего не запускалось, и даже не появлялось при (не)выполнении определенных условий, и программа сразу бы завершалась, так? Легальный путь с MCK - Applet, который изначально создается невидимым. Проверяете, что нужно, и если надо завершить программу, не делаете его видимым, не создаете форму, и завершаете работу:

    { ProblemProj_1.inc
     This file is for you. Place here any code to run it
     just following Applet creation (if it present) but
     before creating other forms. E.g., You can place here
     <IF> statement, which prevents running of application
     in some cases. TIP: always use Applet for such checks
     and make it invisible until final decision if to run
     application or not. }


     Exit;

  • Darth Revan © (28.06.10 18:17) [14]
    Не совсем понимаю смысл Applet в этом случае. Я его использую для TaskBar. И как он поможет?
  • Darth Revan © (28.06.10 18:25) [15]
    Всё сделал, но он не повлиял. Похоже, форма использует процедуру, из которой она вызвана, как OnCreate.
  • Vladimir Kladov © (28.06.10 20:24) [16]
    Я так и не уловил, что же вы хотите. Если используется Applet (лежит на форме), то в отсутствие формы в списке автосоздания код в ProblemProj_0.inc становится таким:
    { KOL MCK } // Do not remove this line!
    { ProblemProj_0.inc
     Do not edit this file manually - it is generated automatically.
     You can only modify ProblemProj_1.inc and ProblemProj_3.inc
     files. }


    {$IFDEF Pcode}
    InstallCollapse;
    {$ENDIF Pcode}
     Applet := NewApplet( 'ProblemProj' );
    {$I ProblemProj_1.inc}

    {$I ProblemProj_2.inc}

    {$I ProblemProj_3.inc}

     Run( Applet );

    {$I ProblemProj_4.inc}



    Т.е. форма не создается автоматом в этом случае. Applet не только кнопка на панели задач, но и "родитель" всех форм, и в том числе предназначен для случая, когда приложение должно запуститься и что-нибудь сделать до того, как появится хотя бы одно окно. А может быть, и сразу завершить работу, так и не показывая ни окон, ни кнопок на панели задач.

    Если вы имеете в виду, что вы добавили вызов ProgCode внутри условных скобок, которые специально поставлены, чтобы код внутри них не выполнялся и не компилировался, а он не выполняется и не компилируется, то это уже вопросы к пониманию условной компиляции.

    Для добавления своего кода, который должен выполняться до создания форм, до запуска на выполнения Run в MCK существуют inc-файлы. В тех, где в комментарии написано, что они для вас, можно добавить свой код. Там, где написано, что они генерируются автоматически и изменять их не надо, ничего добавлять не надо.
  • Darth Revan © (28.06.10 21:58) [17]
    Vladimir Kladov
    inc-файлы - не решение для меня, ибо мой код до создания формы тесно связан с последующим. И переменные, которые использует форма, также используются другими частями программы.
  • Vladimir Kladov © (28.06.10 22:30) [18]
    И что? В inc-файл нельзя поместить вызов процедуры или метода?
  • Darth Revan © (29.06.10 12:36) [19]
    Ааа, теперь понятно. Спасибо за помощь, ибо оно работает, как надо.
  • Darth Revan © (29.06.10 12:55) [20]
    Почти как надо. Процедура не дожидается завершения формы.
  • Darth Revan © (29.06.10 14:19) [21]
    Тему можно закрывать, ибо решение я нашёл:
     if not Assigned( Form1 ) then
       NewForm1( Form1, Applet );
     Form1.Form.ShowModal;
     Form1.Form.Free;

  • Darth Revan © (29.06.10 14:25) [22]
    Можно Demo выпустить, в принципе.
  • Darth Revan © (29.06.10 15:09) [23]
    А можно запустить MCK-поток не запуская формы (или как сделать KOL-поток)?
  • Vladimir Kladov © (29.06.10 16:45) [24]
    Вы сначала скажите, чего хотите, понятными словами. Или вы не знаете про NewThread(Ex,AutoFree)?
  • Darth Revan © (30.06.10 13:55) [25]
    Теперь знаю. Дурацкий вопрос: как закрыть Applet? Процедура заканчивает работу и... всё. Программа сидит в процессах.
  • Vladimir Kladov © (30.06.10 21:21) [26]
    Ну почему же дурацкий. Applet завершается автоматически, когда закрывается главная форма. Если никаких форм нет, но Applet.Close; - но это если уже запущен цикл обработки сообщений Run(Applet); А если не запущен, то просто не дать его запустить: Exit; - пример я уже приводил.
  • Darth Revan © (30.06.10 21:34) [27]
    Работает, простите.

    "Если вы имеете в виду, что вы добавили вызов ProgCode внутри условных скобок, которые специально поставлены, чтобы код внутри них не выполнялся и не компилировался, а он не выполняется и не компилируется, то это уже вопросы к пониманию условной компиляции."
    Это MCK сам поставил, кстати. ProgCode; записывается снаружи, но MCK "поправляет". Иронично, но если успеть скомпилировать до фиксинга, то Applet не понадобится.
  • Vladimir Kladov © (01.07.10 11:46) [28]
    Он не поправляет, а всего лишь переставляет строки местами. Код вы ведь написали. Не надо там писать никакого кода, для этого предназначены inc-файлы. Успевать никуда не надо. Если в этот раз не успеет, успеет в следующий раз.
 
Конференция "KOL" » Отключение автосоздания формы в MCK [Delphi, Windows]
Есть новые Нет новых   [134430   +2][b:0][p:0.001]