Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

механизм MCK. как реализовать?


Страницы:   1 2

DevilDevil ©   (2007-10-22 14:58:00) 

интересен механизм MCK, хочу в своих целях реализовать что-то похожее.

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

Буду благодарен за статейку или, если всё просто, так, "на пальцах".


homm   (2007-10-25 16:04:00) [21]

> [18] DevilDevil   (25.10.07 16:03)
> Только в моём случае компилит не MessageBox, а код связанный
> с Application.

даже когда определен KOL_MCK ?


DevilDevil   (2007-10-25 16:03:00) [22]

> 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-ами


D[u]fa   (2007-10-25 15:49:00) [23]

>В TurboDelphi именно такой фокус прокатит?
к сожалению нету, как и в 2005\2007...

кстати поставил вчера 2007.. трюк не канает, но все компилируется, т.е можно в 7 создать интерфейс а в 2007 скомпилировать... попробую поковырять 2007, авось выйдет чего


homm   (2007-10-25 13:23:00) [24]

> Тем не менее остаётся вопрос, почему же в KOL&MCK проектах
> прокатывает, а в моём - нет.

что прокатывает?


homm   (2007-10-25 13:23:00) [25]

> [14] DevilDevil ©   (25.10.07 10:09)
> и не получается

что не получается?


DevilDevil   (2007-10-25 10:09:00) [26]

> 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 именно такой фокус прокатит?


Andrey_rus   (2007-10-25 09:24:00) [27]


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


Нет чтобы просто исправить одну букву, так ведь нет, написал об этом, да еще выделил ошибку жирным. :)
Извиняюсь за OffTopic.


homm   (2007-10-25 08:13:00) [28]

> [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].


DevilDevil   (2007-10-25 07:56:00) [29]

недогоняю. прошу озвучить мысль.


homm   (2007-10-25 07:48:00) [30]

Сюда приглядись:

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


DevilDevil   (2007-10-25 07:30:00) [31]

> SPeller (work)   (25.10.07 06:30) [7]

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


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

непонял


homm   (2007-10-25 06:59:00) [32]

> [6] DevilDevil   (25.10.07 00:23)
> {$IFDEF KOL_MCK}
>    TForm1 = class(TForm)
> {$ELSE}
>    TForm1 = class(TForm)
> {$ENDIF}

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


SPeller (work)   (2007-10-25 06:30:00) [33]

а uses кто обворавивать будет? в kol нельзя использовать vcl-ные модули вроде SysUtils, Classes etc.


DevilDevil   (2007-10-25 00:23:00) [34]

> 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.


Листинг отличается от создаваемого поумолчанию только наличием добавленных мной опций.


Danger   (2007-10-22 15:29:00) [35]

Вам нужно смотреть на программные интерфейсы, предоставляемые средой разработки. Ну для начала, взгляните на код МСК-зеркала любого компонента, потом посмотрите mirror.pas, mckCtrls.pas etc. - как там все сделано, как идет взаимодействие со средой разработки Делфи.


homm   (2007-10-22 15:28:00) [36]

> [2] DevilDevil ©   (22.10.07 15:11)
> а что за опции такие

KOL_MCK


DevilDevil   (2007-10-22 15:11:00) [37]

нет ли статейки типа "как создать MCK" ?


DevilDevil   (2007-10-22 15:11:00) [38]

> homm ©   (22.10.07 15:05) [1]

хм... а что за опции такие и почему в Desine-time такие опции не учитываются?


homm   (2007-10-22 15:05:00) [39]

> [0] DevilDevil ©   (22.10.07 14:58)
> как бы это выразиться... почему запуская VCL-приложение,
> запускается KOL- приложение ?

потому что опции компиляции создают кол программу, а среда на эти опции не смотрит и думает что это всл.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо