Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];

Вниз

MCK - Хромой?!...   Найти похожие ветки 

 
Bartov   (2003-02-27 02:07) [0]

Обращаюсь к вам Владимир.
Что хотелось бы подправить в МСК и увидеть эти исрпавления в 1.70:

1. При переименовании проетка (Save Project As..) из файла не удаляется старая строка, и вот что получается:

begin // PROGRAM START HERE -- Please do not remove this comment

{$IFDEF KOL_MCK} {$I dd_0.inc} {$ELSE} <--- НОВОЕ НАЗВАНИЕ

{$IFDEF KOL_MCK} {$I aa_0.inc} {$ELSE} <--- СТАРОЕ остается, а НЕ нужно.
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;

2. xxx.DOF - этот файл приносит немного не удобства.
Если удалить его, то при компиляции вывалится ошибка, потому что
Conditionals=<пустой>, а не Conditionals=KOL_MCK.

[Directories]
Conditionals=KOL_MCK

Руками вносить не прикольно (через опции проекта). Хотелось бы чтоб все отслеживалось автоматом.


 
Kladov   (2003-02-27 16:45) [1]


> СТАРОЕ остается, а НЕ нужно.

Я не знаю, как это сделать. Хорошо еще, новое добавляется. Старое можно убирать руками.


> Хотелось бы чтоб все отслеживалось автоматом.

Зачем же удалять этот файл? А ведь в этом файле и другие опции проекта хранятся. Нельзя его удалять.


 
NKS   (2003-02-27 17:18) [2]


> > СТАРОЕ остается, а НЕ нужно.
>
> Я не знаю, как это сделать. Хорошо еще, новое добавляется.
> Старое можно убирать руками.

По этому поводу есть и другие проблемы: например при форматировании пробелов в Unit"ax, MCK повторно вставляет весь свой код. Может стоит все блоки в которых есть ifdef"ы МСК окружать чем-то вроде {someblock}ifdef....{/someblock} тогда их содержимое легко идентифицировать. При отличии содержимого от желаемого (причем, желательно без учета пробелов) обновлять. Это также позволит убрать кучу include из dpr (я так понимаю, они были сделаны для отделения служебной разметки?).
Еще предложение по uses"ам. Можно сделать две строки uses в начале unit"a: первую для MCK, а вторую для KOL? (+3 для своих unit"ов снаружи ifdef, если надо) Под Delphi5 вроде все нормально получается, он все свое добавляет в первую строку. А то в текущем виде это как-то странновато выглядит.


 
Kladov   (2003-02-27 19:06) [3]

Давайте код, если будет работать, так и сделаем. Обязательна совместимость: не должно быть проблем с открытием старых проектов.


 
Bartov   (2003-02-27 19:18) [4]

2Kladov
А вы опишите немного суть работы MCK, я бы с удовольствием взялся за него.


 
Kladov   (2003-02-27 21:30) [5]

Немного я уже описывал. MCK генерирует в design-time код, который работает в run-time. Чтобы описать более подробно, нужно тома написать. Я думал, вы уже знаете решение и готовы его предложить.

Мое решение получено путем эксперимента, и основано на глубоком баге, или если мягче, некорректности Delphi. Этот баг настолько глубок, что я уверен, что не будет исправлен ни в какой из будущих версий Delphi. А если будет, то эта версия будет уже не совместима с MCK.

И заключается этот баг в том, что код, который "видит" дизайнер, отличается от кода, который "видит" компилятор. В design-time просто игнорируются {$IFDEF}, {$ENDIF} и все остальное. Когда Delphi сам добавляет что-то в uses, он ищет первую ";" после uses, и всовывает модуль туда.

Можно организовать фиктивную ";" перед тем {$ENDIF}, котороый надо. Просто окружить ее
{$IFDEF DUMMY_COMMA};{$ENDIF}.

Но неужели это так напрягает? Или у вас каждые 5 секунд модуль в uses добавляется. А с таким решением могут появиться еще какие-то непредвиденные проблемы. Первая - совместимость. Вторая - еще страшнее uses начинает смотреться. Модули будут добавляться всегда в это место. Модули правильно написанных зеркал добавяться правильно. Модули, которые вручную, надо будет записать между {$ENDIF} и ;, как и раньше. А теперь попробуйте объяснить новичку, почему только так и никак иначе :)

Вот что получилось. Ссылку на ImgList Delphi сунул куда надо (я просто бросил VCL.TImageList на форму):


{$IFDEF KOL_MCK}
uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes, Controls, mckCtrls, mckObjs, mckCCtrls,
ImgList
{$IFDEF DUMMY_COMMA};{$ENDIF}
{$ENDIF}, err;
{$ELSE}
{$I uses.inc}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
{$ENDIF}


То же самое без err.
Вторая часть, кстати, тоже нужна для обмана Delphi в design-time. Еще один uses как бы добавляется через {$INCLUDE}, чтобы не ломался Code Insight увидевший 2 uses. Во время работы в design-time CodeInsight формально не видит того, что между внешним IFDEF и ELSE. Но понимает, что после применения $I uses.inc получается uses Windows, Messages, ... Этого почти достаточно для его работы. (Кстати, если увеличить здесь число перечисленных модулей, то может быть, отладчик будет правильно значения свойств показывать при пошаговой отладке. Не пробовал.)

Шаманство все это. Я конечно шаман хороший, и с бубном плясать у меня получается. Но не нравится мне это. Стройности хочу, чтобы все было честно и без обмана.


 
Bartov   (2003-02-28 01:12) [6]

> Я думал, вы уже знаете решение и готовы его предложить.
Поверьте, знал бы, весь МСК переделал бы.
Дождусь 1.70, сделаю распечатки и начнем разбираться и публиковаться...


 
Kladov   (2003-02-28 04:45) [7]

Немного я уже описывал. MCK генерирует в design-time код, который работает в run-time. Чтобы описать более подробно, нужно тома написать. Я думал, вы уже знаете решение и готовы его предложить.

Мое решение получено путем эксперимента, и основано на глубоком баге, или если мягче, некорректности Delphi. Этот баг настолько глубок, что я уверен, что не будет исправлен ни в какой из будущих версий Delphi. А если будет, то эта версия будет уже не совместима с MCK.

И заключается этот баг в том, что код, который "видит" дизайнер, отличается от кода, который "видит" компилятор. В design-time просто игнорируются {$IFDEF}, {$ENDIF} и все остальное. Когда Delphi сам добавляет что-то в uses, он ищет первую ";" после uses, и всовывает модуль туда.

Можно организовать фиктивную ";" перед тем {$ENDIF}, котороый надо. Просто окружить ее
{$IFDEF DUMMY_COMMA};{$ENDIF}.

Но неужели это так напрягает? Или у вас каждые 5 секунд модуль в uses добавляется. А с таким решением могут появиться еще какие-то непредвиденные проблемы. Первая - совместимость. Вторая - еще страшнее uses начинает смотреться. Модули будут добавляться всегда в это место. Модули правильно написанных зеркал добавяться правильно. Модули, которые вручную, надо будет записать между {$ENDIF} и ;, как и раньше. А теперь попробуйте объяснить новичку, почему только так и никак иначе :)

Вот что получилось. Ссылку на ImgList Delphi сунул куда надо (я просто бросил VCL.TImageList на форму):


{$IFDEF KOL_MCK}
uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes, Controls, mckCtrls, mckObjs, mckCCtrls,
ImgList
{$IFDEF DUMMY_COMMA};{$ENDIF}
{$ENDIF}, err;
{$ELSE}
{$I uses.inc}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
{$ENDIF}


