Конференция "KOL" » KOL v 3.00 [Delphi, Windows]
 
  • Vladimir Kladov © (03.10.10 10:18) [0]
    Изменений очень много. Цель - уменьшить размер объекта TControl в памяти. Удалось с 1,6 Кбайта до 300 с хвостиком байт, т.е. примерно в 5 раз. Размер кода в итоге сильно не пострадал. В отдельных частях даже выиграл. Могут быть несовместимости. Выкладываю после апробирования на некотором количестве мелких проектов и на одном большом. Просьба смотреть на своих проектах и если что искать баги и исправлять буду.
  • awkward (03.10.10 10:50) [1]
    А в SVN это всё будет выкладываться?
  • Vladimir Kladov © (03.10.10 11:16) [2]
    я с свн не подружился. Tortoise SVN не пошел, Rapid SVN тоже не соединяется, других я не пробовал.
  • awkward (03.10.10 11:48) [3]
    жаль. Но все равно - спасибо!
  • MTsv DN (03.10.10 13:21) [4]
    Привет

    Владимир, давно хотел попросить. Прежде чем вывешивать апдейт, проверьте версии ВСЕХ файлов. Мало того, что Вы иногда не последние версии используете (сейчас, это конкретно visual_xp_styles.inc), так даже в Ваших архивах файлы разные. Кстати, именно этим и хорош SVN.
  • MTsv DN (03.10.10 13:22) [5]
    Добавлено
    Пока разгребаю версии, позже напишу по поводу компиляции проекта.
  • awkward (03.10.10 13:25) [6]
    Кстати, нашел первую сложность. Строю окно (без аппелат, просто форма), помещаю туда Trackbar (компонент из KOLCCtrls), помещаю его в самый низ формы, задаю
    Anchor(true,false,true,true);

    но при ресайзе формы координата Top  контрола почему-то превышает высоту формы. На предыдущей версии KOL всё было нормально.
  • MTsv DN (03.10.10 13:49) [7]
    2 Кладов
    http://zalil.ru/29760737 - visual_xp_styles v.1.99 с моими последними изменениями и подгонкой под 3.00.

    2 awkward
    Думаю Владимир щас ответит, что KOLCCtrls не стандартный компонент KOL и он в него не в ответе 8)
  • Vladimir Kladov © (03.10.10 15:13) [8]
    Ну почему же уж совсем нестандартный. Но в приоритетах его не держу, добился только, чтобы компилировался и все. Это ведь свежескачанный KOLCCtrls.zip?

    Все просто: Anchor я не проверял, не хватает строки кода:

    procedure TControl.SetAnchor(const Index: Integer; const Value: Boolean);
    begin
     if   Value then
          fAnchors := fAnchors or Index
     else fAnchors := fAnchors and not Index;
     if  Parent <> nil then
     begin
         fParent.AttachProc( ParentAnchorChildren );
         Parent.fOldWidth := Parent.ClientWidth;
         Parent.fOldHeight := Parent.ClientHeight; <- вот этой
     end;
    end;

  • awkward (03.10.10 15:14) [9]

    > Думаю Владимир щас ответит, что KOLCCtrls не стандартный
    > компонент KOL и он в него не в ответе 8)

    вот только в документации там стоит: (C) by Kladov Vladimir, 2002, 2007

    Кстати, теперь возникли проблемы с уничтожением объектов. особенно где есть дочерние контролы и используется CustomObj
  • Vladimir Kladov © (03.10.10 15:26) [10]
    CustomObj я же не трогал. В чем проблема? В PAS_VERSION пробовали?
  • MTsv DN (03.10.10 15:26) [11]
    Владимир,
    http://zalil.ru/29761156 - вот исправленный MCKAppExpert200x (как-то давно Вам говорил)
  • awkward (03.10.10 15:33) [12]
    PAS_VERSION только что попробовал, ошибок нет. Возникают лишь в ассемблерной.
  • Vladimir Kladov © (03.10.10 16:11) [13]
    Осталось придумать на каком маленьком проекте проверить разницу. Сейчас что-нибудь придумаю.
  • MTsv DN (03.10.10 16:24) [14]
    Мда. Владимир, ну и обновление. Я даже установить не могу...только с флагами "USE_OLD_FLAGS; CMDACTIONS_RECORD"...как я понимаю отключают Ваши нововведения.

    ПОЛНАЯ НЕСОВМЕСТИМОСТЬ С НЕКОТОРЫМИ КОМПОНЕНТАМИ (ДУМАЮ СО МНОГИМИ)!!! В частности, SATabs, QProg и mdvComboBoxEx...ваще не компилятся.
  • MTsv DN (03.10.10 16:31) [15]
    ToolbarAddButtons - не работает. Последний параметр не добавляется...
  • Dufa © (03.10.10 16:48) [16]
    Эмм.. простейший проект.. падение при старте.. в районе:

       Result.Panel1 := NewPanel( Result.Form, esNone ).SetAlign ( caBottom ).SetSize( 0, 25 );

  • Vladimir Kladov © (03.10.10 16:50) [17]
    ToolbarAddButtons - это новая штука, только для использования вместе с grush. Параметр, в смысле кнопка? Так, проверил, вроде добавляется. Но это если grushcontrols новый. Сейчас выложу свежий.
  • Dufa © (03.10.10 16:51) [18]
    Это если с GRAPHCTL_XPSTYLES.. и с новым visual_xp_styles из 7 поста, а вот без GRAPHCTL_XPSTYLES - вроде работает
  • MTsv DN (03.10.10 16:57) [19]
    Проект скомпилить удалось...но от этого не легче.
    Директивы: KOL_MCK;GRAPHCTL_XPSTYLES;UNICODE_CTRLS;USE_OLD_FLAGS;CMDACTIONS_RECORD

    АСМ-версия:
    Вылет при создании в
    1. NewImageList -> DoInitCommonControls

    Поставил ПАС версию.
    В ПАС версии не работает:
    2. Free для PWStrList.
    3. TDirList.ScanDirectory

    Это пока
  • MTsv DN (03.10.10 16:59) [20]
    Нет, не кнопка, а битмап. Груши это хорошо, тока почему без использования груш используется их код.
  • Vladimir Kladov © (03.10.10 17:00) [21]
    Обновил KOL.zip и grushcontrols.
    А, понял, ToolbarAddButtons вызывает новая версия MCK, если видит, что надо бы поместить новые операторы для автосайза кнопок. Но это если TBButtonsWidth <> 0 или TBAutoSizeButtons, Вы их меняли?

    Буду visual_xp_styles смотреть, что там получилось.
  • MTsv DN (03.10.10 17:01) [22]
    > Вы их меняли?
    Естественно.

    > 3. TDirList.ScanDirectory
    Не работает из-за косяка, упомянутом в 2.
  • MTsv DN (03.10.10 17:10) [23]
    >> А, понял, ToolbarAddButtons вызывает новая версия MCK, если
    >> видит, что надо бы поместить новые операторы для автосайза
    >> кнопок. Но это если TBButtonsWidth <> 0 или TBAutoSizeButtons,
    >> Вы их меняли?
    > Естественно.

    Ни смена TBAutoSizeButtons, ни TBButtonsWidth <> 0 не решают проблему. Параметр битмап не добавляется.
  • MTsv DN (03.10.10 17:22) [24]
    Объединяя.
    1. С новым кодом не работают многие компоненты.
    2. В асм-версии не работает DoInitCommonControls
    3. В асм-версии не работает NewSplitterEx
    4. В асм- и пас-версии не работает Free для PWStrList (и соответственно все функции с ней, например TDirList.ScanDirectory)
    5. ToolbarAddButtons не добавляет последний параметр битмап. Добавление вручную 0, решает проблему компиляции до первого ребилда.

    p.s. Директивы: KOL_MCK;GRAPHCTL_XPSTYLES;UNICODE_CTRLS;USE_OLD_FLAGS;CMDACTIONS_RECORD
    p.p.s. Программу так запустить и не удалось!!!
  • Vladimir Kladov © (03.10.10 18:06) [25]
    Ну я примерно нашел, что это сочетание GRAPHCTL_XPSTYLE + asm. Нашел уже конкретно несколько мест, рою дальше. Думаю сегодня победить. (Чертова аэра, уже в глазах все мелькает).
  • Vladimir Kladov © (03.10.10 18:10) [26]
    Я так и думал, с выключенными темами не падает. Ну что же, придется потерпеть.
  • MTsv DN (03.10.10 18:19) [27]
    Владимир, посмотрите, пожалуйста 4ый пункт...как будет время
  • MTsv DN (03.10.10 18:27) [28]
    Вылет происходит при добавлении директивы UNICODE_CTRLS
  • Vladimir Kladov © (03.10.10 18:37) [29]
    Нашел, исправил KOL.zip, и с DoInitCommonControls тоже управился. Не помню, как раньше было, заменил в IFDEF на ASM_UNICODE. Я же так понимаю, проблема была именно с UNICODE_CTRLS.
  • Vladimir Kladov © (03.10.10 18:38) [30]
    MCK тоже новый лежит - с третьим параметром 0, когда битмапа нет. ImageList в ListView проверил, работает.
  • Vladimir Kladov © (03.10.10 18:40) [31]
    Наконец-то выключил темы. Как вы терпите этот мрак только.
  • Dufa © (03.10.10 18:50) [32]
    С GRAPHCTL_XPSTYLES теперь не падает при старте, но панель с Align = caBottom - исчезает..
    Без GRAPHCTL_XPSTYLES - вроде норм
  • Vladimir Kladov © (03.10.10 19:12) [33]
    У меня видно. Хотя не саму панель, а ее содержимое. Может, это камуфляж такой?
  • Dufa © (03.10.10 20:11) [34]

    > Может, это камуфляж такой?


    Нее.. на старой версии то работает нормально. А здесь панель целиком исчезает
  • Vladimir Kladov © (03.10.10 20:13) [35]
    Проверьте, что там не одновременно Align и Anchors используются.
  • MTsv DN (03.10.10 21:10) [36]
    2 Кладов
    http://zalil.ru/29762811 - два нерешенных бага
  • Vladimir Kladov © (03.10.10 21:25) [37]
    Скачал - распаковал - запустил  - упало.
    Открыл в Delphi - откомпилировал - запустил - все работает.
    Что не так?
  • MTsv DN (03.10.10 22:38) [38]
    А темы включены?
  • Vladimir Kladov © (04.10.10 04:21) [39]
    Да. Но нет опций, может в этом дело? Попробуйте у себе грохнуть файлы в папке проекта, распаковать и перекомпилировать. Если еще падает, надо снова забрать kol.zip и mck.zip. Больше пока нет идей.
  • MTsv DN (04.10.10 07:44) [40]
    > Да. Но нет опций, может в этом дело? Попробуйте у себе грохнуть
    > файлы в папке проекта, распаковать и перекомпилировать.
    > Если еще падает, надо снова забрать kol.zip и mck.zip. Больше
    > пока нет идей.

    Делал:
    Скачал снова kol.zip и mck.zip, отказался от сторонних компонентов и своих добавок, переставил KOL с ребилдом естесственно, также чистил проект и менял папку (на всякий случай).
    Итог: как падало, так и падает!!!

    Идея: Вы же говорили, что уменьшали размер TControl, как я понял пакованные данные ввели (не пинайте сильно, если ошибся), пользуетесь Delphi6, а я 2007, так может с менеджером памяти проблемы?
    Кстати, awkward [9], тоже упоминал про ошибку при уничтожении объектов.

    Запрос:
    У кого D2007 и ХР, проверьте, пожалуйста, проект на новом KOL и напишите о результатах.

    Проект: http://zalil.ru/29764390
  • MTsv DN (04.10.10 07:45) [41]
    P.S.
    > Но нет опций, может в этом дело?
    В смысле директив компиляции? Они есть просто я пользуюсь D2007, тючю они в другом файле.
  • MTsv DN (04.10.10 09:13) [42]
    > Запрос:
    > У кого D2007 и ХР, проверьте, пожалуйста, проект на новом KOL и напишите о результатах.

    Абсолютно "чистая" Windows XP SP3, Delphi 7 Lite, KOL v.3.00. Тестовый проект "валится". Используемые директивы: KOL_MCK; UNICODE_CTRLS. Отключение последней решает проблему.
  • MTsv DN (04.10.10 09:38) [43]
    Значится так.
    1. По поводу уничтожения PKOLStrList с UNICODE_CTRLS.
    Вылет здесь:
     {$IFDEF NIL_EVENTS}
     if Assigned( fOnDestroy ) then
     {$ENDIF}
     begin
       fOnDestroy( @Self );


    в третьем заходе, когда @fOnDestroy уже равно nil. Непонятно зачем было проверку в NIL_EVENTS ставить. Добавление директивы или удаление ее из кода решило проблему.
    2. По поводу непрорисовки комбобокса. Виноват (а точнее зависит от наличия) manifest-файла. Буду искать.
  • MTsv DN (04.10.10 10:10) [44]
    > 2. По поводу непрорисовки комбобокса. Виноват (а точнее зависит от наличия) manifest-файла. Буду искать.
    Не до конца, как мне кажется, додумано использование DummyProc. Ошибка отрисовки кнопки здесь:
    if Assigned(Sender.EV.fOnBitBtnDraw) then


    надо заменить на:
    if Assigned(Sender.EV.fOnBitBtnDraw)and (@Sender.EV.fOnBitBtnDraw <> @DummyProc123_0) then


    Комбик вообще вручную не отрисовывается, т.ч. возможно из-за этого и подвисает...
  • MTsv DN (04.10.10 10:12) [45]
    Да, кстати, забыл сказать. Надо еще директиву GRAPHCTL_XPSTYLES добавить.
  • MTsv DN (04.10.10 10:30) [46]
    В общем, что с комбиком не знаю.

    Проект, форма, апплет и один комбик на форме.
    Директивы: KOL_MCK;GRAPHCTL_XPSTYLES;UNICODE_CTRLS;NIL_EVENTS;USE_OLD_FLAGS;CMDACTIONS_RECO RD (а также без последних двух).
    Манифест-файл присутствует, темы включены.

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

    Хрень какая-то.
  • MTsv DN (04.10.10 11:05) [47]
    Также перестал работать NewDirChangeNotifier из KOLadd.

    Тестовый проект: http://zalil.ru/29764821
  • MTsv DN (04.10.10 11:10) [48]
    Похоже какая-то хрень с потоками...
  • Dufa © (04.10.10 11:31) [49]

    > Проверьте, что там не одновременно Align и Anchors используются.


    Оказывается исчезает не панель, а кнопки на ней! Либо они рисуются, либо еще что-то.. Хотя лабел и эдит на месте..


    > У кого D2007 и ХР, проверьте, пожалуйста, проект на новом
    > KOL и напишите о результатах.


    Turbo, XP - комбо бокс выглядит как УГ.. с GRAPHCTL_XPSTYLES и без него.

    Но если сделать   InitCommonControls; - все в норме
  • Dufa © (04.10.10 11:37) [50]
    Поставил UNICODE_CTRLS - падение где-то в TObj.Final...
    NIL_EVENTS решает проблему.. Вообще идея NIL_EVENTS как-то не нравится мне..

    Проект с NewDirChangeNotifier - сразу падение
  • Dufa © (04.10.10 11:51) [51]
    Во втором проблема с созданием потока. А там опять же NIL_EVENTS.. только там ошибочно стоят директивы {$IFDEF SAFE_CODE} вместо {$IFDEF NIL_EVENTS}

    NIL_EVENTS в топку...
  • MTsv DN (04.10.10 11:51) [52]
    Po povodu knopok, 4itaj post [44]
  • MTsv DN (04.10.10 11:52) [53]
    Ponjal. Respekt.
  • QAZ (04.10.10 14:10) [54]
    а мошт убрать все что связано с GRAPHCTL и XPSTYLES ибо нафиг надо ?
  • Dufa © (04.10.10 16:29) [55]
    QAZ, это почему нафиг надо? :D
  • Vladimir Kladov © (04.10.10 17:53) [56]
    Из NIL_EVENTS надо наверное убрать проверку fOnDestroy (и соответственно инициализацию) - с ним проблема. Этим займусь. Сам NOT NIL_EVENTS (по умолчанию не обязательно) пусть остается. Как вариант с чуть-чуть большим быстродействием (еще бы его увидеть, это быстродействие) чуть меньшим кодом (должно быть заметно при использовании именно паскаль-версии, больно компилятор умный, тратит на проверку Assigned по 12 байт кода).

    По поводу combobox + XPSTYLES - нужен InitCommonControls ? Это несколько непонятно, но почему бы и нет, если надо. А с изображением кнопок проблему решает? Вот только не получается у меня получить неправильный комбо. Опции в проекте KOL_MCK;nnUNICODE_CTRLS;nnPAS_VERSION;GRAPHCTL_XPSTYLES (nn-пробовал отключать вместе и по очереди). Манифест на месте, аэра включена, InitCommonControls не вызывался. Комбо на форме 1 штука (предыдущий test). Комбо выглядит чуть не так, как без XPSTYLES (шрифт другой), но в общем-то не так уж крив.

    Еще один момент с комбой: компилирую в старой версии kol+visual_xp_styles - результат тот же, комбо выглядит в старой версии точно так же (при темах+манифесте).

    По NewDirChange ошибку нашел с SAFE_CODE. Кстати после просмотра в ProcessExplorer что делается при частом создании этих объектов решил, что лучше вообще вернуть самый первоначальный вариант без NewThreadAutoFree, а в NewThreadAutoFree завершать нить через TerminateThread. Иначе потоки копятся и никуда не уходят (в состоянии Stopped).

    В общем, я сейчас положил kol.zip + mck.zip + koladd.zip со всеми поправками. Пометка в главных пас-файлах - версия 3.00.A.
  • QAZ (04.10.10 19:23) [57]

    >  это почему нафиг надо?

    ну потому что GRAPHCTL актуален мог быть онли винда 95\98
    а без XPSTYLES и так все работает,достаточно манифеста
    ну а рисовать кнопки програмно ,заместо винды - смешно и очень велосипедно
  • Vladimir Kladov © (04.10.10 19:57) [58]
    2QAZ: Вы не разобрались, а я не исправил комментарий. Первоначально были придуманы графические контролы. Кстати, вполне себе даже актуальные, хотя и в редких случаях. Например, 100 контролов на форме будут тормозить однозначно. Графических - не будут. Потом были дописаны visual_xp_styles. И приспособлены, чтобы обеспечить более корректную отрисовку некоторых оконных контролов, а заодно и реагировать на изменение темы. Не совсем в стиле KOL (включая только код для того, что есть), а скорее в стиле VCL (включить на всякий случай все, что только вдруг да понадобится), но это не ко мне, а к авторам. В примерах на баги нет ни одного графического контрола.
  • MTsv DN (04.10.10 20:48) [59]
    > а без XPSTYLES и так все работает,достаточно манифеста ну а рисовать кнопки програмно ,заместо винды - смешно и очень велосипедно
    2 QAZ
    1. Приведите пример bitbtn на API, чтобы было только манифеста достаточно. Может я просто чего не так понял с этим контролом...
    2. Приведите пример grоupbox на API, чтобы не было зачеркивания метки.
    3. А все остальные контролы, если мне склероз не изменяет, были написаны с помощью, виндовых API Themes, кстати, дабы поддерживалась прозрачность в KOL.

    > По поводу combobox + XPSTYLES - нужен InitCommonControls
    Проверю.

    > А с изображением кнопок проблему решает?
    Решает правка в visual_xp_styles.inc (пост №44)

    > В общем, я сейчас положил kol.zip + mck.zip + koladd.zip со всеми поправками. Пометка в главных пас-файлах - версия 3.00.A.

    Проверить смогу только завтра...
  • QAZ (04.10.10 22:33) [60]

    > Приведите пример bitbtn на API, чтобы было только манифеста
    > достаточно. Может я просто чего не так понял с этим контролом.

    BCM_SETIMAGELIST

    > Приведите пример grоupbox на API, чтобы не было зачеркивания
    > метки.

    не в курсе о чем реч, но в винде то проблем не возникает ,значит можно Ж)
  • MTsv DN (05.10.10 10:46) [61]
    >> По поводу combobox + XPSTYLES - нужен InitCommonControls
    > Проверю.

    Действительно. Почему не знаю.
    Для себя в kol.pas сделал так:
    initialization
    InitCommonControls;
    {$IFDEF GRAPHCTL_XPSTYLES}

  • MTsv DN (05.10.10 11:04) [62]
    >> Приведите пример bitbtn на API, чтобы было только манифеста достаточно. Может я просто чего не так понял с этим контролом.
    >
    > BCM_SETIMAGELIST

    Снимаю шляпу. До этого не докопал.
    Посмотрю что получится. Единственное, что меня смущает, что для каждого состояния кнопки нужно будет свое изображение (hot, disable, enable), наверное, а это соответственно размер. Сейчас, хоть и велосипед, с одним имэйджем.

    >> Приведите пример grоupbox на API, чтобы не было зачеркивания метки.
    >
    > не в курсе о чем реч, но в винде то проблем не возникает,значит можно Ж)

    Не могу ссылку пока найти.
  • MTsv DN (05.10.10 11:50) [63]
    При переходе на новый MCK теряются закладки TabControl'a
  • QAZ (05.10.10 12:47) [64]

    > нужно будет свое изображение (hot, disable, enable), наверное

    необязательно если картинка одна то она на все состояния
    также есть выравнивание по любому краю текста и картинки
  • QAZ (05.10.10 12:53) [65]

    > Например, 100 контролов на форме будут тормозить однозначно.
    >  Графических - не будут

    а нафига вменяемому прогеру стока контролов? мошт ему тогда чемто другим заняца Ж)
    я непротив графических контролов в принципе,т.е. конкретно самодельных, но вот перерисовывать стандартные.... вобщем хз
  • Vladimir Kladov © (05.10.10 15:50) [66]
    нафига вменяемому прогеру стока контролов?
    У меня тормоза были заметны на 16 эдитах (и паре комбобоксов), которые отображали состояние регистров эмулируемого процессора, в режиме трассировки это мешало. Речь не об одиночном нажатии, когда все просто перерисовалось один раз, а о трассе или удержании кнопки типа F8.

    100 контролов, это совсем не предел, если сложная форма ввода. Требование на число полей ввода в форме определяет не программист, а заказчик. Ему требуется, чтобы было 100, значит, надо делать 100.

    И как уже говорилось visual styles давно уже для других целей. В VCL групбокс перерисовывает код из VCL еще с тех пор, когда это был Borland Delphi. В API его делать - перечеркивается, если прозрачный. Так что проблемы есть.

    Решение с BCM_SETIMAGELIST плохо тем, что оно действительно только с XP. На работе я работаю с NT4 и Windows2K, например. Впрочем, для картинки на кнопке есть способы и получше, чем bitbtn. Для чего имеется MouseTransparent в KOL и AcceptChildren в MCK. Это решение вообще универсальное, и под темами XP кнопка по теме, и под NT4 кнопка с картинкой и классическая одновременно.
  • MTsv DN (05.10.10 18:25) [67]
    2 QAZ
    Владимир, кстати, прав. Темы-то появились в ХР, но bitbtn и в более ранних версиях нужен...

    2 Кладов
    Владимир, вот еще один баг, в довесок к [63]. Если табконтрол на дочерней форме, то при закрытии формы во второй раз вылет с ошибкой 204.
    Тестовый проект: http://zalil.ru/29772139
    Для получения бага надо: нажать кнопку первый раз, закрыть доч.окно, нажать еще раз кнопку и закрыть окно (при закрытии вылет).

    2 All
    В дополнение к [63]. Закладки не теряются, просто MCK генерит другой код. Восстановление закладок вручную:
    1. В dfm-файле с табконтролом заменить все таб-панели на таб-страницы. Например:
    object TabControl1_Tab1: TKOLPanel


    ->
    object TabControl1_Tab1: TKOLTabPage


    2. В inc-файле формы, например, Unit2_1.inc, добавить константы табов и заменить строку создания табконтрола (я делал все это из бэкапа, у кого нет то ручками).
    Например:
    const _TabControl1_Tab0 = 0; // Name Первой Закладки В Старом Проекте
    const _TabControl1_Tab1 = 1;  // Name Второй Закладки В Старом Проекте


    Result.TabControl1 := NewTabControl( Result.Form, [  ], [  ], nil, 0 ).SetAlign ( caClient );


    ->
    Result.TabControl1 := NewTabControl( Result.Form, [ 'Tab0', 'Tab1' ], [  ], nil, 0 ).SetAlign ( caClient );

  • Vladimir Kladov © (05.10.10 20:04) [68]
    С табконтролом я протормозил. Как-то так получилось, что во всех проектах он не использовался. Дело, однако, не в том, что код иначе генерируется, и если Вы помните, исправлять код в UnitXXX_1.inc бессмысленно, т.к. этот код генерируется в MCK.

    Пока решение именно такое: открыть руками dfm (в блокноте), найти объекты закладок на уровне, следующем за объектом TKOLTabControl, и переименовать их тип из TKOLPanel в TKOLTabPage. После этого открыть проект и на вопрос Delphi, следует ли скорректировать декларации, ответить утвердительно.

    Надо попробовать сделать автоматическую конвертацию.
  • MTsv DN (06.10.10 10:41) [69]
    2 Кладов
    А что по поводу вылета при закрытии доч.формы с табконтролом?
  • Vladimir Kladov © (06.10.10 16:50) [70]
    Не вылетело. Или давайте примерный код.

    Я выложил 3.00.B - kol.zip и mck.zip - миграция TabControl полу-автомат. Образуется некоторое число пустых закладок с теми же заголовками, их надо удалить вручную. Полностью автоматическое удаление дает странные результаты: все компилируется и сохраняется, но после повторного открытия формы какой-то затык, и форма не создается. Не стал разбираться глубоко, такой вариант, я думаю, вполне приемлем.
  • MTsv DN (06.10.10 20:21) [71]
    2 Кладов
    Какой код? Я тестовый проект дал. Сообщение [67]. И описание проблемы.
  • Vladimir Kladov © (06.10.10 21:21) [72]
    Да, я его скачивал. Но нет, пока не смотрел. Вроде и правда падает. Завтра смотреть буду.
  • Jon © (07.10.10 03:21) [73]
    Version 3.00 does not work with ActiveKOL

    Result with v2.94++:


    dcc32.exe -b ActiveKOL.pas

    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    KOLDEF.INC(233)
    KOLDEF.INC(233)
    delphidef.inc(48)
    delphicommctrl.inc(1569)
    KOL_ansi.inc(2307)
    KOL_ansi.inc(2307)
    KOL_ASM.inc(13239)
    KOL.pas(62866)
    KOLDEF.INC(233)
    KOLDEF.INC(233)
    err.pas(1198)
    KOLComObj.pas(2353)
    KOLDEF.INC(233)
    ActiveKOL.pas(2624)
    89670 lines, 0.62 seconds, 15415 bytes code, 112 bytes data.



    Result with v3.00b:


    dcc32.exe -b ActiveKOL.pas

    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    KOLDEF.INC(253)
    KOLDEF.INC(253)
    delphidef.inc(48)
    delphicommctrl.inc(1569)
    KOL_ansi.inc(2307)
    KOL_ansi.inc(2307)
    KOL_ASM.inc(15343)
    KOL.pas(63340)
    KOLDEF.INC(253)
    KOLDEF.INC(253)
    err.pas(1198)
    KOLComObj.pas(2353)
    KOLDEF.INC(253)
    ActiveKOL.pas(315) Error: Field or method identifier expected
    ActiveKOL.pas(316) Error: Field or method identifier expected
    ActiveKOL.pas(317) Error: Field or method identifier expected
    ActiveKOL.pas(318) Error: Field or method identifier expected
    ActiveKOL.pas(319) Error: Field or method identifier expected
    ActiveKOL.pas(320) Error: Field or method identifier expected
    ActiveKOL.pas(321) Error: Field or method identifier expected
    ActiveKOL.pas(322) Error: Field or method identifier expected
    ActiveKOL.pas(323) Error: Field or method identifier expected
    ActiveKOL.pas(340) Error: Field or method identifier expected
    ActiveKOL.pas(341) Error: Field or method identifier expected
    ActiveKOL.pas(828) Error: Undeclared identifier: 'fVisible'
    ActiveKOL.pas(828) Error: Operator not applicable to this operand type
    ActiveKOL.pas(950) Error: Missing operator or semicolon
    ActiveKOL.pas(1325) Error: Undeclared identifier: 'fIsControl'
    ActiveKOL.pas(1327) Error: Incompatible types: 'TStyle' and 'Integer'
    ActiveKOL.pas(1369) Error: Undeclared identifier: 'fVisible'
    ActiveKOL.pas(1454) Error: Undeclared identifier: 'FOnKeyDown'
    ActiveKOL.pas(1454) Error: Incompatible types
    ActiveKOL.pas(1459) Error: Undeclared identifier: 'FOnChar'
    ActiveKOL.pas(1464) Error: Undeclared identifier: 'FOnKeyUp'
    ActiveKOL.pas(1550) Error: Undeclared identifier: 'fOnMouseDblClk'
    ActiveKOL.pas(1550) Error: Not enough actual parameters
    ActiveKOL.pas(1606) Error: Undeclared identifier: 'fOnChar'
    ActiveKOL.pas(1606) Error: Not enough actual parameters
    ActiveKOL.pas(1743) Error: Undeclared identifier: 'fCurrentControl'
    ActiveKOL.pas(1743) Error: Operator not applicable to this operand type
    ActiveKOL.pas(1744) Error: Undeclared identifier: 'fCurrentControl'
    ActiveKOL.pas(1744) Error: Operator not applicable to this operand type
    ActiveKOL.pas(1745) Error: Undeclared identifier: 'fCurrentControl'
    ActiveKOL.pas(1745) Error: Missing operator or semicolon
    ActiveKOL.pas(1746) Error: Undeclared identifier: 'fCurrentControl'
    ActiveKOL.pas(1748) Error: Undeclared identifier: 'fCurrentControl'
    ActiveKOL.pas(1748) Error: Operator not applicable to this operand type
    ActiveKOL.pas(1749) Error: Undeclared identifier: 'fCurrentControl'
    ActiveKOL.pas(2624)
    ActiveKOL.pas(406) Error: Unsatisfied forward or external declaration: 'TOleServer.InitServerData'
    ActiveKOL.pas(431) Error: Unsatisfied forward or external declaration: 'TOleServer.Connect'
    ActiveKOL.pas(432) Error: Unsatisfied forward or external declaration: 'TOleServer.Disconnect'

  • QAZ (07.10.10 12:03) [74]

    > Решение с BCM_SETIMAGELIST плохо тем, что оно действительно
    > только с XP

    ну так для олда есть BM_SETIMAGE +\- BS_BITMAP,BS_ICON
  • Dy1 (07.10.10 12:06) [75]
    > > Решение с BCM_SETIMAGELIST плохо тем, что оно действительно
    > > только с XP
    > ну так для олда есть BM_SETIMAGE +\- BS_BITMAP,BS_ICON

    для какого олда? Я сейчас встречаю w2k и выше.
  • QAZ (07.10.10 12:10) [76]

    > для какого олда?

    от 95\nt4 до xp
  • Vladimir Kladov © (07.10.10 15:54) [77]
    Исправил падение (пример с таб-контролом). Причина не в соственно таб-контроле, в общем нашел.

    Новые версии 3.00.C на сайте: KOL.zip, MCK.zip, ActiveKOL.zip, KOLadd.zip.
  • Jon © (07.10.10 20:54) [78]
    Error with tooltips:


    dcc32.exe -b -dUSE_MHTOOLTIP KOL.pas

    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    KOLDEF.INC(253)
    KOLDEF.INC(253)
    delphidef.inc(48)
    delphicommctrl.inc(1569)
    KOL_ansi.inc(2307)
    KOLMHToolTip.pas(909)
    KOLMHToolTip.pas(909)
    KOLMHToolTip.pas(909)
    KOLMHToolTip.pas(909)
    KOLMHToolTip.pas(909)
    KOLMHToolTip.pas(37) Error: Undeclared identifier: 'TMHHint'
    KOL_ansi.inc(2307)
    KOLMHToolTip.pas(898) Error: Undeclared identifier: 'NewHint'
    KOLMHToolTip.pas(909)
    KOLMHToolTip.pas(190) Error: Undeclared identifier: 'PMHToolTip'
    KOLMHToolTip.pas(199) Error: Incompatible types
    KOLMHToolTip.pas(266) Error: Function needs result type
    KOLMHToolTip.pas(266) Error: '=' expected but ')' found
    KOLMHToolTip.pas(267) Error: Missing operator or semicolon
    KOLMHToolTip.pas(268) Error: Undeclared identifier: 'fHandle'
    KOLMHToolTip.pas(272) Error: Identifier redeclared: 'TMHToolTip'
    KOLMHToolTip.pas(272) Error: '=' expected but ',' found
    KOLMHToolTip.pas(272) Error: '=' expected but ')' found
    KOLMHToolTip.pas(273) Error: Expression expected but 'BEGIN' found
    KOLMHToolTip.pas(274) Error: Undeclared identifier: 'handle'
    KOLMHToolTip.pas(278) Error: Function needs result type
    KOLMHToolTip.pas(278) Error: '=' expected but ')' found
    KOLMHToolTip.pas(279) Error: Missing operator or semicolon
    KOLMHToolTip.pas(280) Error: Undeclared identifier: 'handle'
    KOLMHToolTip.pas(283) Error: Identifier redeclared: 'TMHToolTip'
    KOLMHToolTip.pas(283) Error: '=' expected but ';' found
    KOLMHToolTip.pas(283) Error: '=' expected but ')' found
    KOLMHToolTip.pas(285) Error: Undeclared identifier: 'handle'
    KOLMHToolTip.pas(288) Error: Function needs result type
    KOLMHToolTip.pas(290) Error: Undeclared identifier: 'fHandle'
    KOLMHToolTip.pas(293) Error: Identifier redeclared: 'TMHToolTip'
    KOLMHToolTip.pas(293) Error: '=' expected but ')' found
    KOLMHToolTip.pas(295) Error: Undeclared identifier: 'fHandle'
    KOLMHToolTip.pas(323) Error: Function needs result type
    KOLMHToolTip.pas(325) Error: Undeclared identifier: 'fHandle'
    KOLMHToolTip.pas(328) Error: Identifier redeclared: 'TMHToolTip'
    KOLMHToolTip.pas(328) Error: '=' expected but ')' found
    KOLMHToolTip.pas(329) Error: ';' expected but 'BEGIN' found
    KOLMHToolTip.pas(330) Error: Undeclared identifier: 'fHandle'
    KOLMHToolTip.pas(333) Error: Function needs result type
    KOLMHToolTip.pas(339) Error: Identifier redeclared: 'TMHToolTip'
    KOLMHToolTip.pas(339) Error: '=' expected but ')' found
    KOLMHToolTip.pas(341) Error: Undeclared identifier: 'fHandle'
    KOLMHToolTip.pas(344) Error: Identifier redeclared: 'TMHToolTip'
    KOLMHToolTip.pas(346) Error: Undeclared identifier: 'fHandle'
    KOLMHToolTip.pas(349) Error: Identifier redeclared: 'TMHToolTip'
    KOLMHToolTip.pas(351) Error: Undeclared identifier: 'fHandle'
    KOLMHToolTip.pas(408) Error: Identifier redeclared: 'TMHToolTip'
    KOLMHToolTip.pas(410) Error: This form of method call only allowed in methods of derived types
    KOLMHToolTip.pas(411) Error: Undeclared identifier: 'fHandle'
    KOLMHToolTip.pas(416) Error: Object type required
    KOLMHToolTip.pas(418) Error: ';' expected but 'WITH' found
    KOLMHToolTip.pas(420) Error: Undeclared identifier: 'Parent'
    KOLMHToolTip.pas(421) Error: Undeclared identifier: 'ToolTip'
    KOLMHToolTip.pas(422) Error: Undeclared identifier: 'HasTool'
    KOLMHToolTip.pas(423) Error: '.' expected but ';' found
    KOLMHToolTip.pas(425) Warning: Text after final 'END.' - ignored by compiler
    KOLMHToolTip.pas(909)
    KOL_ASM.inc(15344)
    KOL.pas(63679)
    KOL.pas(705) Error: Unsatisfied forward or external declaration: 'TObj.Destroy'
    KOL.pas(725) Error: Unsatisfied forward or external declaration: 'TObj.RefDec'
    KOL.pas(774) Error: Unsatisfied forward or external declaration: 'TObj.Create'
    KOL.pas(790) Error: Unsatisfied forward or external declaration: 'TObj.Add2AutoFree'
    KOL.pas(795) Error: Unsatisfied forward or external declaration: 'TObj.Add2AutoFreeEx'
    KOL.pas(799) Error: Unsatisfied forward or external declaration: 'TObj.RemoveFromAutoFree'
    KOL.pas(837) Error: Unsatisfied forward or external declaration: 'TList.Destroy'
    KOL.pas(840) Error: Unsatisfied forward or external declaration: 'TList.SetCapacity'
    KOL.pas(841) Error: Unsatisfied forward or external declaration: 'TList.Get'
    KOL.pas(842) Error: Unsatisfied forward or external declaration: 'TList.Put'
    KOL.pas(303) Fatal: Compilation terminated; too many errors

  • Jon © (08.10.10 14:24) [79]
    Event OnDropFiles not working too.
  • Dufa © (08.10.10 15:08) [80]
    Там надо добавить лишь "EV."
  • Vladimir Kladov © (08.10.10 22:56) [81]
    3.00.D
  • Vladimir Kladov © (08.10.10 23:22) [82]
    D:\KOL>"d:\delphi2010\embarcadero\Rad Studio\7.0\bin\dcc32.exe" -b -dUSE_MHTOOLT
    IP KOL.pas
    Embarcadero Delphi for Win32 compiler version 21.0
    Copyright (c) 1983,2009 Embarcadero Technologies, Inc.
    KOLDEF.INC(253)
    KOLDEF.INC(253)
    delphidef.inc(48)
    delphicommctrl.inc(1569)
    KOL_ansi.inc(2317)
    KOLMHToolTip.pas(944)
    KOLMHToolTip.pas(944)
    KOLMHToolTip.pas(944)
    KOLMHToolTip.pas(944)
    KOLMHToolTip.pas(944)
    MCKfakeClasses200x.inc(51)
    KOL_ansi.inc(2317)
    KOLMHToolTip.pas(944)
    KOLMHToolTip.pas(944)
    KOL_ASM.inc(15344)
    KOL.pas(63794)
    92540 lines, 1.25 seconds, 233183 bytes code, 68512 bytes data.

  • Jon © (09.10.10 00:45) [83]

    > Event OnDropFiles not working too.


    > Там надо добавить лишь "EV."


    No, the event does not fire. Tested with v3.00d too.
  • Jon © (09.10.10 01:11) [84]
    Sorry Vladimir, v3.00d does not compile with UNICODE_CTRLS:


    dcc32.exe -b -dUNICODE_CTRLS KOL.pas

    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    KOLDEF.INC(253)
    KOLDEF.INC(253)
    delphidef.inc(48)
    delphicommctrl.inc(1569)
    KOL_unicode.inc(1185)
    KOL_unicode.inc(1185)
    KOL.pas(19674) Error: Incompatible types: 'WideChar' and 'Char'
    KOL.pas(19896) Error: Incompatible types: 'WideChar' and 'Char'
    KOL.pas(19899) Error: Incompatible types: 'WideChar' and 'Char'
    KOL.pas(19902) Error: Incompatible types: 'WideChar' and 'Char'
    KOL_ASM.inc(2158) Error: Declaration of 'TextArea' differs from previous declaration
    KOL_ASM.inc(2164) Error: Undeclared identifier: 'TextExtent'
    KOL_ASM.inc(2451) Error: Identifier redeclared: 'Int2Hex'
    KOL_ASM.inc(2534) Error: Previous declaration of 'Hex2Int' was not marked with the 'overload' directive
    KOL_ASM.inc(2586) Error: Identifier redeclared: 'Int2Str'
    KOL_ASM.inc(15344)
    KOL.pas(63794)

  • Jon © (09.10.10 01:37) [85]
    Which version of KOLMHToolTip.pas are you using?
    Here is the latest: http://zalil.ru/29788607
    Can you add the correct one to the KOL release package please.
  • MTsv DN (09.10.10 13:26) [86]
    Версия 3.00.D
    ОШИБКИ ПРИ КОМПИЛЯЦИИ ПРОЕКТА


    mckCtrls.pas
    1.
    SL.Insert( IndexOfBeginLine, 'const ToolbarButtonsArray_' + Name + ': array[' +
              '0..' + IntToStr(Buttons_Count-1) + '] of PKOLChar = (' +
              Buttons_List + ');');



    KOL_ASM.inc
    1.
    procedure TCanvas.TextArea(const Text: KOLString; var Sz: TSize;
     var P0: TPoint);


    2.
    function Int2Hex( Value : DWord; Digits : Integer ) : KOLString;


    3.
    function Hex2Int( const Value : KOLString) : Integer;


    4.
    function Int2Str( Value : Integer ) : KOLString;



    KOL.PAS
    1.
    {$IFDEF ASM_VERSION}{$ELSE ASM_VERSION} //Pascal (mixed)
    function Int2Hex( Value : DWord; Digits : Integer ) : KOLString;


    2.
    {$IFDEF ASM_VERSION}{$ELSE ASM_VERSION} //Pascal
    function Hex2Int( const Value : KOLString) : Integer;


    3.
    {$IFDEF ASM_VERSION}{$ELSE ASM_VERSION} //Pascal
    function Int2Str( Value : Integer ) : KOLString;


    Другие ошибки
    1.
    procedure TForm1.KOLFormFormCreate(Sender: PObj);
    begin
    // Clear работает для этих элементов
    ListView1.Clear;
    ComboBox1.Clear;
    TreeView1.Clear;
    Toolbar1.Clear;

    // Clear НЕ работает для этих элементов, т.к. aClear = nil
    RichEdit1.Clear;
    Memo1.Clear;
    EditBox1.Clear;
    Label1.Clear;
    ListBox1.Clear;
    end;



    ВОПРОСЫ
    1. Зачем в StrReplace сделали KOLString? Для этих целей есть KOLStrReplace?
  • Vladimir Kladov © (09.10.10 14:28) [87]
    3.00.F

    Зачем в StrReplace сделали KOLString? Для этих целей есть KOLStrReplace? Автоматически. Слишком много было предупреждений от D2010. Вернул.

    По поводу MHToolTip. Новую версию я выложил. Просьба к авторам дальнейших версий учесть, что блок {$IFDEF interface} был изменен на {$IFDEF interface_part}.
  • Dufa © (09.10.10 14:36) [88]
    Может v3.00.E?

    Владимир, внесите фикс для 32битных битмапов, чтоб не терялся альфа канал. Давно писал об этом, а фикса все нету...


    function _GetDIBPixelsTrueColorWithAlpha( Bmp: PBitmap; X, Y: Integer ): TColor;
    var
     Pixel: DWORD;
     RGB:   TRGBQuad;
    begin
     Pixel := PDWORD( Integer(Bmp.fScanLine0) + Y * Bmp.fScanLineDelta +
                      X * Bmp.fBytesPerPixel )^ and $FFFFFFFF;
     RGB := TRGBQuad(Pixel);
     Swap(RGB.rgbBlue, RGB.rgbRed);
     Result := TColor( RGB );
    end;

    ...
    function TBitmap.GetDIBPixels(X, Y: Integer): TColor;
    ...
         pf32bit:
           begin
             fPixelsPerByteMask := 1;
             fBytesPerPixel := 4;
             fGetDIBPixels := _GetDIBPixelsTrueColorWithAlpha;
           end;
    ...

    procedure _SetDIBPixelsTrueColorWithAlpha(Bmp: PBitmap; X, Y: Integer; Value: TColor);
    var RGB: TRGBQuad;
       Pos: PDWord;
    begin
     RGB := TRGBQuad(Value);
     Swap(RGB.rgbBlue, RGB.rgbRed);

     Pos := PDWORD( Integer(Bmp.fScanLine0) + Y * Bmp.fScanLineDelta
                    + X * Bmp.fBytesPerPixel );
     Pos^ := Pos^ or DWORD(RGB);
    end;

    ...
    procedure TBitmap.SetDIBPixels(X, Y: Integer; const Value: TColor);
    ...
         pf32bit:
           begin
             fPixelsPerByteMask := 1;
             fBytesPerPixel := 4;
             fSetDIBPixels := _SetDIBPixelsTrueColorWithAlpha;
           end;
    ...


  • MTsv DN (09.10.10 15:57) [89]
    2 Кладов
    Владимир, повторяю ошибки которые вылазят при UNICODE_CTRLS:
    Версия 3.00.F
    mckCtrls.pas
    1.
    SL.Insert( IndexOfBeginLine, 'const ToolbarButtonsArray_' + Name + ': array[' +
             '0..' + IntToStr(Buttons_Count-1) + '] of PKOLChar = (' +
             Buttons_List + ');');



    KOL_ASM.inc
    1.
    procedure TCanvas.TextArea(const Text: KOLString; var Sz: TSize;
    var P0: TPoint);


    2.
    function Int2Hex( Value : DWord; Digits : Integer ) : KOLString;


    3.
    function Hex2Int( const Value : KOLString) : Integer;


    4.
    function Int2Str( Value : Integer ) : KOLString;



    KOL.PAS
    1.
    {$IFDEF ASM_VERSION}{$ELSE ASM_VERSION} //Pascal (mixed)
    function Int2Hex( Value : DWord; Digits : Integer ) : KOLString;


    2.
    {$IFDEF ASM_VERSION}{$ELSE ASM_VERSION} //Pascal
    function Hex2Int( const Value : KOLString) : Integer;


    3.
    {$IFDEF ASM_VERSION}{$ELSE ASM_VERSION} //Pascal
    function Int2Str( Value : Integer ) : KOLString;



    Жирным выделено то, что надо исправить...либо объявление в KOL.PAS.
  • MTsv DN (09.10.10 15:59) [90]
    Ошибся чуток:
    KOL.PAS
    1.
    {$IFDEF ASM_VERSION}{$ELSE ASM_VERSION} //Pascal (mixed)
    function Int2Hex( Value : DWord; Digits : Integer ) : KOLString;



    2.
    {$IFDEF ASM_VERSION}{$ELSE ASM_VERSION} //Pascal
    function Hex2Int( const Value : KOLString) : Integer;


    3.
    {$IFDEF ASM_VERSION}{$ELSE ASM_VERSION} //Pascal
    function Int2Str( Value : Integer ) : KOLString;

  • Dufa © (09.10.10 16:03) [91]
    Владимир, а для чего поменяли этот участок кода?


    function TThread.Execute: integer;
    ...
     if F_AutoFree then
     begin
        H := FHandle;
        FHandle := 0;
        Free;
        TerminateThread( H, 0 );
     end;



    старый вариант нормально работает
  • MTsv DN (09.10.10 16:18) [92]
    А зачем в Int2Str и прочих AnsiString заменено на KOLString?
  • MTsv DN (09.10.10 16:23) [93]
    Думаете там юникоде символы будут?
  • Vladimir Kladov © (09.10.10 16:31) [94]
    Где они вылазят? У меня ничего не вылазит на D2010 и D6.

    {$IFDEF ASM_VERSION}
    Надо именно ASM_UNICODE, если работа идет с KOLString.

    зачем в Int2Str и прочих AnsiString заменено на KOLStringДля D2010. Для чистого AnsiString в проекте с UNICODE_CTRLS и D2009+ осталась для Int2Str еще куча аналогов: Int2PChar, UInt2Str, Int2StrEx, ... а без UNICODE_CTRLS KOLString = AnsiString. Можно и вернуть, но только так, чтобы D2010 не возмущался.

    if F_AutoFree then
    begin
       H := FHandle;
       FHandle := 0;
       Free;
       TerminateThread( H, 0 );
    end;


    Нет, не работал прежний вариант нормально. Потоки не удаляются, по крайней мере в Win7, и продолжают висеть. Особенно это заметно, если создавать и убивать по 100 раз в секунду.
  • Vladimir Kladov © (09.10.10 16:33) [95]
    Думаете там юникоде символы будут? Уверен, что будут. Они занимают 2 байта. Асм-код надо переделывать. В Windows не используется UTF-8.
  • Dufa © (09.10.10 16:57) [96]

    > Нет, не работал прежний вариант нормально. Потоки не удаляются,
    >  по крайней мере в Win7, и продолжают висеть. Особенно это
    > заметно, если создавать и убивать по 100 раз в секунду.


    Вот мой тестовый проект

    program Project1;
    {$APPTYPE CONSOLE}

    uses
     Windows, KOL;

    function thread(dummy, Sender: PThread): Integer;
    begin
     Sleep(5000);
     Result := 0;
    end;  

    var
     i: Integer;
    begin
     for I := 0 to 99 do
       NewThreadAutoFree(TOnThreadExecute(MakeMethod(nil, @thread)));

     readln;
    end.



    Все нормально пашет. Покажите тот в котором прежний вариант не нормален
  • Dufa © (09.10.10 17:38) [97]
    Владимир, и еще есть к вам просьба. У вас в разделе скачать-колмск висит ссылка на свн nekki.ru, по-моему он давно не работает, можете заменить на рабочую http://sourceforge.net/projects/kolmck/
  • Vladimir Kladov © (09.10.10 17:44) [98]
    А вот почему у меня нет доступа к svn.

    А чем Вы смотрите, что все нормально пашет? Я, например, process explorer'ом (SysInternals) смотрел.
  • Dufa © (09.10.10 18:34) [99]

    > А вот почему у меня нет доступа к svn.


    Дык сколько раз я предлагал сделать вам доступ и каждый раз вы отказывались ссылаясь на неработоспособность свн клиентов...
    Зарегтесь на sourceforge.net и сделаю права вам..


    > А чем Вы смотрите, что все нормально пашет?


    Им же и смотрю..

    запустил..
    смортю - 101 поток...
    жду примерно 5 сек..
    и остается 1 поток
  • Vladimir Kladov © (09.10.10 20:07) [100]
    Да, я сейчас посмотрел на том большом проекте, больше такого нет (если строку закомментарить). Не знаю, что это было. Какой-то глюк промежуточной версии.

    И что, на SourceForge через svn-клиентов работает? Или только web?
  • Dufa © (09.10.10 20:11) [101]

    > Да, я сейчас посмотрел на том большом проекте, больше такого
    > нет (если строку закомментарить). Не знаю, что это было.
    >  Какой-то глюк промежуточной версии.


    а может ждали мало..


    > И что, на SourceForge через svn-клиентов работает? Или только
    > web?

    Скачать можно и без клиента (по файлово или через tarball), а вот чтоб заливать надо свн клиент
  • Dufa © (09.10.10 20:12) [102]
    Или вы про зарегаца? Зарегаца можно по веб..
  • Vladimir Kladov © (09.10.10 20:46) [103]
    а может ждали мало Ждал столько же, сколько и со строчкой TerminateProcess, но в случае Terminate лишних вообще не появлялось. Поставлю в ifdef-скобки как обычно. По умолчанию без Terminate.

    Так, D2010 приказал долго жить. При очередном запуске поломался, не смог загрузить какой-то пакадж, и теперь при любом запуске стоит в процессах около секунды и исчезает. Ремонт и переустановка не помогла. Проверять его синтаксические искусы больше не на чем. Разве только D2009+Upd1 поставить.
  • Jon © (10.10.10 01:19) [104]
    Thank you - with v3.00f and updated KOLMHToolTip.pas the USE_MHTOOLTIP directive is working

    Still a problem with UNICODE_CTRLS on WnXP using D7:


    dcc32.exe -b KOL.pas -dUNICODE_CTRLS

    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    KOLDEF.INC(253)
    KOLDEF.INC(253)
    delphidef.inc(48)
    delphicommctrl.inc(1569)
    KOL_unicode.inc(1185)
    KOL_unicode.inc(1185)
    KOL_ASM.inc(2158) Error: Declaration of 'TextArea' differs from previous declaration
    KOL_ASM.inc(2164) Error: Undeclared identifier: 'TextExtent'
    KOL_ASM.inc(2451) Error: Identifier redeclared: 'Int2Hex'
    KOL_ASM.inc(2534) Error: Previous declaration of 'Hex2Int' was not marked with the 'overload' directive
    KOL_ASM.inc(2586) Error: Identifier redeclared: 'Int2Str'
    KOL_ASM.inc(15344)
    KOL.pas(63799)



    And also, still not working is the OnDropFiles event.
  • Jon © (10.10.10 04:36) [105]
    Together with the fixes in [89] and [90] from MTsv DN, also need to fix ActiveKOL:


    procedure TOleCtl.StandardEvent(DispID: TDispID; var Params: TDispParams);
    ...
         DISPID_KEYPRESS:
           if Params.cArgs > 0 then
           begin
             Ch := KOLChar(Integer(Variant(Args^[0])));
             KeyPress(Ch);
             if ((Args^[0].vType and varByRef) <> 0) then
               KOLChar(Args^[0].VPointer^) := Ch;
           end;

  • Jon © (10.10.10 05:07) [106]
    There is also an error with the ASM_VERSION using the property Count:


    program Test;

    uses KOL;

    procedure ButtonClick(Dummy: Pointer; Sender: PObj);
    begin
     Applet.Caption := Int2Str(Applet.ChildCount); //(PControl(Sender).Count); // ERROR!
    end;

    begin
     Applet := NewForm(nil, 'Test');
     with NewButton(Applet, 'Count')^ do
       OnClick := TonEvent(MakeMethod(nil, @ButtonClick));
     Run(Applet);
    end.



    Defines:

    UNICODE_CTRLS; = error
    UNICODE_CTRLS;PAS_VERSION; = ok
  • Vladimir Kladov © (10.10.10 09:28) [107]
    3.00.G - kol.zip, mck.zip, koladd.zip, kol_err.zip

    DISPID_KEYPRESS: Don't see any changes. Therefore I replaced it. Download because another fixes are there (fName, Name in two or three different places). Also, err.pas is changed to fix syntax errors with UNICODE_CTRLS + ActiveKOL.
  • Dufa © (10.10.10 12:35) [108]
    Судя по пас версии, надо и в асм добавить DIBPixels32bitWithAlpha, иначе не задействуется новый код

    fGetDIBPixels := {$IFDEF DIBPixels32bitWithAlpha} _GetDIBPixelsTrueColorAlpha
                              {$ELSE} _GetDIBPixelsTrueColor {$ENDIF};



    Есть еще одна улучшалка для TStrList:

    ...
       procedure SortEx(const CompareFun: TCompareEvent);
       {* Call it to custom sort string list. Dufa }
    ...

    procedure TStrList.SortEx(const CompareFun: TCompareEvent);
    begin
     SortData(@Self, fCount, CompareFun, @TStrList.Swap);
    end;


    Таким образом можно использовать настраеваемую сортировку

    Залил на свн 3.00.G.
  • Jon © (11.10.10 00:25) [109]
    There is still the issue from [105] after your changes from [107]
    Tried with new version: ActiveKOL.pas 76,885 bytes 07/10/2010


    dcc32.exe -b ActiveKOL.pas -dUNICODE_CTRLS;

    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    KOLDEF.INC(253)
    KOLDEF.INC(253)
    delphidef.inc(48)
    delphicommctrl.inc(1569)
    KOL_unicode.inc(1185)
    KOL_unicode.inc(1185)
    KOL_ASM.inc(15225)
    KOL.pas(64002)
    KOLDEF.INC(253)
    KOLDEF.INC(253)
    err.pas(1198)
    KOLComObj.pas(2353)
    KOLDEF.INC(253)
    ActiveKOL.pas(1873) Error: Incompatible types: 'KOLChar' and 'Char'
    ActiveKOL.pas(1876) Error: Incompatible types: 'Char' and 'KOLChar'
    ActiveKOL.pas(2638)



    All other issues are fine now - thank you.
  • Jon © (11.10.10 02:26) [110]
    Some file irregularities:

    In http://kolmck.net/kol.zip and http://kolmck.net/mck.zip there are different versions of MCKfakeClasses.inc and visual_xp_styles.inc

    In http://kolmck.net/mck.zip and http://kolmck.net/sys/kol_err.zip there are different versions of err.pas
  • MTsv DN (11.10.10 11:50) [111]
    2 Кладов
    Еще один баг: http://zalil.ru/29797062
    Неправильный подсчет размера текста. Сочетание директив обязательно такое: KOL_MCK;GRAPHCTL_XPSTYLES;UNICODE_CTRLS;nil_events
  • MTsv DN (11.10.10 11:57) [112]
    2 Кладов
    Тока щас сообразил. Ошибка появилась после смены объявления
    procedure TextArea( const Text : KOLString; var Sz : TSize; var P0 : TPoint );


    То Вы сидите на D6 и ХР, то кинулись сразу на D2010 и семерку. Чем анси-версия-то не устраивала? Есть же WTextArea... Поясните уж тогда, почему в TextExtent и DrawText оставили AnsiString, потому что пока Вы это не используете?
  • MTsv DN (11.10.10 12:00) [113]
    Ну и до кучи.

    function TCanvas.TextExtent(const Text: AnsiString): TSize;
    var DC : HDC;
       ClearHandle : Boolean;
    begin
    .
    .
    .
    end;

    procedure TCanvas.TextArea(const Text: KOLString; var Sz: TSize;
     var P0: TPoint);
    begin
     Sz := TextExtent( Text );
     P0.x := 0; P0.y := 0;
     TOnTextArea( GlobalCanvas_OnTextArea )( @Self, Sz, P0 );
    end;


    Ничего не смущает, если использовать UNICODE_CTRLS
  • Vladimir Kladov © (11.10.10 16:17) [114]
    I understand that Delphi 7 and Delphi 6 a bit different compilers, but
    C:\Borland\Delphi6\Bin>dcc32.exe -b d:\kol\ActiveKOL.pas -dUNICODE_CTRLS
    Borland Delphi Version 14.0
    Copyright (c) 1983,2002 Borland Software Corporation
    d:\kol\KOLDEF.INC(254)
    d:\kol\KOLDEF.INC(254)
    d:\kol\delphidef.inc(48)
    d:\kol\delphicommctrl.inc(1569)
    d:\kol\KOL_unicode.inc(1185)
    d:\kol\KOL_unicode.inc(1185)
    d:\kol\KOL_ASM.inc(15382)
    d:\kol\KOL.pas(64573)
    d:\kol\KOLDEF.INC(254)
    d:\kol\KOLDEF.INC(254)
    d:\kol\err.pas(1197)
    d:\kol\KOLComObj.pas(2353)
    d:\kol\KOLDEF.INC(254)
    d:\kol\ActiveKOL.pas(2650)
    91406 lines, 1.47 seconds, 15398 bytes code, 112 bytes data.



    and in Delphi7SE (I havn't other):
    C:\Borland\Delphi7SE\Bin>dcc32.exe -b d:\kol\ActiveKOL.pas -dUNICODE_CTRLS
    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    d:\kol\KOLDEF.INC(254)
    d:\kol\KOLDEF.INC(254)
    d:\kol\delphidef.inc(48)
    d:\kol\delphicommctrl.inc(1569)
    d:\kol\KOL_unicode.inc(1185)
    d:\kol\KOL_unicode.inc(1185)
    d:\kol\KOL_ASM.inc(15382)
    d:\kol\KOL.pas(64573)
    d:\kol\KOLDEF.INC(254)
    d:\kol\KOLDEF.INC(254)
    d:\kol\err.pas(1197)
    d:\kol\KOLComObj.pas(2353)
    d:\kol\KOLDEF.INC(254)
    d:\kol\ActiveKOL.pas(2650)
    91406 lines, 0.70 seconds, 15406 bytes code, 112 bytes data.



    We have different ActiveKOL.pas:

         DISPID_KEYDOWN, DISPID_KEYUP:
           if Params.cArgs >= 2 then
           begin
             Key := Variant(Args^[1]);
             X := Variant(Args^[0]);
             case DispID of
               DISPID_KEYDOWN: KeyDown(Key, X);
               DISPID_KEYUP:   KeyUp(Key, X);
             end;
             if ((Args^[1].vType and varByRef) <> 0) then
               Word(Args^[1].VPointer^) := Key;
           end; //-<- this is line 1873
         DISPID_KEYPRESS:
          if Params.cArgs > 0 then
          begin //-<- this is line 1876
            Ch := KOLChar(Integer(Variant(Args^[0])));
            KeyPress(Ch);
            if ((Args^[0].vType and varByRef) <> 0) then
              KOLChar(Args^[0].VPointer^) := Ch;
          end;


    Pls download ActiveKOL from kolmck.net, unit file size is 77 251 bytes.
  • Vladimir Kladov © (11.10.10 16:24) [115]
    In http://kolmck.net/kol.zip and http://kolmck.net/mck.zip there are different versions of
    MCKfakeClasses.inc and visual_xp_styles.inc

    anyway get marked as modified later. I'll remove visual_xp_styles.inc from mck.zip, it is not necessary there. Not sure same is correct for fake Classes.

    In http://kolmck.net/mck.zip and http://kolmck.net/sys/kol_err.zip there are different versions of
    err.pas
    I updated it in kol_err. Again don't know why it is necessary for MCK. Just will renew it there.
  • Jon © (11.10.10 16:32) [116]
    Can you provide the correct download link for ActiveKOL.
    I used this one: http://kolmck.net/Components/dde_ole_activex/ActiveKOL.zip

    ActiveKOL.zip (57350 bytes)

    Contents:

    ActiveKOL.pas (76,885 bytes 07/10/2010 12:11)
    ActiveKOL_readme.txt  (4,026 bytes  12/01/2003 19:59)
    KOLComObj.pas  (73,140 bytes  30/06/2007 00:11)
    LICENSE.txt  (4,757 bytes  06/11/2001 17:54)
    read_me_1st.txt  (117 bytes  21/10/2006 13:43)
    TLB2KOL.exe  (14,336 bytes  16/07/2001 22:57)
    Tlb2KolSrc.zip  (6,811 bytes  16/07/2001 23:49)

    Can you please check that you are hosting the correct file.
  • Vladimir Kladov © (11.10.10 16:40) [117]
    почему в TextExtent и DrawText оставили
    AnsiString, потому что пока Вы это не используете
    Потому что по этому поводу не ругался D2010. Важно убирать все предупреждения компилятора. Если этого не делать, то между огромным числом предупреждений менее существенных (таких как предупреждение о возможной потери информации при имплицитном преобразовании из WideString/WideChar/PWideChar в AnsiString/AnsiChar/PAnsiChar) начинают теряться более существенные предупреждения. Например, предупреждение о "подозрительном" (suspicious) приведении типа PWideChar к PAnsiChar является обязательным к устранению, речь идет уже скорее об ошибке, чем о предупреждении.

    В случае TextArea более корректно привести для UNICODE_CTRLS к KOLString, т.к. размеры национальных символов могут отличаться от размеров символа '?', к которому они приводятся при преобразовании в Ansi. Более правильно и DrawText преобразовать, чтобы изображались иероглифы и умляуты как положено.

    На D2010 я пересаживаться не собираюсь. Мне и D6 более чем хватает. Тем более эти жуткие тормоза в D2010. Единственное, для чего установил, это улучшить к нему адаптацию. А заодно и unicode_ctrls усовершенствовать.
  • Vladimir Kladov © (11.10.10 18:35) [118]
    Выложил kol.zip (H), mck.zip (поправил версии файлов), koladd.zip (DirDlgEx - фикс пиктограмм для режима 16 бит на экране).

    В KOL.pas появился символ SPEED_FASTER, наверное, оставим его по умолчанию, уж очень эффект полезный (сортировка StrList с AnsiSort (nocase) быстрее в 6 раз).
  • Dy1 (11.10.10 22:02) [119]
    я немного не в теме... Что с количеством директив? Я за их уменьшение :)
  • Jon © (12.10.10 03:09) [120]
    KOL.PAS VERSION 3.00.H (2,164,976 bytes)


    dcc32.exe -b Kol.pas -dUNICODE_CTRLS;

    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    KOLDEF.INC(253)
    KOLDEF.INC(253)
    delphidef.inc(48)
    delphicommctrl.inc(1569)
    KOL_unicode.inc(1185)
    KOL_unicode.inc(1185)
    KOL.pas(21709) Error: Incompatible types: 'Char' and 'WideChar'
    KOL_ASM.inc(15325)
    KOL.pas(64705)

  • RusSun © (12.10.10 04:45) [121]
    По поводу MDI.
    program MDI_test;

    uses
     Windows, Messages, KOL;

    var
     MDIClient, MDIChild, Panel: PControl;
     MainMenu: PMenu;

    procedure CreateMDIChild;
    begin
     MDIChild := NewMDIChild(MDIClient, 'MDI Client').SetClientSize(320, 200);
     MDIClient.Add2AutoFree(MDIChild);
     MDIChild.Border := 10;
     Panel := NewPanel(MDIChild, esRaised).SetAlign(caClient);
     Panel.Border := 2;
     MDIClient.CreateWindow;
    end;

    procedure MenuItems(Dummy: Pointer; Sender: PMenu; Item: Integer);
    begin
     case Item of
       1: CreateMDIChild;
       3: MDIClient.Perform(WM_MDITILE, MDITILE_VERTICAL, 0);
       4: MDIClient.Perform(WM_MDICASCADE, 0, 0);
     end;
    end;

    begin
     Applet := NewForm(nil, 'MDI test').SetPosition(240, 120).SetClientSize(380, 280);
     Applet.Font.FontName := 'MS Sans Serif';
     MainMenu := NewMenu(Applet, 0, ['New', '(', 'Create MDI Child', ')', 'Window', '(', 'Tile', 'Cascade', ')', ''], TOnMenuItem(MakeMethod(nil, @MenuItems)));
     MDIClient := NewMDIClient(Applet, 0).SetAlign(caClient);
     MDIClient.Add2AutoFree(MDIChild);
     CreateMDIChild;
     Run(Applet);
    end.


    Вылетает при компиляции. Если оно не надо, то вопрос снимаю.
  • Jon © (12.10.10 04:58) [122]
    Confirmed:


    program MDI_test;

    uses KOL;

    begin
     Applet := NewForm(nil, 'MDI test');
     NewMDIClient(Applet, 0); // Runtime error!
    end.

  • Артём (12.10.10 10:45) [123]
    Здравствуйте.
    Быть может, что-то путаю, но были испорчены:
    function TStrList.GetLineName(Idx: Integer): AnsiString;
    и
    function TStrList.GetLineValue(Idx: Integer): AnsiString;

    кодом:
     Q := StrScan( PAnsiChar(s), '=' );
    и
     Q := StrScan( Q, '=' );

    Хотя рядом в файле лежат функции, где fNameDelim не игнорируется...
  • Vladimir Kladov © (12.10.10 15:40) [124]
    то с количеством директив? Я за их уменьшение :) Я тоже. Как версия зафиксируется, будем убирать хлам типа OLD_ALIGN (NEW_ALIGN вполне себе прижился), ADD_AUTOFREE4CONTROLS (уже давно прижился как основной) и т.п. Вообще, текущий набор опций таков, что никакие опции добавлять не нужно, кроме специальных случаев. Если надо очень много, есть EXTERNAL_DEFINES и это удобнее, чем в опциях проекта хранить.
  • Vladimir Kladov © (12.10.10 16:04) [125]
    По поводу MDI.
    program MDI_test;

    Это я поправлю сегодня. Но вы тоже молодец: в двух местах Add2AutoFree сделали, чтобы не забыло помереть. Не надо ни разу. При создании контрола дочерним он автоматом уже попадает в fAutoFree родителя, а более раза ему там нечего делать. В первый раз, добавляется в AutoFree вообще nil - контрол еще не создан.
  • Vladimir Kladov © (12.10.10 16:08) [126]
    рядом в файле лежат функции, где fNameDelim не игнорируется
    Я совсем забыл про fNameDelim, избавляясь от Parse. Поправлю сегодня.
  • Vladimir Kladov © (12.10.10 17:06) [127]
    KOL.zip with KOL 3.00.i is on kolmck site. All 4 issues are fixed:
    compilng with UNCODE_CTRLS (_AnsiCompareStr),
    running MDI_Test,
    Toolbar issue (elder behavior by default except special symbol defined),
    fNameDelim.
  • Jon © (12.10.10 17:28) [128]
    Thank you - can you recheck ActiveKOL as per [116] please.
  • RusSun © (12.10.10 18:17) [129]
    Спасибо Большое [125].
  • Vladimir Kladov © (12.10.10 18:34) [130]
    Sorry, Jon. These were really different. May be file was locked when I updated it. I reuploaded it just now.
  • Vladimir Kladov © (12.10.10 18:35) [131]
    I mean ActiveKOL.zip, certainly.
  • Jon © (13.10.10 04:38) [132]
    Thank you very much for the speedy fixes.

    I'm afraid that I have to report another oddity.

    This used to work with KOL pre-v3:


    program Test;

    uses KOL;

    begin
     MsgOK(Int2Str(1)); // Runtime Error!
    end.



    But with KOL 3 I have to assign an Applet:


    program Test;

    uses KOL;

    begin
     Applet := NewForm(nil, '');
     MsgOK(Int2Str(1)); // OK now!
    end.



    Is this a bug?
  • Jon © (13.10.10 05:15) [133]
    This is something similar, using Int2Str works, but Int2Digs and Int2Ths create an error:


    program Test;

    uses KOL;

    var
     Memo: PControl;
     Counter: Integer;

    begin
     Applet := NewForm(nil, '');
     Memo := NewEditbox(Applet, [eoMultiline]).SetAlign(caClient);
     Memo.Color := clWindow;
     for Counter := 0 to 254 do
       Memo.Add(Int2Digs(Counter, 3) + #$0D#$0A); // Runtime Error!
     //  Memo.Add(Int2Ths(Counter) + #$0D#$0A); // Runtime Error!
     //  Memo.Add(Int2Str(Counter) + #$0D#$0A); // This works!
     Run(Applet);
    end.



    Very strange..
  • Jon © (13.10.10 05:16) [134]
    Just tested [133] with PAS_VERSION and it works correctly.
  • MTsv DN (13.10.10 08:54) [135]
    Подтверждаю. При UNICODE_CTRLS асм-версия Int2Digs не пашет. А может и еще что, предполагаю: Int2Ths, Num2Bytes, String2PascalStrExpr
  • MTsv DN (13.10.10 08:56) [136]
    Поскольку Int2Digs использую, то пока отключил асм-версию.
  • Vladimir Kladov © (13.10.10 16:21) [137]
    KOL.zip 3.00.j on site with fixes.

    Если и дальше так пойдет, все переведем в KOLString, кроме StrList (его как раз не желательно, для скорости некоторых алгоритмов).
  • Jon © (14.10.10 01:56) [138]

    > KOL.zip 3.00.j on site with fixes.


    Thank you very much, master. Excellent work!
  • MTsv DN (14.10.10 10:34) [139]
    Первая стабильная версия 3.00...смотрю со "своей колокольни".

    Единственное в секцию инициализации так и добавляю InitCommonControls.
  • awkward (14.10.10 11:43) [140]
    на http://kolmck.net/ написано, что последняя версия 3.00 H для KOL и 3.00 G для МСК и аддонов. в компонентах обновлялись некоторые вещи, такие как тот же трекбар - дата неизменена (а в самом модуле убрали функцию ChannelRect + было б неплохо, чтоб добавилось trbBoth в TTrackbarOption и TBS_BOTH в TrackbarOptions в функции  NewTrackbar - но это уже мелочи)
  • Vladimir Kladov © (14.10.10 16:17) [141]
    добавляю InitCommonControls А зачем? Я так разницы никакой не увидел.

    написано, что последняя версия 3.00 H для KOL и 3.00 G для МСК На самом деле kol.zip 3.00.j обновлялся отдельно.

    убрали функцию ChannelRect + было б неплохо, чтоб добавилось trbBoth в TTrackbarOption и TBS_BOTH в TrackbarOptions в функции  NewTrackbar - но это уже мелочи Я ничего не убирал, поправил ту версию, что у меня была. Посмотрите, что поправил, подправьте вашу, вышлите\выложите, я обновлю.
  • Vladimir Kladov © (14.10.10 21:49) [142]
    Обновил KOLBook.rar, добавил PDF-вариант на сайт.
  • Dufa © (14.10.10 23:00) [143]

    > Обновил KOLBook.rar, добавил PDF-вариант на сайт.

    Вот этот супер, спасибо!


    > А зачем? Я так разницы никакой не увидел.


    Возможно это проявится если на форму положить только комбобокс и включить манифест.

    Свн обновил до новой версии
  • Vladimir Kladov © (15.10.10 08:44) [144]
    если на форму положить только комбобокс и включить манифест

    Делал, но как-то не различил различий. Если какие-то есть, расскажите, где их искать.
  • MTsv DN (15.10.10 10:01) [145]
    Чей-та не могу оставить коммент
  • MTsv DN (15.10.10 10:01) [146]
    2 Кладов
    Dufa правильно говорит.
    Мои действия:
    1. На форме: KOLProject, KOLForm, KOLApplet, TKOLCombobox.
    2. Директивы: KOL_MCK;GRAPHCTL_XPSTYLES;UNICODE_CTRLS;nil_events
    3. В папке проекта файл манифеста
    4. Компилирую без InitCommonControls.
    хттп://ipicture.ru/uploads/101015/17AzgJsq99.jpg
    5. Компилирую с InitCommonControls.
    хттп://ipicture.ru/uploads/101015/V5Utwi2pCv.jpg
    6. Реакция на смены директив: отсутствует (и пас-версия тоже не работает).

    Проект: хттп://zalil.ru/29817677 (вторая форма нигде не используется)
    Использую: Delphi 2007
  • Vladimir Kladov © (15.10.10 19:53) [147]
    У меня такого нет, на скачанном примере тоже.
    Выложил 3.00.К (только KOL.zip), в нем вызывается InitCommonControls для комбобокса при сочетании GRAPHCTL_XPSTYLES+UNICODE_CTRLS.
    +исправил сортировку Ansi в asm-версии, + ускорил DirList (особенно его сортировку).
  • RusSun © (15.10.10 21:33) [148]
    [125] убрал в двух местах Add2AutoFree как сказали.
    с 3.00.К  работает без ошибки. Большое Спасибо.:)
    если добавить замену (SysDcu7), при закрытии любого контрола вылет.
  • Vladimir Kladov © (15.10.10 23:16) [149]
    begin
    UseDelphiMemoryManager;
    Applet := NewForm(nil, 'MDI test').SetPosition(240, 120).SetClientSize(380, 280);



    Должно исправить.
  • RusSun © (16.10.10 08:06) [150]
    Работает как надо ;) Спасибо Мастер.
  • zuker © (16.10.10 13:59) [151]
    Уважаемые спецы.
    Досадная ошибка осталась в последней версии - не работает ListBox.Clear.
  • Vladimir Kladov © (16.10.10 14:35) [152]
    Исправлено. 3.00.L на сайте.

    Заодно добавил NewMemBlkStream и еще на четверть ускорил работу DirList.
  • awkward (16.10.10 19:03) [153]
    версия KOL 3.00L - попытка откомпилировать в Delphi5 с ключами
    -Q -W- -CC -H -$J+ -$A+ -$H+ -$C- -$D- -$G- -$I- -$L- -$W- -$V- -$Y-
    выдается
    kol.pas(21744) Error: Operand size mismatch
    kol.pas(21746) Error: Operand size mismatch
    kol.pas(21846) Error: Operand size mismatch
    kol.pas(21848) Error: Operand size mismatch
  • Vladimir Kladov © (16.10.10 20:17) [154]
    3.00.M на сайте.
  • Dufa © (18.10.10 01:15) [155]
    Перестал работать эвент Combobox.OnChange.. При выборе элемента OnChange не срабатывает.

    Исправление: aChange := CBN_SELCHANGE, но т.к сейчас там стоит CBN_EDITCHANGE, то при изменении текста в комбобоксе эвент срабатывать не будет..
  • Vladimir Kladov © (18.10.10 05:51) [156]
    При выборе элемента срабатывает OnSelChange, так всегда (с не помню какой версии) было. OnChange - это для реакции на редактирование edit-части, когда она доступна для редактирования.
  • Дмитрий К © (18.10.10 08:09) [157]
    При определенных условиях неправильно работает ResizeParentBottom:
    program Project1;

    uses
     KOL;
    var
     grp, lbl, edt: PControl;
    begin
     Applet := NewForm(nil, 'test');
     grp := NewPanel(Applet, esLowered).SetSize(400, 300);
     lbl := NewLabel(grp, 'Label').SetAlign(caTop);
     edt := NewEditbox(grp, []).SetAlign(caTop).ResizeParentBottom;
     Run(Applet);
    end.


    Высота панели меняется, как если бы координаты editbox'а были 0,0. Если родитель форма, то все нормально. OLD_ALIGN решает проблему.
    KOL 3.00.N, Delphi 2006
  • QAZ (18.10.10 15:56) [158]
    посмотрите ктонить, сохраняется ли значение tag у попапменю после использования этого меню
    раньше у меня tag становилось равно 32чегототаммногоцифр....
  • Vladimir Kladov © (18.10.10 16:23) [159]
    ResizeParentBottom

    Обновление KOL.zip 3.00.o на сайте.

    2 QAZ: Много цифр - как смотрели? fTag надо в Watch и курсором мыши смотреть, а не Tag.
  • Dufa © (18.10.10 17:05) [160]

    > OnChange - это для реакции на редактирование edit-части,
    >  когда она доступна для редактирования.


    Вот раньше она и так и так работала.. но в принципе не критично. свн обновил
  • Vladimir Kladov © (18.10.10 18:26) [161]
    Раньше - это когда? Я проверил тестовый пример на версии 2.94++ - так же как и сейчас. Срабатывает на OnSelChange, если выбираю другой элемент из списка, а на OnChange - только при редактировании.
  • Dufa © (18.10.10 20:22) [162]
    2.88 например
  • Vladimir Kladov © (18.10.10 22:20) [163]
    Понял: надо было тестировать только с событием OnChange.
    Версия 3.00.P на сайте. Осталась еще половина латинского алфавита.
  • Jon © (19.10.10 23:33) [164]
    Bug with Actions:


    program Actions;

    uses
     KOL, KOLadd;

    var
     ActionList: PActionList;
     Action: PAction;
     Button: PControl;

    procedure DoAction(Dummy: Pointer; Sender: PObj);
    begin
     ShowMessage('Test');
    end;

    begin
     Applet := NewForm(nil, 'Test');
     ActionList := NewActionList(Applet);
     Action := ActionList.Add('ActionCaption', 'ActionHint', TonEvent(MakeMethod(nil, @DoAction)));
     Button := NewButton(Applet, 'Button');
     Action.LinkControl(Button);
     Run(Applet);
    end.



    After using LinkControl the button has no caption.
    Using latest KOLadd.pas but version shows 2.82
  • Vladimir Kladov © (20.10.10 05:36) [165]
    KOLadd.pas line 2712
    if i <> 0 then

    replace with
    if i > 0 then



    Or add #9 as a last char for ActionCaption.
  • Jon © (21.10.10 02:05) [166]
    Thanks - that worked.

    Another bug - property RightClick does not work:


    program Test;

    uses KOL;

    var Toolbar: PControl;

    procedure Click(Dummy: Pointer; Sender: PControl);
    begin
     if Sender.RightClick then Applet.Caption := '>>>' else Applet.Caption := '<<<';
    end;

    begin
     Applet := NewForm(nil, '').SetSize(200, 100);
     Toolbar := NewToolbar(Applet, caTop, [], 0, ['X'], []);
     Toolbar.OnTBClick := TOnEvent(MakeMethod(nil, @Click));
     Run(Applet);
    end.



    The code works fine with KOL 2.94
  • Vladimir Kladov © (21.10.10 06:46) [167]
    kol_asm.inc line 4299, replace
    MOV CL, G6_RightClick


    onto
    MOV CL, 1 shl G6_RightClick



    Later I'll update version on the site.
  • SPeller © (21.10.10 08:57) [168]
    Хм, тройка нормально завелась под Д2010, с минимумом правок :) Посмотрим, может и пригодится ) Только варианты цопако с сисутилс тянет вместе с ActiveX юнитом...
  • SPeller © (21.10.10 09:09) [169]
    И FakeVariants помог :) Надо же, помнится, вроде 2009-я брыкалась и тянула именно системный юнит вместо фейка.
  • SPeller © (22.10.10 01:39) [170]
    Кстати, нужно заводить еще один тип: KOLWideString, помимо KOLString. Чтобы под Д2009 и выше он (как и KOLString) соответствовал родному дельфийскому типу UnicodeString. Это приведет к снижению количества неявных преобразований строк из одного вида в другой, и в результате - уменьшению бинарного кода и увеличению быстродействия. KOLWideString подразумевается что будет двухбайтовым всегда (под Д < 2009 он будет WideString), и использовать его в функциях/объектах с префиксом W.
  • Vladimir Kladov © (22.10.10 04:29) [171]
    Непонятно, в чем прикол с KOLWideString - есть же WideString, для случая, когда всегда нужен WideString?
  • RusSun © (22.10.10 04:42) [172]
    toVladimir Kladov  
    Jon ©   (21.10.10 00:40) [12]
    написал в DemoMDI kol(без мск) [Delphi, Windows]
  • SPeller © (22.10.10 04:48) [173]
    В том, что это не нативный дельфийский тип. При работе в своем коде я (да и все) всегда используют string, который в 2009 и выше является UnicodeString (в прежних версиях string был равен AnsiString). В результате при работе с функциями и объектами KOL происходят постоянные преобразования UnicodeString->WideString и обратно. Да и есть системные функции, используемые в самом KOL, которые принимают UnicodeString, а при подсовывании им WideString происходит ненужное преобразование. В контролах точно так же - они сначала внутри себя внешние данные из UnicodeString преобразуют в WideString, а потом в PWideChar при обращении к API функциям, и обратно через те же преобразования, только наоборот. А с UnicodeString мы выкинем ненужное преобразование UnicodeString->WideString, и строки будут сразу из UnicodeString приводиться к PWideChar (строка UnicodeString состоит из WideChar-ов) при работе с API и вообще не будем делать никаких преобразований при работе с функциями-объектами.

    WideString - это BSTR из ole32 по моему. А UnicodeString - это тот же AnsiString, с тем же функционалом и той же обработкой, только двухбайтовый.
  • SPeller © (22.10.10 04:56) [174]
    А заводить KOLWideString нужно для того, чтобы условной компиляцией приравнивать его либо к WideString либо к UnicodeString в зависимости от версии Дельфи. С 2009-й версии, когда появился UnicodeString, потребность в WideString для работы с юникодом внутри программы полностью отпала и стала даже вредна из-за постоянных преобразований строк туда-сюда. Перекодировки при этом нет, но всё равно это лишние операции и безосновательная потеря производительности.
  • L`Autour (22.10.10 11:24) [175]
    SPeller
    PWideChar - просто указатель на строку с 0 на конце
    WideString - указатель на строку + перед самой строкой хранится ее длина.

    А как строка UnicodeString представлена в памяти? (Кроме отзывов про него найти пока ничего не могу).
  • Vladimir Kladov © (22.10.10 18:30) [176]
    Т.е. Вы предлагаете заменить именно WideString на KOLWideString в KOL.pas ? Это можно. А разве для KOLString не нужно в D20xx переопределить его тоже как UnicodeString ?
  • Jon © (23.10.10 03:27) [177]
    Another bug found:


    program Test;

    uses KOL;

    var Toolbar: PControl;

    procedure Click(Dummy: Pointer; Sender: PControl);
    begin
     if Sender = Toolbar then
       Applet.Caption := 'Toolbar'
     else
       Applet.Caption := 'Error';
    end;

    begin
     Applet := NewForm(nil, '').SetSize(200, 100);
     Toolbar := NewToolbar(Applet, caTop, [], 0, ['X'], []);
     Toolbar.OnTBClick := TOnEvent(MakeMethod(nil, @Click));
     Run(Applet);
    end.



    Right click the button and toolbar empty space.
    With PAS_VERSION result is always sender=toolbar
    But with ASM_VERSION, left click button is ok, but right click button and left/right click space is error.
  • Jon © (23.10.10 04:17) [178]
    A drawing issue:


    program Test;

    uses Windows, KOL;

    procedure TBClick(Dummy: Pointer; Sender: PControl);
    begin
     case Sender.CurIndex of
       0: Applet.RemoveStatus;
       1: Applet.SimpleStatusText := 'Status';
     end;
    end;

    var
     Panel: PControl;
    begin
     Applet := NewForm(nil, '').SetSize(200, 100);
     Applet.SimpleStatusText := 'Status';
     Panel := NewPanel(Applet, esNone).SetSize(200, 24).SetAlign(caTop);
     with NewToolbar(Panel, caTop, [], 0, ['remove', 'restore'], [])^ do
       OnTBClick := TOnEvent(MakeMethod(nil, @TBClick));
     NewMDIClient(Applet, 0).SetAlign(caClient);
     Run(Applet);
    end.



    Clicking the toolbar buttons causes the top of the MDI area to be (re)drawn incorrectly.
    Works fine with KOL v2.94
  • Vladimir Kladov © (23.10.10 13:36) [179]
    KOL.zip v 3.00.R is uploaded.
  • Jon © (23.10.10 13:55) [180]

    dcc32.exe -b KOL.pas -dUNICODE_CTRLS

    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    KOLDEF.INC(253)
    KOLDEF.INC(253)
    delphidef.inc(48)
    delphicommctrl.inc(1569)
    KOL_unicode.inc(1185)
    KOL_unicode.inc(1185)
    KOL.pas(20549) Error: Incompatible types
    KOL_ASM.inc(14864)
    KOL.pas(65524)

  • Vladimir Kladov © (23.10.10 18:35) [181]
    3.00.R+ or change line  20549 to
    if Copy( Result, 1, 2 ) = KOLString('-') + ThsSeparator then

  • Jon © (24.10.10 19:47) [182]
    When pressing ALT+SPACE together the system menu does not appear when using PAS_VERSION with a button on the form:


    program Test;

    uses KOL;

    begin
     Applet := NewForm(nil, '');
     NewButton(Applet,'');
     Run(Applet);
    end.



    - Conditional defines: PAS_VERSION;KEY_PREVIEW;
    - build and run program
    - hold down ALT+SPACE together
    - menu does not show

    - Conditional defines: ASM_VERSION;KEY_PREVIEW;
    - build run program
    - hold down ALT+SPACE together
    - menu shows correctly
  • Vladimir Kladov © (24.10.10 20:47) [183]
    At least what I found: KEY_PREVIEW is not important, problem function is _NewControl only (but did not yet find why).
  • Vladimir Kladov © (24.10.10 20:54) [184]
    Understand now. Pascal version is correct, asm version a bit lagged: it does not set created button as a current control. If the button is current it intercepts ALT+Space as it should.

    KEY_PREVIEW does not (and should not) affect ALT+SPACE shortcut.
  • Vladimir Kladov © (24.10.10 20:59) [185]
    Version 3.00.T+ on site.
  • Jon © (24.10.10 22:55) [186]

    > KEY_PREVIEW does not (and should not) affect ALT+SPACE shortcut.


    Test with the following conditionals:

    dcc32.exe -b test.dpr -dPAS_VERSION;
    dcc32.exe -b test.dpr -dASM_VERSION;
    dcc32.exe -b test.dpr -dPAS_VERSION;KEY_PREVIEW;

    ALT+SPACE not working

    dcc32.exe -b test.dpr -dASM_VERSION;KEY_PREVIEW;

    ALT+SPACE always working
  • Jon © (25.10.10 01:44) [187]
    When compiling v3.00.T+ in the IDE, I get this message:

    [Fatal Error] KOL.pas(18249): Unterminated conditional directive
  • SPeller © (25.10.10 04:48) [188]

    > L`Autour   (22.10.10 11:24) [175]
    >
    > SPeller
    > PWideChar - просто указатель на строку с 0 на конце
    > WideString - указатель на строку + перед самой строкой хранится
    > ее длина.
    >
    > А как строка UnicodeString представлена в памяти? (Кроме
    > отзывов про него найти пока ничего не могу).
    UnicodeString - по организации идентична AnsiString. Исключение в том, что каждый символ в этой строке - двухбайтовый. Тип символов в строке - WideChar (по первой это не совсем понятно правда, до самого не сразу дошло:)). Char в Д2009 и выше по дефолту ссылается на WideChar, PChar - на PWideChar, string - на UnicodeString. Поэтому старые конструкции вызовов API вроде function(PChar(string)) будут работать нормально без правок: вызов API функции из системного юнита будет подставлен с суффиксом W, и тип указателя на строку будет правильным.
    WideString - это виндовой тип строки, известный как BSTR. Он тоже состоит из WideChar'ов. Но он не родной для Дельфи, его менеджментом занимается системная библиотека, что не есть хорошо для нас. (Хотя этот тип прекрасен не только в COM, но и для передачи строк в формате юникод из/в длл, и поддерживается если не всеми языками программирования, то многими точно :) В результате можно легко гонять строки между модулями, написанными на разных ЯП, не парясь с указателями)


    > Vladimir Kladov ©   (22.10.10 18:30) [176]
    > Т.е. Вы предлагаете заменить именно WideString на KOLWideString
    > в KOL.pas ? Это можно. А разве для KOLString не нужно в
    > D20xx переопределить его тоже как UnicodeString ?
    Да, WideString заменить на KOLWideString. KOLString тоже нужно переопределить в UnicodeString, просто в предыдущих постах акцентировал внимание на новом типе. Всё это нужно для Д2009 и выше.
  • Vladimir Kladov © (25.10.10 05:08) [189]
    procedure TGraphicTool.SetLogFontStruct(const Value: TLogFont);
    begin
     if  CompareMem(@fData.Font, @Value, SizeOf(TLogFont)) then Exit;
     Move(Value, fData.Font, SizeOF(TLogFont));
     Changed;
    end; <- this is line 18249

    function TGraphicTool.GetLogFontStruct: TLogFont;



    2 Speller: уже сделано.
  • SPeller © (25.10.10 06:50) [190]
    Еще вот думаю, может в Д2009 и выше следует по дефолту включать UNICODE_CTRLS?
  • Vladimir Kladov © (25.10.10 08:21) [191]
    Мне, честно говоря, D20XX не нужен как таковой. Уж так, для поддержания, раз уж на него народ зачем-то переходит. Наверное, кто не успел купить нормальный Delphi. Но я лучше буду пользовать нелегальную копию Delphi 3, чем ЭТО.
  • MTsv DN (25.10.10 10:01) [192]
    Версия 3.00Т+
    Использовался StrReplace для AnsiString (объявление именно AnsiString), теперь выдает несоответствие типов. Не понимаю, чем так AnsiString не угодил, он что в D2009-2010 не работает? Нафиг дублировать функи-то?
    function StrReplace( var S: KOLString; const From, ReplTo: KOLString ): Boolean;
    var I: Integer;
    begin
     I := pos( From, S );
     if I > 0 then
     begin
       S := Copy( S, 1, I - 1 ) + ReplTo + CopyEnd( S, I + Length( From ) );
       Result := TRUE;
     end
     else Result := FALSE;
    end;

    function KOLStrReplace( var S: KOLString; const From, ReplTo: KOLString ): Boolean;
    var I: Integer;
    begin
     I := pos( From, S );
     if I > 0 then
     begin
       S := Copy( S, 1, I - 1 ) + ReplTo + CopyEnd( S, I + Length( From ) );
       Result := TRUE;
     end
     else Result := FALSE;
    end;


    Идентичность же 100%.
  • MTsv DN (25.10.10 10:23) [193]
    И опять какие-то артефакты с отрисовкой элементов. На тестовом проекте получить не удалось. Суть в том что после закрытия дочерней формы некоторые элементы не отрисовываются. В версии 3.00.P все было нормально.
  • MTsv DN (25.10.10 10:48) [194]
    А в пас-версии при закрытии вообще краш приложения.
  • SPeller © (25.10.10 11:20) [195]

    > Vladimir Kladov ©   (25.10.10 08:21) [191]
    >
    > Мне, честно говоря, D20XX не нужен как таковой. Уж так,
    > для поддержания, раз уж на него народ зачем-то переходит.
    >  Наверное, кто не успел купить нормальный Delphi. Но я лучше
    > буду пользовать нелегальную копию Delphi 3, чем ЭТО.

    Ну, ХЕ (2011) уже более-менее жизнеспособна ) 2010 стала шустрее загружаться ) Юникод, хэлперы и ртти - вкусные. Поддержка хр, висты в вцл. Поэтому везде есть свои плюсы )
  • MTsv DN (25.10.10 11:30) [196]
    По поводу [193] и [194]. Баг в WndProc. А именно в 2х кусках кода:
    1.
        {$IFDEF SAFE_CODE}
        //inc( self_.fNestedMsgHandling );
        self_.RefInc;
        TRY
        {$ENDIF}
            {$IFDEF DEBUG_KEYDOWN}
            if  M.message = WM_KEYDOWN then
            asm
              nop
            end;
            {$ENDIF}
            Result := self_.WndProc( M );
        {$IFDEF SAFE_CODE}
        FINALLY
           self_.RefDec;
        {$ENDIF}
            //dec( self_.fNestedMsgHandling );
            (*if  (self_.fRefCount = 0) and (self_.fNestedMsgHandling <= 0)
            and {$IFDEF USE_FLAGS} (G2_BeginDestroying in self_.fFlagsG2)
                {$ELSE} self_.fBeginDestroying {$ENDIF}
            and (self_ <> Applet) then
              self_.Free;*)

        {$IFDEF SAFE_CODE}
        END;
        {$ENDIF}


    Вернул старый код.

    2.
    function TControl.WndProc( var Msg: TMsg ): Integer;


    RefInc и RefDec закомментировал.
  • MTsv DN (25.10.10 11:49) [197]
    В асм-версии только закомментировал RefInc/RefDec.
  • Vladimir Kladov © (25.10.10 16:08) [198]
    Это только на падения или на отрисовку тоже влияло?
    Поставил было, отлавливая свою ошибку, ошибку нашел, назад не вернул. Как бы не успел. Верну, без проблем. И еще, возвращать весь код в паскаль-версии нет особого смысла вроде бы: в реальности уже не отрабатывает этот кусок, кроме случая бага:

            (*if  (self_.fRefCount = 0) and (self_.fNestedMsgHandling <= 0)
            and {$IFDEF USE_FLAGS} (G2_BeginDestroying in self_.fFlagsG2)
                {$ELSE} self_.fBeginDestroying {$ENDIF}
            and (self_ <> Applet) then
              self_.Free;*)




    (Это WndFunc, а не WndProc, там тоже RefInc/RefDec был добавлен). Основной баг, который я нашел, когда-то багой не был, это была фича с двойным разрушением апплета в TerminateExecution. Ну и плюс в AlignChildrenProc не туда RefDec припечатал как выяснилось. После чего поспешил выложить T+.

    Не верю я, что новые Delphi когда-нибудь будут работать без тормозов в code insight. Когда при наборе кода комп регулярно замирает на несколько секунд, мне это не надо. Я вынужден либо отключать фичу, либо возвращаться к нормальному Delphi с адекватной скоростью реакции.
  • Vladimir Kladov © (25.10.10 16:20) [199]
    Версия 3.00.U на сайте. Проверьте со своим, MTsv DN.
  • MTsv DN (25.10.10 19:18) [200]
    > Версия 3.00.U на сайте. Проверьте со своим, MTsv DN.
    Подтверждаю. Баг исправлен (и пас- и асм-версии). Спасибо.
  • MTsv DN (26.10.10 09:29) [201]
    Версия 3.00.U. Еще один баг в асм-версии. Простой код
    if ListView1.RightClick then
     beep(400,100);


    при нажатии левой/правой кнопкой на элементе валится где-то в глубинах WndFunc (вроде ;) )

    Пас-версия работает корректно.
  • MTsv DN (26.10.10 09:32) [202]
    Код находится в
    procedure TForm1.ListView1Click(Sender: PObj);

    . Директивы: KOL_MCK;GRAPHCTL_XPSTYLES;UNICODE_CTRLS;nil_events
  • Vladimir Kladov © (26.10.10 16:55) [203]
    Фикс на сайте v3.00.V. Заодно чуть ускорил TLIST_FAST, и поправил KOLDirDlgEx (KOLadd.zip)
  • Jon © (27.10.10 01:51) [204]
    Issue from [186] remains (concerning ALT+SPACE with conditionals)
  • Jon © (27.10.10 02:03) [205]
    When using TBAssignEvents, left click works but right click does not:


    program Test;

    uses KOL;

    var Toolbar: PControl;

    procedure TBClick(Dummy: Pointer; Sender: PControl; BtnID: Integer);
    begin
     if Sender.RightClick then
       Applet.Caption := '>>>'
     else
       Applet.Caption := '<<<';
    end;

    begin
     Applet := NewForm(nil, '').SetSize(200, 100);
     Toolbar := NewToolbar(Applet, caTop, [], 0, [], []);
     Toolbar.TBAssignEvents(Toolbar.TBAddButtons(['X'], []), [TOnToolbarButtonClick(MakeMethod(nil, @TBClick))]);
    //  Toolbar := NewToolbar(Applet, caTop, [], 0, ['X'], []);
    //  Toolbar.OnTBClick := TOnEvent(MakeMethod(nil, @TBClick));
     Run(Applet);
    end.

  • Vladimir Kladov © (27.10.10 04:42) [206]
    Issue from [186] remains (concerning ALT+SPACE with conditionals)


    I answered: it should not work and now is not working in both cases.
  • SPeller © (27.10.10 04:49) [207]
    Есть предложение немного доработать TThread до такого:

    function WaitFor(ATimeOut: Cardinal = INFINITE): Integer;

    ну и в коде

     WaitForSingleObject(FHandle, ATimeOut);

    Никаикх изменений в существующий пользовательский код. Отработку по таймауту коде можно определить возвращаемым значением метода WaitFor, которое будет равно константе STILL_ACTIVE.
  • Vladimir Kladov © (27.10.10 04:56) [208]
    Не-а. Не катит. До Delphi5 нет параметров со значениями по умолчанию. Добавить WaitForTime(timeout) могу.
  • SPeller © (27.10.10 05:39) [209]
    Можно и так. Основной код вставить в WaitForTime, а из WaitFor вызывать его с параметром INFINITE
  • SPeller © (27.10.10 05:45) [210]
    ВОт еще что. Уже обсуждалось, но осталось по прежнему. Проблема в том, что при работе с KOL в DLL возникает проблема из-за обрезки необходимых ей релоков. За это отвечает вот такая штука в koldef.inc:

    // TODO: check DLL project
    {$IFNDEF NO_STRIP_RELOC}
     // by Thaddy de Koning:
     {$IFDEF _D2006orHigher}
     // strips relocs, like stripreloc.exe does
     {$SetPEFlags 1}
    // {$SETPEFlAGS IMAGE_FILE_RELOCS_STRIPPED or IMAGE_FILE_DEBUG_STRIPPED or IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_LOCAL_SYMS_STRIPPED or IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP}
     {$ENDIF}
    {$ENDIF}



    Предлагаю использовать не NO_STRIP_RELOC для отключения обрезки, а наоборот, включать обрезку только когда объявлен символ STRIP_RELOC. Не знаю как в старших версиях дельфей, но 2010-я мне сегодня заявила:

    [DCC Fatal Error] E2163 Too many conditional symbols

    Поэтому опасно плодить дополнительные символы, компилятор может обидеться )
  • SPeller © (27.10.10 06:03) [211]
    Еще проблема. При наличии манифеста ХР даже при выключенных темах контролы не отрисовываются. На форме просто области, заполняющиеся предыдущим содержимым экрана. Включение-отключение тем, DoubleBuffered никак не влияет. Форма с контролами находится в длл.
  • Vladimir Kladov © (27.10.10 06:04) [212]
    When using TBAssignEvents, left click works but right click does not

    As in 2.94, it works when event is assigned for toolbar itself, not for a button. (Uncomment
    //  Toolbar.OnTBClick := TOnEvent(MakeMethod(nil, @TBClick));


    )
  • Vladimir Kladov © (27.10.10 06:11) [213]
    [DCC Fatal Error] E2163 Too many conditional symbols

    В прежних Delphi ничего не говорил, просто переставал воспринимать после определенного числа символов в строке с дефинициями. Но для этого решение есть давнор: включается символ EXTERNAL_DEFINES, и символы помещаются в EXTERNAL_DEFINES.inc в нужном количестве в виде {$DEFINE символ}.

    А что это делает, и чем будет отличаться вариант с STRIP_RELOC, я как бы и не в курсе. Нету D2010 (IDE), могу только через dcc32, это неудобно.
  • Vladimir Kladov © (27.10.10 06:12) [214]
    WaitForTime уже есть, не помню с какой версии.
  • SPeller © (27.10.10 06:20) [215]

    > WaitForTime уже есть, не помню с какой версии.

    Точно... Давно не работал с KOL, забыл всё уже.


    > А что это делает, и чем будет отличаться вариант с STRIP_RELOC,
    >  я как бы и не в курсе. Нету D2010 (IDE), могу только через
    > dcc32, это неудобно.

    {$SetPEFlags 1} - указывает компилятору что надо вырезать из конечного модуля релоки. Для ЕХЕ это нормально, а вот ДЛЛ без релоков не сможет загрузиться. Правда, проблема плавающая, при билде проекта эта опция отрабатывает, длл получается без релоков и не загружается, а если делать компиляцию, то релоки присутствуют и длл работает.
  • Thaddy © (27.10.10 10:47) [216]
    Yes, but as i recall, this is documented. When I suggested this option, we made it clear this was only for exes and not for dll's.
    There are other issues, for example memory management.
    I suggest maybe a more generic switch like TARGET_EXE or TARGET_DLL would help for these cases?
  • Vladimir Kladov © (27.10.10 17:01) [217]
    I don't think that this is a big problem. Not a lot of programmers are creating dll's. Most of people use Delphi to create applications so I think it is normal to leave code untouched.
  • awkward (27.10.10 21:07) [218]
    мда.... а я ак раз ДЛЛки в основном и творю.... правда, на 5й и 7й дельфи...
  • SPeller © (28.10.10 02:02) [219]
    Владимир, что значит "никто не делает дллки?" :) Вы так шутите, да? :)
  • SPeller © (28.10.10 02:07) [220]

    > I suggest maybe a more generic switch like TARGET_EXE or
    > TARGET_DLL would help for these cases?

    I did not found how to determine which type of binary is producing in conditional symbols. If there is some way to do it - it should be used.
  • SPeller © (28.10.10 03:31) [221]
    Проблема: при сипользовании USE_MHTOOLTIP KOL не компилируется.
  • SPeller © (28.10.10 03:50) [222]
    Проблема: при использовании USE_GRAPHCTLS вываливается экзепшин при отрисовке в PaintGraphicChildren из-за мусора, возвращаемого TControl.GetChildCount.

    ЗЫ: Всегда использую PAS_VERSION
    ЗЫ: Версия U
  • zuker © (28.10.10 08:20) [223]
    проблема: Не грузится в KOLImageShow фрагмент изображения BITMAP_0 из файла ресурса (*.res)

    ImageList1.LoadBitmap('BITMAP_0',clWhite);
    ImageShow1.CurIndex:=0; ImageShow2.CurIndex:=1;
  • SPeller © (28.10.10 08:38) [224]
    Для Д2009 и выше нужно добавить:

    {$IFDEF _D2009orHigher}
    function CharInSet(C: AnsiChar; const CharSet: TSetOfChar): Boolean; overload; inline;
    function CharInSet(C: WideChar; const CharSet: TSetOfChar): Boolean; overload; inline;
    {$ENDIF}

    {$IFDEF _D2009orHigher}
    function CharInSet(C: AnsiChar; const CharSet: TSetOfChar): Boolean;
    begin
     Result := C in CharSet;
    end;

    function CharInSet(C: WideChar; const CharSet: TSetOfChar): Boolean;
    begin
     Result := (C < #$0100) and (AnsiChar(C) in CharSet);
    end;
    {$ENDIF}



    Это копипаст решения из сисутилс для случаев проверки string[n] in set. Поскольку set остался set of ansichar, а символы в string стали widechar - дельфи выдает ворнинг, типа, используйте CharInSet из SysUtils. Со вводом юникода они отметили ворнингами все места, где происходит неявное преобразование чего-либо касающегося строк и где может произойти потеря информации или данный код нужно переработать чтобы преобразования не было. И отсутствие ворнингов для меня правило хорошего тона при написании кода )

    Другие изменения для д2009 и выше (версия U):

    visual_xp_styles.inc:
    682:  S : KOLString;

    kol.pas:
    10198: function NewGraphLabel( AParent: PControl; const ACaption: KOLString ): PControl;

    11259: function Num2Bytes( Value : Double ) : KOLString;

    11278: function cHex2Int( const Value : KOLString) : Integer;

    11280: function Octal2Int( const Value: KOLString ) : Integer;

    11546: function StrIn( const S : AnsiString; const A : array of AnsiString ) : Boolean;

    соответствующие изменения заголовков функций в разделе реализации опущу

    20227:     if Value[ I ] in [ '0'..'7' ] then
    to
       {$IFDEF _D2009orHigher}
       if CharInSet(Value[I], ['0'..'7']) then
       {$ELSE}
       if Value[ I ] in [ '0'..'7' ] then
       {$ENDIF}

    20346:   if {$IFDEF UNICODE_CTRLS}WAnsiEq{$ELSE}StrEq{$ENDIF}( Copy( Value, 1, 2 ), '0x' ) then
  • Vladimir Kladov © (28.10.10 15:45) [225]
    при сипользовании USE_MHTOOLTIP KOL не компилируется.

    D:\D2010\bin>dcc32 -b d:\kol\kol.pas -DUSE_MHTOOLTIP
    Embarcadero Delphi for Win32 compiler version 21.0
    Copyright (c) 1983,2009 Embarcadero Technologies, Inc.
    d:\kol\KOLDEF.INC(254)
    d:\kol\KOLDEF.INC(254)
    d:\kol\delphidef.inc(48)
    d:\kol\delphicommctrl.inc(1569)
    d:\kol\KOL_ansi.inc(2317)
    d:\kol\KOLMHToolTip.pas(937)
    d:\kol\KOLMHToolTip.pas(937)
    d:\kol\KOLMHToolTip.pas(937)
    d:\kol\KOLMHToolTip.pas(937)
    d:\kol\KOLMHToolTip.pas(937)
    d:\kol\MCKfakeClasses200x.inc(51)
    d:\kol\KOL_ansi.inc(2317)
    d:\kol\KOLMHToolTip.pas(937)
    d:\kol\KOLMHToolTip.pas(937)
    d:\kol\KOL_ASM.inc(14887)
    d:\kol\KOL.pas(65765)
    94007 lines, 0.64 seconds, 236025 bytes code, 69536 bytes data.

    D:\D2010\bin>dcc32 -b d:\kol\kol.pas -DUSE_MHTOOLTIP -DUNICODE_CTRL
    Embarcadero Delphi for Win32 compiler version 21.0
    Copyright (c) 1983,2009 Embarcadero Technologies, Inc.
    d:\kol\KOLDEF.INC(254)
    d:\kol\KOLDEF.INC(254)
    d:\kol\delphidef.inc(48)
    d:\kol\delphicommctrl.inc(1569)
    d:\kol\KOL_ansi.inc(2317)
    d:\kol\KOLMHToolTip.pas(937)
    d:\kol\KOLMHToolTip.pas(937)
    d:\kol\KOLMHToolTip.pas(937)
    d:\kol\KOLMHToolTip.pas(937)
    d:\kol\KOLMHToolTip.pas(937)
    d:\kol\MCKfakeClasses200x.inc(51)
    d:\kol\KOL_ansi.inc(2317)
    d:\kol\KOLMHToolTip.pas(937)
    d:\kol\KOLMHToolTip.pas(937)
    d:\kol\KOL_ASM.inc(14887)
    d:\kol\KOL.pas(65765)
    94007 lines, 0.58 seconds, 236025 bytes code, 69536 bytes data.



    Не пойму в каком Delphi, в 2010 компилируется, см. Версия V.
  • Vladimir Kladov © (28.10.10 16:38) [226]
    На сайте версия 3.00.W, исправления для Graph_ctls и ImgShow (asm).

    2Speller
    У нас есть WInChar, если кому нужен, и он появился до того, как в Delphi добавили CharInSet. Другое дело, что где-то по-прежнему может использоваться in [ ]. Но я вычищал все предупреждения, заменяя максимально эффективным >= and <=. Или говорите, где (при каких условиях) лезут ворнинги.

    Лучше не изменения давайте, а командную строку для компиляции, чтобы те же предупреждения (или ошибки) выскочили.
  • SPeller © (29.10.10 01:30) [227]

    > Другое дело, что где-то по-прежнему может использоваться
    > in [ ]

    Вот оно и используется в строке 20227, функция Octal2Int.


    > Лучше не изменения давайте, а командную строку для компиляции,
    >  чтобы те же предупреждения (или ошибки) выскочили.

    Попробую. Но предыдущие изменения и так понятны, последнее - это функция cHex2Int.


    > Не пойму в каком Delphi, в 2010 компилируется, см. Версия
    > V.

    Добавьте к своей строке -DDEBUG. В релизной версии у меня тоже компилируется, как оказалось.
  • SPeller © (29.10.10 01:32) [228]

    > У нас есть WInChar

    Но в нем кода в 4 раза больше чем в дельфийском варианте )
  • Vladimir Kladov © (29.10.10 04:33) [229]
    Вот код из D2010.SysUtils:
    function CharInSet(C: WideChar; const CharSet: TSysCharSet): Boolean;
    begin
     Result := (C < #$0100) and (AnsiChar(C) in CharSet);
    end;



    Вы считаете, это корректное решение? Например, для случая W in [ 'А'..'Я' ] ?
    Эту функцию правильнее было бы назвать CharInAnsiSet, и документировать детально, что проверять не-анси символы она не может.

    А кода в 4 раза больше в самой функции или в каждой точке вызова? (Вообще говоря, в 4 раза больше даже во многих точках вызова не может привести к фатальному росту кода во всем приложении, если только речь не о добавлении N Кбайт из-за динамических массивов).

    Копипастить в любом случае не имеет смысла: ее придется обложить IFDEF'ами, т.к. прежние версии Delphi не поймут. А смысл тогда какой? Такую функцию где угодно можно разместить, в любом модуле у себя. Если бы она еще автоматически действовала на запись W in [x..y,z] , так ведь код все равно надо свой переписывать, чтобы обращаться к charinset'у.
  • SPeller © (29.10.10 06:28) [230]

    > Вы считаете, это корректное решение? Например, для случая
    > W in [ 'А'..'Я' ] ?

    Может и не совсем корректное, но зато быстрое и инлайном ) А поменять на это можно в самом KOL, окружив ifdef-ом, тем более что вроде как только одно место всплыло (ворнинг дельфя выдает).
  • Vladimir Kladov © (29.10.10 09:01) [231]
    Почему инлайном? (Код я посмотреть не могу, IDE не запускается). А если инлайном, то будет ли оно инлайном, если код скопипастить?

    Вообще, есть вариант достаточно эффективный:
    - для проверок наличия диапазона заменять на (w >= 'А') and (w <= 'Я')
    - для проверок некоторых символов использовать pos( w, 'АБВ' ) > 0

    Т.е. я по-прежнему не вижу смысла, у себя придется писать код в виде
    if {$IFDEF _D2009orHigher} CharInSet( w, {$ELSE} (w in {$ENDIF} [ ... ]) then



    либо ориентироваться строго на _D2010. Или все-таки сделать вариант CharInSet для других версий, заменив тип TSysCharSet на свой или объявить его для старших версий
    TSysCharSet = Set of KOLChar;

    и рекомендовать пользоваться функцией вместо действительно инлайн-кода, который генерит in.

    А то, что одно место, я его сам поправлю. Только до дома дойду вечером, там D2010 "стоит" без IDE, с -DDEBUG откомпилирую, и поправлю.

    Я вообще считаю, что то, как Embarcadero сделало с переопределением String на UnicodeString - неправильно в корне. Это можно было сделать опцией по умолчанию, но обязательно нужна была директива, возвращающая все на свои места. Это точно такое же неправильное решение, как решение об использовании unicode-16: решение как в Linux использовать UTF-8 было бы намного правильнее с точки зрения совместимости. Таоке ощущение, что это было специально для обеспечения максимальной несовместимости.
  • Vladimir Kladov © (29.10.10 17:41) [232]
    Версия 3.00.X на сайте. Поправил с -DDEBUG и заодно где увидел все in [ ] для Char. Не стал трогать только явный AnsiChar in [ ]. Восстановил работу MCK в Delphi2/3.
  • SPeller © (29.10.10 18:14) [233]

    > А если инлайном, то будет ли оно инлайном, если код скопипастить?

    Вообще, инлайны с 2007 версии точно поддерживаются :) И они реальные инлайны. Мне очень понравились инлайновые методы в хелперах для записей. Например, делаем хелпер для TRect, добавляем ему инлайн метод Width, вставляем строчку кода и вуаля, в коде везде пишем rect.width, а в конечном бинарном коде получаем работу с Left и Right без вызовов функций. Одно плохо - IDE не любит такие штуки. В Дельфи ХЕ этот момент вроде доработали, но не тестировал еще, до конца ли (я им плавающую ошибку из-за хелперов год ловил, когда поймал - в багтрекере ответили что в ХЕ поправлено). На работе сейчас используем 2010, и там очень успешно применяем свойства объектов, get методом которых являются инлайн функции. Т.е. обращаемся к свойству, а в конечном коде инлайн разворачивается и работает например с полями без лишних вызовов.


    > Т.е. я по-прежнему не вижу смысла, у себя придется писать
    > код в виде

    Я не настаиваю, в общем то, на решении методом копипаста, просто предложил ) Если можно обойтись без лишних добавок, то я только за )


    > с переопределением String на UnicodeString - неправильно
    > в корне

    На сколько я понял из исходников - rtl можно откомпилить без нативной поддержки юникода. Там есть не мало {$IFDEF UNICODE}.


    > это было специально для обеспечения максимальной несовместимости

    На самом деле аккуратно написанный код не нуждается в правке при переходе на юникод, дельфийцы над этим поработали хорошо. Единственный момент - это когда выделяется память под строки, тут да, мало кто писал конструкции вида GetMem(ptr, Length(str) * Sizeof(Char)), умножать на размер символа не привыкли. Но рабочие бизнес-приложения без этого легко обходятся. У нас, например, с парой пустяковых правок нормально откомпилился и заработал большой проект. Бал на 2007, переводили на 2009.
  • Vladimir Kladov © (29.10.10 18:36) [234]

    > аккуратно написанный код

    Дело не только в аккуратности. Паскаль имеет много гитик, связанных с его низкоуровневостью. Я видел, народ был в панике из-за использования строк в качестве динамических массивов при обмене данными в ком-объектах. Потом, кому на протяжении 20 лет могло в голову прийти писать умножение на размер оф чар, если он всегда = 1 ? Супермазохизмом никто не страдает, да еще код загромождать. Кто теперь будет просматривать миллионы строк старого кода только потому, что новые хозяева решили изменить незыблемую казалось бы аксиому. Да если и будет, сколько времени пройдет, пока будут устранены все такие неаккуратности. rtl перекомпилировать - это они сами пусть сначала попробуют. Я лично все равно не собираюсь на d20xx переходить, моя организация тоже - ей надо обеспечивать поддержку для платформы nt4/win2k, на висту/семерку/восьмерку никто здесь переходить не планирует до 2020 года точно. А если будут переходить, то уже не на delphi точно. C#, J#. Опцию надо было оставлять для совместимости, чтобы клиентов не терять хотя бы.
  • Jon © (30.10.10 00:33) [235]

    dcc32.exe -b KOL.pas -dUNICODE_CTRLS;

    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    KOLDEF.INC(257)
    KOLDEF.INC(257)
    delphidef.inc(48)
    delphicommctrl.inc(1569)
    KOL_unicode.inc(1185)
    KOL_unicode.inc(1185)
    KOL.pas(21882) Error: Undeclared identifier: 'EAX2PChar'
    KOL.pas(21883) Error: Undeclared identifier: 'EDX2PChar'
    KOL.pas(21984) Error: Undeclared identifier: 'EAX2PChar'
    KOL.pas(21985) Error: Undeclared identifier: 'EDX2PChar'
    KOL.pas(45664) Error: Undeclared identifier: 'EDX2PChar'
    KOL.pas(45854) Error: Undeclared identifier: 'EDX2PChar'
    KOL.pas(46553) Error: Undeclared identifier: 'RemoveStr'
    KOL_ASM.inc(2614) Error: Undeclared identifier: 'EDX2PChar'
    KOL_ASM.inc(9325) Error: Undeclared identifier: 'RemoveStr'
    KOL_ASM.inc(9535) Error: Undeclared identifier: 'RemoveStr'
    KOL_ASM.inc(10573) Error: Undeclared identifier: 'RemoveWStr'
    KOL_ASM.inc(10703) Error: Undeclared identifier: 'EDX2PChar'
    KOL_ASM.inc(10801) Error: Undeclared identifier: 'EmptyString'
    KOL_ASM.inc(14930)
    KOL.pas(65488)

  • Vladimir Kladov © (30.10.10 09:36) [236]
    3.00.Y - теперь и в Delphi3 можно использовать ключ -DUNICODE_CTRLS.

    Finally I created bat files to compile from different compilers using most often problem keys. May be this will help in future modifications.
  • Dufa © (30.10.10 14:56) [237]
    Новый вариант TStrList.IndexOfName падает =\
    пока не разобрался почему и когда именно..
  • Dufa © (30.10.10 15:17) [238]
    Постейший код падает


     list := NewStrListFromString('a=1'+crlf+'b=2');
     writeln(list.IndexOfName('a')); - тут и валится
     writeln(list.IndexOfName('b'));
     writeln(list.IndexOfName('c'));
     list.Free;

  • Dufa © (30.10.10 15:17) [239]
    Забыл сказать, что старый вариант(IndexOfName_old) - работает
  • Vladimir Kladov © (30.10.10 15:22) [240]
    Поправил ошибку в StrLComp_NoCase2. IndexOfName работает. 3.00.Y+
  • Vladimir Kladov © (31.10.10 19:58) [241]
    Если что, в kol.zip и mck.zip теперь лежит версия koldef.inc, учитывающая версию XE (VER220, символы _DXE и _DXEorHigher). Заодно немного поправил символы для _D2005.._D2010.
  • SPeller © (01.11.10 03:45) [242]

    > Потом, кому на протяжении 20 лет могло в голову прийти писать
    > умножение на размер оф чар, если он всегда = 1 ?

    Ну тут как бы не всё однозначно :) Сегодня он 1 байт, завтра 2, послезавтра 3. Тут просто нужно сразу писать с учетом будущего роста размерностей. Идеально конечно не напишешь, но свести к минимуму будущий геморрой - можно.


    > Кто теперь будет просматривать миллионы строк старого кода

    Тут тоже палка о двух концах. Старый код с миллионами строк конечно нет смысла тащить на новую платформу просто потому что потому. Но с другой стороны либо иде и компилятор полностью поддерживают юникод, либо нет. Это такая особенность дельфей. Нет у теперешней команды разработчиков оной достаточно ресурсов чтобы делать идеальные продукты. Я не углублялся, но говорят что борланд с кодгиром очень и очень сильно запустили дельфи, и теперь новой команде с ограниченными ресурсами надо не только наверстать технологические отставания (юникод, 64 бита, кросс-платформенность (линукс, мак), поддержка новых осей), но и исправить тысячи багов, которые тянулись издревле, но в погоне за выручкой на их решение закрывали глаза. Появился у них интересный продукт - RadPHP. Мне очень понравился. Очень сыроват еще, но начало сделано очень хорошее. Поэтому тут всем не угодишь.
    А новые проекты начинать на юникоде - вполне нормально и удобно.

    В 2010, кстати, вернули прежнюю палитру компонентов :)


    > на висту/семерку/восьмерку никто здесь переходить не планирует
    > до 2020 года точно

    Для некоторых это наоборот, критично )


    > А если будут переходить, то уже не на delphi точно. C#,
    > J#

    Не панацея. С этими фреймворками тоже не всё так просто. 4-й уже до 400 мбайт распух. Причем, при установке без спросу лезет в интернет и чего-то там качает. да, у микрософта больше возможностей по поддржке и развитию. Но нет ничего такого сверхъестественного с их продуктах чтобы прям стремиться туда. Да и дельфи к 2020 году может уже стать серьезным продуктом, избавившись от лихорадки наследственных проблем )
  • Mr (01.11.10 08:38) [243]

    > Да и дельфи к 2020 году может уже стать серьезным продуктом,
    >  избавившись от лихорадки наследственных проблем )
    >

    Супер, надо записать цитату "к 2020 году может уже стать". Прошу прощения за офтоп.
  • SPeller © (02.11.10 08:47) [244]
    Предлагаю в koldef.inc добавить для д2010 и выше вот такие строки:
    {$WEAKLINKRTTI ON}
    {$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])}
    Это говорит компилятору не компилировать в бинарник новое rtti. Бинарник от этого пухнет очень заметно при использовании классов.
  • SPeller © (02.11.10 08:47) [245]
    и возможно не только классов
  • Vladimir Kladov © (02.11.10 19:36) [246]
    Обновил KOL.zip и MCK.zip до 3.00.Z.
  • Дмитрий К © (03.11.10 00:18) [247]
    StrList.Values не работает. Похоже, что сравнивается только первый символ Name.
    program Project1;
    uses
     kol;
    var sl: PStrList;
    begin
     sl := NewStrList;
     try
       sl.SetText('001=a'#13'002=b'#13'003=c', false);
       msgok(sl.Values['002'] + #13#10 + sl.Values['015']);
     finally
       sl.Free;
     end;
    end.

  • Jon © (03.11.10 04:01) [248]
    The following result is incorrect - it worked in v3.00w:

    if StrLComp_NoCase('01', '02', MaxInt) = 0 then MsgOK('EQUAL');

  • Vladimir Kladov © (03.11.10 04:55) [249]
    In Z, there ir no message. It was fixed with Y+.
  • Jon © (03.11.10 10:06) [250]
    Definitely using KOL VERSION 3.00.Z
    KOL.pas 2,212,205 bytes 02/11/2010 22:27


    program Test;

    uses KOL;

    begin
     if StrLComp_NoCase('11', '12', MaxInt) = 0 then MsgOK('EQUAL');
    end.



    No conditional defines used. D7, WinXP.
  • Vladimir Kladov © (03.11.10 13:26) [251]
    Sorry. You are right. I incorrectly tested another function. And still it worked I decided that StrLComp_NoCase is fixed (still I remember that there was a fix for it in Y+). This is another fix uploaded, v3.00.Z1.
  • MTsv DN (03.11.10 21:03) [252]
    2 бага в версии Z.
    1.
    procedure TDirList.Sort(Rules: array of TSortDirRules);
    begin
     if FListPositions = nil then Exit;
     SortDirData.CaseSensitive := false; // надо добавить
     J := 0;


    Иначе sdrCaseSensitive не работает.

    2. При использовании USE_OLD_FLAGS и тем, в асм-версии не работает OnLeave.
    Вот проект: http://zalil.ru/29914948
  • Jon © (04.11.10 02:28) [253]
    Sorry, but it's still not working correctly:


    program Test;

    uses KOL;

    const
     x: PAnsiChar = '001';
     y: PAnsiChar = '002';

    begin
     if StrLComp_NoCase(x, y, 1) = 0 then MsgOK('EQUAL: 1 char');
     if StrLComp_NoCase(x, y, 2) = 0 then MsgOK('EQUAL: 2 char');
     if StrLComp_NoCase(x, y, 3) = 0 then MsgOK('EQUAL: 3 char');
     if StrLComp_NoCase(x, y, MaxInt) = 0 then MsgOK('EQUAL: Max char');
    end.



    Last working version was v2.912 - broken in v2.921 with introduction of StrLComp_NoCase2
  • Vladimir Kladov © (04.11.10 12:24) [254]
    3.00.Z2, fixes for StrLComp_NoCase, DirList.Sort

    2MTsvDn: в вашем проекте нет нигде OnLeave. Когда я добавил на кнопку и чекбокс, работает. С темами, с USE_OLD_FLAGS.
  • Dufa © (04.11.10 12:35) [255]

    function TStrList.GetLineName(Idx: Integer): AnsiString;
    var s: AnsiString;
       Q: PAnsiChar;
    begin
     s := ItemPtrs[ Idx ];
     Q := StrScan( PAnsiChar(s), fNameDelim );
     if Assigned(Q) then // без этого падает
       Q^ := #0;
     Result := PAnsiChar(s);
    end;



    Код для проверки:


    list := newstrlist;
    list.Add('name');
    msgok(list.LineName[0]);

  • Vladimir Kladov © (04.11.10 13:11) [256]
    3.00.Z3

    +Некоторые исправления visual_xp_styles.inc: были глюки с отображением текста.
  • MTsv DN (04.11.10 13:18) [257]
    2 Кладов
    В проект ничего не надо. Вот директивы: KOL_MCK;GRAPHCTL_XPSTYLES;UNICODE_CTRLS;USE_OLD_FLAGS;nil_events Наводишь курсор на уже существующий чекбокс он "загорается" (состояние hot), отводишь курсор все остается так же. В пас-версии все работает нормально.
  • MTsv DN (04.11.10 13:31) [258]
    Ну, и еще один вопрос. Вот код:
    NewForm2(Form2, Applet);
    Form2.Form.ShowModal;
    Free_And_Nil(Form2.Form);


    Form2 в первый вызов NewForm2 равно nil, а во второй нет. Разве не должно уничтожаться всё? Т.к.у меня в рабочем проекте при втором вызове создания дочерней формы все уже создано, nil равно только Form.

    Если так задумано, то как правильно уничтожать форму, чтобы всё уничтожалось?
  • Vladimir Kladov © (04.11.10 15:18) [259]
    3.00.Z4 на сайте. Неправильно использовалась команда BTR.

    Правильно уничтожать с обнулением так:
    Form2.Form.Free;
    Form2 := nil;

    Free_And_Nil нужен для многопоточности при работе с объектами. Да и он не панацея, еще корректнее защищать объекты семафорами или крит. секциями. Если не лень, можно в каждую форму добавлять метод для безопасного уничтожения, псевдокод:

    TmyForm.FreeNil( var F: PMyForm );
    var tmp: PMyForm;
    begin
       tmp := F;
       F := nil;
       tmp.Form.Free;
    end;



    Что-то такое.
  • Jon © (05.11.10 19:19) [260]
    http://kolmck.net/Components/KolCCtrls.zip does not compile with UNICODE_CTRLS:


    dcc32.exe -b KOLCCtrls.pas -dUNICODE_CTRLS;

    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    KOLDEF.INC(281)
    KOLDEF.INC(281)
    delphidef.inc(48)
    delphicommctrl.inc(1569)
    KOL_unicode.inc(1278)
    KOL_unicode.inc(1278)
    KOL_ASM.inc(14822)
    KOL.pas(65529)
    KOLCCtrls.pas(846) Warning: Variable 'fImgIndex' might not have been initialized
    KOLCCtrls.pas(959) Error: Incompatible types: 'Char' and 'WideChar'
    KOLCCtrls.pas(960) Error: Incompatible types: 'Char' and 'WideChar'
    KOLCCtrls.pas(1023) Error: Incompatible types: 'Char' and 'WideChar'
    KOLCCtrls.pas(1035) Error: Incompatible types: 'Char' and 'WideChar'
    KOLCCtrls.pas(1109) Warning: Suspicious typecast of WideString to PAnsiChar
    KOLCCtrls.pas(1436) Warning: Suspicious typecast of WideString to PAnsiChar
    KOLCCtrls.pas(1444) Warning: Suspicious typecast of WideString to PAnsiChar
    KOLCCtrls.pas(1671) Error: Incompatible types: 'Char' and 'WideChar'
    KOLCCtrls.pas(1769)
    KOLCCtrls.pas(168) Hint: Private symbol 'DoChange' declared but never used

  • Vladimir Kladov © (05.11.10 19:29) [261]
    I just tried, it is compiled OK with Delphi7.

    KOLCCtrls size    - 8 149 bytes.
    KOL_unicode.inc - 81 369 bytes.
    KOL v 3.00.Z4
  • Jon © (05.11.10 19:50) [262]
    Ah, you are quite right. My KOLCCtrls.pas was different version of size 51kb which included SPC CONTROLS (SPCDirectoryEdit, SPCFileList, SPCDirectoryList, SPCDriveCombo, SPCFilterCombo, SPCStatus). Get it here: http://zalil.ru/29922711
  • Vladimir Kladov © (05.11.10 20:23) [263]
    I think this would not be a big problem for you to fix it. These are not my components, moreover these are components of different authors (my is only KOLTrackbar, I created it just to demonstrate how to create components for KOL, and it seems has no problems with UNICODE_CTRLS).
  • Jon © (05.11.10 21:13) [264]
    My apologies, I had assumed that it was your component.
  • Jon © (07.11.10 04:46) [265]
    This code creates a runtime error when compiled with UNICODE_CTRLS defined:


    program Test;

    uses
     Windows, Messages, KOL;

    begin
     Applet := NewForm(Applet, '');
     with Applet^ do
     begin
       Font.ReleaseHandle;
       Font.AssignHandle(GetStockObject(DEFAULT_GUI_FONT));
       Font.FontHeight := -11;
     end;
     with NewLabel(Applet, 'Test')^ do
       Width := Canvas.TextWidth(Text) + 10;
     Run(Applet);
    end.



    The issue seems to be with the Font properties, but I cannot see why UNICODE_CTRLS would affect it.
  • Vladimir Kladov © (07.11.10 12:54) [266]
    program Test;

    uses
    Windows, Messages, KOL;

    begin
    Applet := NewForm(Applet, '');
    with Applet^ do
    begin
      Font.ReleaseHandle;
      Font.AssignHandle(GetStockObject(DEFAULT_GUI_FONT));
      Font.FontHeight := -11;
    end;
    with NewLabel(Applet, 'Test')^ do
    begin
      CreateWindow;
      Width := Canvas.TextWidth(Text) + 10;
    end;
    Run(Applet);
    end.



    Add CreateWindow; before any works with Canvas.
  • Jon © (07.11.10 20:22) [267]

    > Add CreateWindow; before any works with Canvas.

    Indeed, but I am curious why is it only necessary when using UNICODE_CTRLS and not without.
  • pingyu (08.11.10 10:17) [268]
    is there a way to compile KOL on FreePascal?(not on Lazarus)
  • Dufa © (08.11.10 12:53) [269]
    Vladimir Kladov, В NormalizeUnixText по-моему есть баг..
    Сейчас там (строка 22641, 22642):

                   S[J] := #13;
                   S[J-1] := #10;



    так вот если взять unix текст (строки разделены LF) то при обращении к .Items[] каждый элемент содержит LF на конце... а если поменять код на:


                   S[J] := #10;
                   S[J-1] := #13;



    то все в норме
  • Jon © (08.11.10 13:42) [270]

    > pingyu   (08.11.10 10:17) [268]
    >
    > is there a way to compile KOL on FreePascal?(not on Lazarus)

    Use conditional define symbol FPC


    Following conditional symbols can be used in a project (Project | Options | Directories/Conditional Defines) to change code generated a bit. There are following:

    FPC - Free Pascal version. KOL can be used with such compiler to create Win32 applications. To create Win-CE applications (with FPC compiler), use the separate version of KOL specially designed for it.

  • Vladimir Kladov © (08.11.10 17:05) [271]
    Indeed, but I am curious why is it only necessary when using UNICODE_CTRLS and not without.
    It is always necessary but this leads to memory corruption which consequences not always lead to immediate consequences. In this case hopefully in UNICODE_CTRLS the bug appeared very fast, without UNICODE it would appear much later and give very strange results.

    Actually problem is following. We call TCanvas.TextExtent, which require Canvas.Handle, which require TControl.Handle. While CreateWindow is working, its Canvas is destroyed, still execution returns to the method of non-existing more object. Any further changes in its structure made from the method corrupt memory which either is not allocated for objects or may be already is reallocated for objects. Either corruption can be found for free memory blocks or for its headers so further working of memory manager becomes impossible.

    Correct decision in this case is to add a call to CreateWindow into TControl.GetCanvas. But this is a rare situation (using Canvas before window creation), so I think I'll add it within {$IFDEF SAFE_CODE} ... {$ENDIF} brackets.

    And this is not 3.00 issue, it was existing very long time from the KOL's burning age.
  • Vladimir Kladov © (08.11.10 17:10) [272]
    is there a way to compile KOL on FreePascal?


    1) You should read a message from Thaddy de Koning in koldef.inc near
    {$IFDEF FPC} section.
    2) You should use Windows.pas and other \win units from earlier
    Borland Delphi, e.g. from Delphi 3. May be it is working for units
    from Delphi 5 too but I did not check it.
    3) Some small changes are necessary in KOL.pas.
    A set of assembler procedures starting from EAX2PChar were uncommented
    in last versions for some reasons by commenting directives {$IFDEF
    ASM_VERSION}
    with a mark //22 - just remove the mark //22 and allow
    the directive work. This section was changed in later versions, so may be other changes are necessary or no changes needed at all.
    4) To check that it works I used Free Pascal 2.2.1 but I think that
    all is the same for 2.4.0. Use following options (I just write [X] and
    (*) items, other items are not marked, but you may experiment):

    Syntax
    [X] Allow label and goto {default}
    [X] Use ANSI strings
    (*)
    Delphi compatible

    Generated code
    [X] Range checking
    [X] I/O checking
    [X] Integer overflow checking
    [X] Create smartlinkable units
    [X] Generate smaller code

    Processor
    (*) Pentium2/PentiumM/AMD
    (*)
    i386/i486

    Verbose - for your decision
    Browser - for your decision

    Assembler
    (*) Intel style assembler
    (*)
    Use default output

    Conditional defines
    NOT_USE_RICHEDIT;WIN

    Directories - change to your paths
    Units
    D:\FPC\2.2.4\units\i386-Win32\*
    D:\FPC\2.2.4\units\i386-Win32\rtl
    D:\FPC\2.2.4\units\i386-Win32
    c:\Borland\Delphi 3\Source\Rtl\Win
    D:\KOL

    Include files
    D:\KOL

  • Vladimir Kladov © (08.11.10 17:15) [273]
    Dufa ©   (08.11.10 12:53)

    Vladimir Kladov, В NormalizeUnixText по-моему есть баг..
    Сейчас там (строка 22641, 22642):

                  S[J] := #13;
                  S[J-1] := #10;


    Так давно это не проверял... Но ведь когда-то же проверял, и даже работало. Сейчас поищу, как сделать unix-текст для проверки. Это у которого #10 единственный используется, без #13. Вообще-то должно быть #13#10 в обычном тексте. Может и баг.
  • Vladimir Kladov © (08.11.10 17:51) [274]
    Точно баг. Забавно, что для тех целей для которых делал - работает все верно. После открытия и "исправление" этой функцией, текст сохраняется, и он дальше нормально открывается блокнотом. Но порядок управляющих символов не тот.

    Выложил 2 последних исправления как 3.00.Z6.
  • Dufa © (08.11.10 20:12) [275]

    > Выложил 2 последних исправления как 3.00.Z6.

    Отлично!


    > Забавно, что для тех целей для которых делал - работает
    > все верно


    Забавно и то, что когда-то и у меня работало %)
  • Jon © (09.11.10 16:05) [276]

    > Correct decision in this case is to add a call to CreateWindow
    > into TControl.GetCanvas. But this is a rare situation (using
    > Canvas before window creation), so I think I'll add it within
    > {$IFDEF SAFE_CODE} ... {$ENDIF} brackets.


    I tried the program from [265] with conditional defines UNICODE_CTRLS;SAFE_CODE; using KOL v3.00.Z6

    It seems that TControl.GetCanvas is never called, so therefore the SAFE_CODE/CreateWindow fixes are not used.
  • Vladimir Kladov © (09.11.10 16:39) [277]
    Jon, you are joking? :)

    Width := Canvas.TextWidth(Text) + 10;

    - is it in your code?


    function TControl.GetCanvas: PCanvas;
    asm
           PUSH     EBX
           PUSH     ESI
           {$IFDEF  SAFE_CODE}
           MOV      EBX, EAX
           CALL     CreateWindow --- press F5 here to make a breakpoint
           {$ELSE}
           XCHG     EBX, EAX
           {$ENDIF}



    In PAS_VERSION, KOL line 44774.
  • Jon © (09.11.10 16:52) [278]
    PAS_VERSION is correct. But ASM_VERSION is not.
    File KOL_ASM.inc is the same in both Z4 and Z6.

    function TControl.GetCanvas: PCanvas; // line 8910
    asm
           PUSH     EBX
           PUSH     ESI
           XCHG     EBX, EAX

           MOV      ESI, [EBX].fCanvas
           TEST     ESI, ESI
           JNZ      @@exit
    ...

  • Vladimir Kladov © (09.11.10 17:36) [279]
    Indeed, I forgot to update kol_asm.inc in the archine. Fixed now.
  • Jon © (09.11.10 17:42) [280]
    Thank you very much Vladimir.
  • Thaddy © (10.11.10 08:01) [281]
    [quote]is there a way to compile KOL on FreePascal?[/quote]
    I am experiencing some problems with freepascal after release 2.2.x That I discoverd yesterday when compiling fpc 2.5.1 from trunk.
    I will investigate this, it might be a bug in the compiler (the size of booleans has changed, it seems). Also, there are some functions commented out in the adapted windows.pas file that should now be included (like FindFileExtW etc).
    I will prepare a new version.
    For now, I suggest you use the version for wince, that also compiles win32 code, but is still based on kol 2.88. The version is stable.
    Since I have a few weeks off, I finally have the time to contribute.
  • thaddy © (10.11.10 16:34) [282]
    Ok,

    Here's a beta version for Freepascal 2.5.1 (trunk, today)
    http://fpc.kolmck.net//kol_for_fpc251.zip (ansi only)

    Backup kol.pas and kolansi.inc and replace with the files in the zip.

    Should compile,

    Please test. DO NOT USE the adapted windows.pas from ppdelphi, it is not necessary, all is in kol_ansi.inc
    Examples included, inccluding a simple batchfile and a special fpc.cfg
  • pingyu (10.11.10 18:00) [283]
    Thanks very much:)
  • thaddy © (10.11.10 21:36) [284]
    one file for fpc whois example was missing. Added and updated archive. (same name)
  • Ken (16.11.10 15:52) [285]
    Hi, I want to set controls name so I define USE_NAMES, but not works.
    I found the USE_NAMES define in mirror.pas has been commented, why is that?
    I need to change control's property base on its name.
  • Thaddy © (16.11.10 22:42) [286]
    You can uncomment it if you want USE_NAMES ;) to work...
    It is not on by default, because your executable will be larger with USE_NAMES defined...
  • Vladimir Kladov © (17.11.10 16:15) [287]
    There are no commented or uncommented defines USE_NAMES in the mirror.pas.
  • Ken (17.11.10 19:28) [288]
    Sorry for not informative.
    I mean the statements like this
    //    SL.Add( '   {$IFDEF USE_NAMES}' );
    //    SL.Add( Prefix + AName + '.Name := ''' + Name + ''';' );
    //    SL.Add( '   {$ENDIF}' );

    Form1_1.inc will be add:
      {$IFDEF USE_NAMES}
       Result.Form.SetName( Applet, 'Form1' ); or Result.pmTray.SetName( Result.Form, 'pmTray' );
      {$ENDIF}

    I made a multi-lang component, will iterate all controls on Form to chane its caption.
    Maybe my mistake, it use property Name not method SetName.
  • Vladimir Kladov © (17.11.10 23:59) [289]
    Property Name is for read only, to set it, SetName is used.
    Adding symbol USE_NAMES to project properties makes Name and SetName available.
    Can you upload or send by email or paste here in a message a simple project to demonstrate what is not working?
  • Ken (18.11.10 10:24) [290]
    When I create a new KOL MCK project, usually it will generate code automatically in Unit1_1.inc:
     {$IFDEF USE_NAMES}
      Result.Form.SetName( Applet, 'Form1' );
     {$ENDIF}

    but not in v3.00, although I can add code in Unit1.pas without problem.
     Form.SetName( Applet, 'Form1' );
  • Vladimir Kladov © (18.11.10 15:51) [291]
    Now understand. Just set TKOLForm.GenerateNames to true. In 3.00, I made so to provide more clear code in inc files.
  • Ken (18.11.10 20:17) [292]
    It working, thank you.
  • Ken (29.11.10 23:11) [293]
    Hi, I found use UNICODE_CTRLS, the EditBox will not trigger OnChar event, but recompile without UNICODE_CTRLS then works fine.
  • Dufa © (30.11.10 10:54) [294]
    Try OnKOLCha
  • Jon © (30.11.10 12:37) [295]

    > Hi, I found use UNICODE_CTRLS, the EditBox will not trigger OnChar event,
    > but recompile without UNICODE_CTRLS then works fine.


    Confirmed - the event does not trigger with UNICODE_CTRLS (KOL VERSION 3.00.Z6):


    program Test;

    uses
     Windows, KOL;

    procedure EditboxChar(Dummy: Pointer; Sender: PControl; var Key: KOLChar; Shift: DWORD);
    begin
     Applet.Caption := Sender.Caption;
    end;

    begin
     Applet := NewForm(nil, '');
     with NewEditbox(Applet, [])^ do
       OnKeyChar := TOnChar(MakeMethod(nil, @EditboxChar));
     Run(Applet);
    end.

  • Vladimir Kladov © (30.11.10 19:46) [296]
    KOL 3.00 Z7 на сайте. Но KEY_PREVIEW работать все равно не будет при UNICODE_CTRLS.
  • MTsv DN (01.12.10 09:03) [297]
    Строка 34786, заменить:
    if assigned( Self_.EV.fOnChar ) then


    на
    if assigned( Sender.EV.fOnChar ) then

  • Vladimir Kladov © (03.12.10 14:31) [298]
    3.00.Z8 положил. Плюс исправление для TBitmap.RLESaveToStream / pf4bit. Внимание: исправляет некорректность в MCK (нужен ребилд пакета).
  • Vladimir Kladov © (06.12.10 16:56) [299]
    3.00.Z9. Небольшие поправки в DoFileOp, KOLDirDlgEx (koladd) и еще парочка.
  • ReLock © (08.12.10 17:07) [300]
    Добрый день. Скажите, как этот пак правильно юзать? RAD Studio 2010. Вроде все поставил. Появилась панелька KOL. Прописал пути до исходников.
    Скачал с KOLMSK пустой проект DemoEmpty.zip. Компилю. Получаю ошибку:

    [Error] Empty.dpr(14): E2003 Undeclared identifier: 'Application'
    [Error] Empty.dpr(14): E2066 Missing operator or semicolon
    [Hint] Empty.dpr(14): H2243 Expression needs no Initialize/Finalize
    [Error] Empty.dpr(15): E2066 Missing operator or semicolon
    [Error] Empty.dpr(15): E2029 '(' expected but ',' found
    Failed
    Elapsed time: 00:00:00.1

    Перечитал темы форумов как юзать. Делаю проект. Сохраняю. Кидаю на форму KOLProject. Пишу имя проекта. Кидаю KOLForm. Сохраняю. Закрываю. Открываю названный в KOLProject проект. Компилю. Получаю:

    Checking project dependencies...
    Compiling Project1.dproj (Debug configuration)
    [DCC Fatal Error] mirror.pas(66): F1026 File not found: 'ExptIntf.dcu'
    Failed
    Elapsed time: 00:00:00.8

    Компонента KOLProject каждые 500 миллисекунд проверяет наличие изменений и предлагает сконвертить. Предложила. Согласился. Сконвертила. Пытаюсь откомпилить. Получяю ошибку:

    Error in module main: Declaration of class TForm1 is mising or incorrect.

    Извините за мой французский, но заеб..ло уже эта хрень.
  • Vladimir Kladov © (08.12.10 19:38) [301]
    D2010 раньше работал, сейчас не знаю, у меня его нет, и ставить эту хрень я больше не собираюсь. Я пользуюсь Delphi 5, 6, 7, в них нормально работает.
  • ReLock © (09.12.10 09:32) [302]
    Ну и на этом спасибо. Значит не судьба...
  • Thaddy © (10.12.10 17:33) [303]
    I will have a look.
    I just wrote a wizard (no mck, but for plain KOL) and it works, but there is a little problem:

    You can ONLY use conditional USE_UNICODECTRLS with D2010 for now.

    With Unicode it works fine, but not all third-party controls are converted for unicode.
  • Dy1 (15.12.10 21:22) [304]
    KOL 2.89, в Windows 7 под учёткой админа не создаются каталоги с помощью ForceDirectories. Как с этим в новой версии?
  • Vladimir Kladov © (16.12.10 04:43) [305]
    У меня создаются, только не в 2.89 пробовал, а в 3.хх, но не думаю, что это как-то влияет. UAC у меня убит, правда, насовсем, как бы его и не было. Видимо, у родительского каталога права владения не принадлежат админу. Попробуйте "овладеть" им до операции. Или в личном каталоге пользователя, который админ, работать.
 
Конференция "KOL" » KOL v 3.00 [Delphi, Windows]
Есть новые Нет новых   [120345   +8][b:0.002][p:0.048]