Конференция "KOL" » механизм MCK. как реализовать?
 
  • DevilDevil © (22.10.07 14:58) [0]
    интересен механизм MCK, хочу в своих целях реализовать что-то похожее.

    Интересно вот что:
    1) каким образом, изменяя свойства, можно "генерировать код" ?
    2) как бы это выразиться... почему запуская VCL-приложение, запускается KOL- приложение ?

    Буду благодарен за статейку или, если всё просто, так, "на пальцах".
  • homm © (22.10.07 15:05) [1]
    > [0] DevilDevil ©   (22.10.07 14:58)
    > как бы это выразиться... почему запуская VCL-приложение,
    > запускается KOL- приложение ?

    потому что опции компиляции создают кол программу, а среда на эти опции не смотрит и думает что это всл.
  • DevilDevil © (22.10.07 15:11) [2]
    > homm ©   (22.10.07 15:05) [1]

    хм... а что за опции такие и почему в Desine-time такие опции не учитываются?
  • DevilDevil © (22.10.07 15:11) [3]
    нет ли статейки типа "как создать MCK" ?
  • homm © (22.10.07 15:28) [4]
    > [2] DevilDevil ©   (22.10.07 15:11)
    > а что за опции такие

    KOL_MCK
  • Danger © (22.10.07 15:29) [5]
    Вам нужно смотреть на программные интерфейсы, предоставляемые средой разработки. Ну для начала, взгляните на код МСК-зеркала любого компонента, потом посмотрите mirror.pas, mckCtrls.pas etc. - как там все сделано, как идет взаимодействие со средой разработки Делфи.
  • DevilDevil (25.10.07 00:23) [6]
    > homm ©   (22.10.07 15:28) [4]
    > Danger ©   (22.10.07 15:29) [5]

    первые эксперименты не увенчались успехом. При попытке компиляции выдаёт ошибку типа "надо двоеточие, а вижу равно"... или наоборот :). Что я делаю не так?

    {$DEFINE KOL_MCK}
    unit Unit1;

    interface

    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs;

    type
     {$IFDEF KOL_MCK}
        TForm1 = class(TForm)
     {$ELSE}
        TForm1 = class(TForm)
     {$ENDIF}
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     Form1: TForm1;

    implementation

    {$R *.dfm}

    end.



    Листинг отличается от создаваемого поумолчанию только наличием добавленных мной опций.
  • SPeller (work) (25.10.07 06:30) [7]
    а uses кто обворавивать будет? в kol нельзя использовать vcl-ные модули вроде SysUtils, Classes etc.
  • homm © (25.10.07 06:59) [8]
    > [6] DevilDevil   (25.10.07 00:23)
    > {$IFDEF KOL_MCK}
    >    TForm1 = class(TForm)
    > {$ELSE}
    >    TForm1 = class(TForm)
    > {$ENDIF}

    Возможно одно из объявлений должно быть во включаемом файлк, иначе Дельфи бесится…
  • DevilDevil © (25.10.07 07:30) [9]
    > SPeller (work)   (25.10.07 06:30) [7]

    это не KOL, здесь может быть поизвольная последовательность символов,
    RUN_TIME

    например.


    > homm ©   (25.10.07 06:59) [8]

    непонял
  • homm © (25.10.07 07:48) [10]
    Сюда приглядись:

     {$IFDEF KOLCLASSES}{$I TForm1.inc}{$ELSE} TForm1 = object(TObj) {$ENDIF}
       Form: PControl;
     {$ELSE not_KOL_MCK}
     TForm1 = class(TForm)
     {$ENDIF KOL_MCK}

  • DevilDevil © (25.10.07 07:56) [11]
    недогоняю. прошу озвучить мысль.
  • homm © (25.10.07 08:13) [12]
    > [6] DevilDevil   (25.10.07 00:23)
    > {$IFDEF KOL_MCK}
    >    TForm1 = class(TForm)
    > {$ELSE}
    >    TForm1 = class(TForm)
    > {$ENDIF}

    Возможно одно из объявлений должно быть во включаемом файлк, иначе Дельфи бесится…

    Давай взгляним на прокоментированный участок кода. Там 5 строк, причем во 2-й и 4-й мы видим посреди строки знак =, т.к. это выращение стоит не в секции кода, а в секции оюъявлений типов, логично предположить что указанные строки есть суть объявления типа TForm1 (гениально, правда?).
    Дальше я сказал «одно из». Т.к. их два, получеся, что имеллось ввиду «либо первое, либо второе орбъявление». Я думаю ты бет струда разберешся, какое первое, какое второе.
    «должно быть во включаемом файлк» — здесь у меня опечатка, я промохнулся по кнопке «е» и попал в рядомнаходящуюся кнопку «к». Итак имеем: «должно быть во включаемом файле».
    Включаемый файл… Зжесь от тебя потребовалось проявить программерскую смекалку, и догадатся что «включаемый файл», это файл, включаемый в основной файл с помошью директивы «{$I }», от слова include, включить. Т.к. сейчас оба обявления находятся в одном файле, видимо стоит продублировать одно из них во «включаемый файл» и, снова провив программерскую смекалку, вставить на место этого объявления директиву включения файла. Что примерно из этого должно получится, ты можешь посмотреть в посте [10].
  • Andrey_rus © (25.10.07 09:24) [13]

    > файлк» — здесь у меня опечатка, я промохнулся по кнопке
    > «е» и попал в рядомнаходящуюся кнопку «к»


    Нет чтобы просто исправить одну букву, так ведь нет, написал об этом, да еще выделил ошибку жирным. :)
    Извиняюсь за OffTopic.
  • DevilDevil © (25.10.07 10:09) [14]
    > homm ©   (25.10.07 08:13) [12]

    да, действительно,
    $INCLUDE

    решила. Спасибо.

    Далее смотрю *.dpr-файл, делаю по аналогии и не получается:

    program Project1;

    uses
     Windows,
     Unit1 in 'Unit1.pas' {Form1};

    {$R *.res}

    begin

     {$IFDEF KOL_MCK}
     MessageBox(0, '', '', 0);
     {$ELSE}
     Application.Initialize;
     Application.CreateForm(TForm1, Form1);
     Application.Run;
     {$ENDIF}
    end.



    Проблема впринципе решается, если ещё раз вручную указывать опцию...
    Тем не менее остаётся вопрос, почему же в KOL&MCK проектах прокатывает, а в моём - нет.

    Ну и чуть более важный вопрос...
    В TurboDelphi именно такой фокус прокатит?
  • homm © (25.10.07 13:23) [15]
    > [14] DevilDevil ©   (25.10.07 10:09)
    > и не получается

    что не получается?
  • homm © (25.10.07 13:23) [16]
    > Тем не менее остаётся вопрос, почему же в KOL&MCK проектах
    > прокатывает, а в моём - нет.

    что прокатывает?
  • D[u]fa © (25.10.07 15:49) [17]
    >В TurboDelphi именно такой фокус прокатит?
    к сожалению нету, как и в 2005\2007...

    кстати поставил вчера 2007.. трюк не канает, но все компилируется, т.е можно в 7 создать интерфейс а в 2007 скомпилировать... попробую поковырять 2007, авось выйдет чего
  • DevilDevil (25.10.07 16:03) [18]
    > homm ©   (25.10.07 13:23) [15]
    > homm ©   (25.10.07 13:23) [16]


    В [14] я привёл листинг очень похожий на генерируемый KOL&MCK. Только в моём случае компилит не MessageBox, а код связанный с Application.

    > D[u]fa ©   (25.10.07 15:49) [17]
    не понял.
    Вообще, я слышал, что KOL&MCK не работает под 2005/7/Turbo, но я не понял, но не понял из-за чего, какая так сказать деталька механихма KOL&MCK не работает в поздних версиях.

    Меня интересует, работает ли в Турбо фокус с DEFINE-ами
  • homm © (25.10.07 16:04) [19]
    > [18] DevilDevil   (25.10.07 16:03)
    > Только в моём случае компилит не MessageBox, а код связанный
    > с Application.

    даже когда определен KOL_MCK ?
 
Конференция "KOL" » механизм MCK. как реализовать?
Есть новые Нет новых   [134431   +10][b:0][p:0.002]