Форум: "KOL";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
Внизмеханизм MCK. как реализовать? Найти похожие ветки
← →
DevilDevil © (2007-10-22 14:58) [0]интересен механизм MCK, хочу в своих целях реализовать что-то похожее.
Интересно вот что:
1) каким образом, изменяя свойства, можно "генерировать код" ?
2) как бы это выразиться... почему запуская VCL-приложение, запускается KOL- приложение ?
Буду благодарен за статейку или, если всё просто, так, "на пальцах".
← →
homm © (2007-10-22 15:05) [1]> [0] DevilDevil © (22.10.07 14:58)
> как бы это выразиться... почему запуская VCL-приложение,
> запускается KOL- приложение ?
потому что опции компиляции создают кол программу, а среда на эти опции не смотрит и думает что это всл.
← →
DevilDevil © (2007-10-22 15:11) [2]> homm © (22.10.07 15:05) [1]
хм... а что за опции такие и почему в Desine-time такие опции не учитываются?
← →
DevilDevil © (2007-10-22 15:11) [3]нет ли статейки типа "как создать MCK" ?
← →
homm © (2007-10-22 15:28) [4]> [2] DevilDevil © (22.10.07 15:11)
> а что за опции такие
KOL_MCK
← →
Danger © (2007-10-22 15:29) [5]Вам нужно смотреть на программные интерфейсы, предоставляемые средой разработки. Ну для начала, взгляните на код МСК-зеркала любого компонента, потом посмотрите mirror.pas, mckCtrls.pas etc. - как там все сделано, как идет взаимодействие со средой разработки Делфи.
← →
DevilDevil (2007-10-25 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) (2007-10-25 06:30) [7]а uses кто обворавивать будет? в kol нельзя использовать vcl-ные модули вроде SysUtils, Classes etc.
← →
homm © (2007-10-25 06:59) [8]> [6] DevilDevil (25.10.07 00:23)
> {$IFDEF KOL_MCK}
> TForm1 = class(TForm)
> {$ELSE}
> TForm1 = class(TForm)
> {$ENDIF}
Возможно одно из объявлений должно быть во включаемом файлк, иначе Дельфи бесится…
← →
DevilDevil © (2007-10-25 07:30) [9]> SPeller (work) (25.10.07 06:30) [7]
это не KOL, здесь может быть поизвольная последовательность символов,RUN_TIME
например.
> homm © (25.10.07 06:59) [8]
непонял
← →
homm © (2007-10-25 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 © (2007-10-25 07:56) [11]недогоняю. прошу озвучить мысль.
← →
homm © (2007-10-25 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 © (2007-10-25 09:24) [13]
> файлк» — здесь у меня опечатка, я промохнулся по кнопке
> «е» и попал в рядомнаходящуюся кнопку «к»
Нет чтобы просто исправить одну букву, так ведь нет, написал об этом, да еще выделил ошибку жирным. :)
Извиняюсь за OffTopic.
← →
DevilDevil © (2007-10-25 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 © (2007-10-25 13:23) [15]> [14] DevilDevil © (25.10.07 10:09)
> и не получается
что не получается?
← →
homm © (2007-10-25 13:23) [16]> Тем не менее остаётся вопрос, почему же в KOL&MCK проектах
> прокатывает, а в моём - нет.
что прокатывает?
← →
D[u]fa © (2007-10-25 15:49) [17]>В TurboDelphi именно такой фокус прокатит?
к сожалению нету, как и в 2005\2007...
кстати поставил вчера 2007.. трюк не канает, но все компилируется, т.е можно в 7 создать интерфейс а в 2007 скомпилировать... попробую поковырять 2007, авось выйдет чего
← →
DevilDevil (2007-10-25 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 © (2007-10-25 16:04) [19]> [18] DevilDevil (25.10.07 16:03)
> Только в моём случае компилит не MessageBox, а код связанный
> с Application.
даже когда определен KOL_MCK ?
← →
homm © (2007-10-25 16:05) [20]> [18] DevilDevil (25.10.07 16:03)
> какая так сказать деталька механихма KOL&MCK не работает
> в поздних версиях.
MCK
> Меня интересует, работает ли в Турбо фокус с DEFINE-ами
DEFINE работают, кудо бы они делись. А что за фокус?
← →
D[u]fa © (2007-10-25 17:23) [21]фокус - это в том смысле что в режиме дизайнера делфи не прально понимает директивы (define) и поэтому получается создавать мск проги в делфях до 7 включительно. в след. версиях делфи уже прально все распознает и этот трюк не канает.. т.е МСК не работает
← →
DevilDevil (2007-10-25 19:49) [22]> homm © (25.10.07 16:04) [19]
у тебя сегодня странное настроение...
> даже когда определен KOL_MCK ?
> DevilDevil © (25.10.07 10:09) [14]</I
> Проблема впринципе решается, если ещё раз вручную указывать опцию...
ну а в KOL&MCK-проектах в dpr-файлах она не указывается.
Я попросил одного хорошего человека, обладателя TurboDelphi, потестить вышеуказанный проект. Проект открывается, компилируется и работает так, как я того жду. Следовательно фокус прокатывает...
Вопрос: почему тогда MCK в Турбе не работает, если основа MCK и есть оговариваемый фокус ?
← →
D[u]fa © (2007-10-25 20:09) [23]фокус - это разработка приложения с помощью дизайнера. а то что оно компилируется я уже говорил. но на форму ничего не положить\не изменить короче нет доступа к ней
← →
homm © (2007-10-25 20:58) [24]> [22] DevilDevil (25.10.07 19:49)
> Проблема впринципе решается, если ещё раз вручную указывать
> опцию...
Следующий наводящий вопрос, где ты указываеш вручную, а где в автоматическую? (не в ручную)
← →
homm © (2007-10-25 21:00) [25]> [22] DevilDevil (25.10.07 19:49)
> у тебя сегодня странное настроение...
Хорошо, перестаю говорить загадками…
> [22] DevilDevil (25.10.07 19:49)
> ну а в KOL&MCK-проектах в dpr-файлах она не указывается.
Зато указывается (и является обязательной во всех фак-ю по КОЛ) в свойствах проекта, дак с чего бы ей не работать?
← →
alg (2007-10-26 06:56) [26]А что если грубо хакнуть Турбу, чтоб она стала работать с директивами как 7-ка работала, реально такое? Если конечно такой патч на всем остальном функционале среды не отразится отрицательно.
← →
D[u]fa © (2007-10-26 14:32) [27]если есть такая возможность то пробуй =)
вчера получилось следущее - доступ к форме в 2007 делфе, можно ставить компоненты удалять, назначать события, НО... мск отказывается генерить код..
как исправить это пока не знаю. Надо чтоб Владимир высказал свои мысли по этому поводу...
← →
DevilDevil © (2007-10-26 16:08) [28]это ОЧЕНЬ ХОРОШО (извиняюсь, только для меня)
потому что генерация кода в моём случае не нужна, только фокус с компиляцией.
Всем участникам спасибо!
← →
Vladimir Kladov © (2007-10-26 16:23) [29]Включите консоль. Если недостаточно то пересоберите МСК с символом MCKLOG в опциях, и посмотрите что пишется в C:\MCK.LOG.
← →
D[u]fa © (2007-10-26 16:27) [30]уже.. вопчем пока что затык на GetProjectName... делфи убеждает меня что оно "CodeGear Delphi for Microsoft Windows - Unit1"... хотя по идее должно быть Empty такое же название у dpr файла
← →
D[u]fa © (2007-10-26 16:57) [31]хмм... забавно.. но по моему получилось)
вкратце дело обстоит так:
баг с ifdef действительно прикрыт, НО)) есть баг с {$IF ...} {$IFEND ..} =)
его получается использовать, но не везде. на данный момент получилось получить доступ к редактору форм и мск стал генерить код.
недостатки:
не могу убрать дфм файл (редактор форм сразу блокируется)
нельзя убрать из uses mirror, Classes, Controls, mckCtrls =\, но можно заменить их пустыми..
кому интересно могу выложить подправленный пакет кол_мск
← →
D[u]fa © (2007-10-26 16:59) [32]причем код генерица моментально.. даже не надо форму двигать и т.д
← →
homm © (2007-10-26 17:01) [33]> [32] D[u]fa © (26.10.07 16:59)
> даже не надо форму двигать и т.д
А как ты ее собрался двигать в 2006+ :))
← →
D[u]fa © (2007-10-26 17:10) [34]ну что к словам придираться то =) изменить размер к примеру
← →
Vladimir Kladov © (2007-10-26 22:31) [35]Мне можно выслать. Я хоть с ним и не работаю, но вдруг удастся сделать версию, которая и там и там работает по-прежнему. Менять-то надо только генерируемый код как я понял.
← →
D[u]fa © (2007-10-27 11:03) [36]именно так, я думаю получится сделать совместимую версию со всеми после 7(если в них есть директива {$IF}, а где то я читал что она есть).
Сегодня приведу в порядок список изменений и вышлю Вам, только скажите куда
изменений не много и все они в mirror.pas
← →
alg (2007-10-27 11:41) [37]КЛАСС!
Ждём релиз MCK под BDS2006-2007!
← →
D[u]fa © (2007-10-27 13:31) [38]>КЛАСС!
Ждём релиз MCK под BDS2006-2007!
=)
скоро уже сделаю публичный вариант переделанного кол_мск пакета, чтоб б Владимиру меньше работы было.. А сюда выложу линк.
зы: только что нашел возможность обмана uses, так что теперь проекты будут почти один в один как и в <= 7 Delphi =)
← →
D[u]fa © (2007-10-27 16:01) [39]готово =), создал новую тему http://delphimaster.net/view/11-1193486478/
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
Память: 0.61 MB
Время: 0.042 c