То же самое без err.
Вторая часть, кстати, тоже нужна для обмана Delphi в design-time. Еще один uses как бы добавляется через {$INCLUDE}, чтобы не ломался Code Insight увидевший 2 uses. Во время работы в design-time CodeInsight формально не видит того, что между внешним IFDEF и ELSE. Но понимает, что после применения $I uses.inc получается uses Windows, Messages, ... Этого почти достаточно для его работы. (Кстати, если увеличить здесь число перечисленных модулей, то может быть, отладчик будет правильно значения свойств показывать при пошаговой отладке. Не пробовал.)

Шаманство все это. Я конечно шаман хороший, и с бубном плясать у меня получается. Но не нравится мне это. Стройности хочу, чтобы все было честно и без обмана.


 
Kladov   (2003-02-28 04:54) [8]

Извиняюсь. На автомате послалось повторно - осталось со вчера, не в том окошке щелкнул. Просьба модератору дубликат убрать, если не трудно.


 
Kladov   (2003-02-28 21:00) [9]


> сделаю распечатки

В смысле?


 
Bartov   (2003-02-28 23:42) [10]

2Kladov

В прямом смысле, распечатаю Mirror.pas и др. и разбираться буду и опишу их ;-)
Всеравно, как я понял в будующем, как вы разработаете свой GOODWELL, вы не собираетесь поддерживать МСК для будующих версий Делфи?... Или я не прав?...


 
Bartov   (2003-02-28 23:54) [11]

2Kladov

Предложение по МСК:
[Directories]
Conditionals=KOL_MCK

Формируется один раз, не могли бы вы сделать, что если не указан Conditionals=KOL_MCK в xxx.DOF файле, а присутсвует в xxx.DPR, чтоб Conditionals=KOL_MCK добавлялся автоматически в xxx.DOF.
Ну вы поняли про что я имею ввиду. И гемора будет меньше.


 
Boguslaw   (2003-03-01 00:14) [12]

MCK should be replaced by full-features IDE which can parse poor KOL object code ,display correctly with syntax highlighting.
Unfortunately this is a large work.


 
Kladov   (2003-03-01 21:26) [13]


> распечатаю Mirror.pas и др. и разбираться буду

Как же можно по распечатке разбираться? Когда на экране, есть удобная навигация: ctrl+LClick -> пошли в то место, где символ определен, есть движение по истории переходов, ctrl+shift+up - переход между реализацией и определением метода, там и комментарии есть. Не помню, когда последний раз печатал исходники. Наверное, лет 8 назад, когда с BorlandC работал.


> если не указан Conditionals=KOL_MCK в xxx.DOF файле, а присутсвует
> в xxx.DPR, чтоб Conditionals=KOL_MCK добавлялся автоматически
> в xxx.DOF

Посмотрю. Если так получится, добавлю.


 
Bartov   (2003-03-02 01:34) [14]

> Как же можно по распечатке разбираться?
Когда 16-18 часов в день за монитором, то часок с утра или перед сном за бумажками посидеть можно. Это называется раслябление глаз ;-)

И всё таки, вы не ответели:
вы не собираетесь поддерживать МСК для будующих версий Делфи?... Или я не прав?...
Не заметели вопрос или отвечать не хотите?...


 
Kladov   (2003-03-02 13:06) [15]


> не собираетесь поддерживать МСК для будующих версий Делфи

Будут будущие версии, будем смотреть.


 
Bartov   (2003-03-04 00:35) [16]

Так бы сразу и сказали ;-)



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.015 c
14-56845
Murad
2003-10-24 18:00
2003.11.17
Люди, кто-то на MMP рассказывал про смешные результаты поиска...


1-56562
Gray Angel
2003-11-06 13:53
2003.11.17
Довесок к Exeption


4-56953
LOMic
2003-09-22 11:45
2003.11.17
Непонятки с WaitForSingleObject


14-56815
Style
2003-10-24 12:33
2003.11.17
Газели млин!


1-56575
Aldor
2003-11-06 11:36
2003.11.17
---|Ветка была без названия|---





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский