-
интересен механизм MCK, хочу в своих целях реализовать что-то похожее.
Интересно вот что: 1) каким образом, изменяя свойства, можно "генерировать код" ? 2) как бы это выразиться... почему запуская VCL-приложение, запускается KOL- приложение ?
Буду благодарен за статейку или, если всё просто, так, "на пальцах".
-
> [0] DevilDevil © (22.10.07 14:58) > как бы это выразиться... почему запуская VCL-приложение, > запускается KOL- приложение ?
потому что опции компиляции создают кол программу, а среда на эти опции не смотрит и думает что это всл.
-
> homm © (22.10.07 15:05) [1]
хм... а что за опции такие и почему в Desine-time такие опции не учитываются?
-
нет ли статейки типа "как создать MCK" ?
-
> [2] DevilDevil © (22.10.07 15:11) > а что за опции такие
KOL_MCK
-
Вам нужно смотреть на программные интерфейсы, предоставляемые средой разработки. Ну для начала, взгляните на код МСК-зеркала любого компонента, потом посмотрите mirror.pas, mckCtrls.pas etc. - как там все сделано, как идет взаимодействие со средой разработки Делфи.
-
> homm © (22.10.07 15:28) [4]> Danger © (22.10.07 15:29) [5]первые эксперименты не увенчались успехом. При попытке компиляции выдаёт ошибку типа "надо двоеточие, а вижу равно"... или наоборот :). Что я делаю не так?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
TForm1 = class(TForm)
private
public
end;
var
Form1: TForm1;
implementation
end. Листинг отличается от создаваемого поумолчанию только наличием добавленных мной опций.
-
а uses кто обворавивать будет? в kol нельзя использовать vcl-ные модули вроде SysUtils, Classes etc.
-
> [6] DevilDevil (25.10.07 00:23) > {$IFDEF KOL_MCK} > TForm1 = class(TForm) > {$ELSE} > TForm1 = class(TForm) > {$ENDIF}
Возможно одно из объявлений должно быть во включаемом файлк, иначе Дельфи бесится…
-
> SPeller (work) (25.10.07 06:30) [7]это не KOL, здесь может быть поизвольная последовательность символов, RUN_TIME например. > homm © (25.10.07 06:59) [8]непонял
-
Сюда приглядись: TForm1 = object(TObj)
Form: PControl;
TForm1 = class(TForm)
-
недогоняю. прошу озвучить мысль.
-
> [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].
-
> файлк» — здесь у меня опечатка, я промохнулся по кнопке > «е» и попал в рядомнаходящуюся кнопку «к»
Нет чтобы просто исправить одну букву, так ведь нет, написал об этом, да еще выделил ошибку жирным. :) Извиняюсь за OffTopic.
-
> homm © (25.10.07 08:13) [12]да, действительно, $INCLUDE решила. Спасибо. Далее смотрю *.dpr-файл, делаю по аналогии и не получается: program Project1;
uses
Windows,
Unit1 in 'Unit1.pas' ;
begin
MessageBox(0, '', '', 0);
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end. Проблема впринципе решается, если ещё раз вручную указывать опцию... Тем не менее остаётся вопрос, почему же в KOL&MCK проектах прокатывает, а в моём - нет. Ну и чуть более важный вопрос... В TurboDelphi именно такой фокус прокатит?
-
> [14] DevilDevil © (25.10.07 10:09) > и не получается
что не получается?
-
> Тем не менее остаётся вопрос, почему же в KOL&MCK проектах > прокатывает, а в моём - нет.
что прокатывает?
-
>В TurboDelphi именно такой фокус прокатит? к сожалению нету, как и в 2005\2007...
кстати поставил вчера 2007.. трюк не канает, но все компилируется, т.е можно в 7 создать интерфейс а в 2007 скомпилировать... попробую поковырять 2007, авось выйдет чего
-
> 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-ами
-
> [18] DevilDevil (25.10.07 16:03) > Только в моём случае компилит не MessageBox, а код связанный > с Application.
даже когда определен KOL_MCK ?
|