-
Изменений очень много. Цель - уменьшить размер объекта TControl в памяти. Удалось с 1,6 Кбайта до 300 с хвостиком байт, т.е. примерно в 5 раз. Размер кода в итоге сильно не пострадал. В отдельных частях даже выиграл. Могут быть несовместимости. Выкладываю после апробирования на некотором количестве мелких проектов и на одном большом. Просьба смотреть на своих проектах и если что искать баги и исправлять буду.
-
А в SVN это всё будет выкладываться?
-
я с свн не подружился. Tortoise SVN не пошел, Rapid SVN тоже не соединяется, других я не пробовал.
-
жаль. Но все равно - спасибо!
-
Привет
Владимир, давно хотел попросить. Прежде чем вывешивать апдейт, проверьте версии ВСЕХ файлов. Мало того, что Вы иногда не последние версии используете (сейчас, это конкретно visual_xp_styles.inc), так даже в Ваших архивах файлы разные. Кстати, именно этим и хорош SVN.
-
Добавлено Пока разгребаю версии, позже напишу по поводу компиляции проекта.
-
Кстати, нашел первую сложность. Строю окно (без аппелат, просто форма), помещаю туда Trackbar (компонент из KOLCCtrls), помещаю его в самый низ формы, задаю Anchor(true,false,true,true);
но при ресайзе формы координата Top контрола почему-то превышает высоту формы. На предыдущей версии KOL всё было нормально.
-
2 Кладовhttp://zalil.ru/29760737 - visual_xp_styles v.1.99 с моими последними изменениями и подгонкой под 3.00. 2 awkwardДумаю Владимир щас ответит, что KOLCCtrls не стандартный компонент KOL и он в него не в ответе 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;
-
> Думаю Владимир щас ответит, что KOLCCtrls не стандартный > компонент KOL и он в него не в ответе 8)
вот только в документации там стоит: (C) by Kladov Vladimir, 2002, 2007
Кстати, теперь возникли проблемы с уничтожением объектов. особенно где есть дочерние контролы и используется CustomObj
-
CustomObj я же не трогал. В чем проблема? В PAS_VERSION пробовали?
-
-
PAS_VERSION только что попробовал, ошибок нет. Возникают лишь в ассемблерной.
-
Осталось придумать на каком маленьком проекте проверить разницу. Сейчас что-нибудь придумаю.
-
Мда. Владимир, ну и обновление. Я даже установить не могу...только с флагами "USE_OLD_FLAGS; CMDACTIONS_RECORD"...как я понимаю отключают Ваши нововведения.
ПОЛНАЯ НЕСОВМЕСТИМОСТЬ С НЕКОТОРЫМИ КОМПОНЕНТАМИ (ДУМАЮ СО МНОГИМИ)!!! В частности, SATabs, QProg и mdvComboBoxEx...ваще не компилятся.
-
ToolbarAddButtons - не работает. Последний параметр не добавляется...
-
Эмм.. простейший проект.. падение при старте.. в районе: Result.Panel1 := NewPanel( Result.Form, esNone ).SetAlign ( caBottom ).SetSize( 0, 25 );
-
ToolbarAddButtons - это новая штука, только для использования вместе с grush. Параметр, в смысле кнопка? Так, проверил, вроде добавляется. Но это если grushcontrols новый. Сейчас выложу свежий.
-
Это если с GRAPHCTL_XPSTYLES.. и с новым visual_xp_styles из 7 поста, а вот без GRAPHCTL_XPSTYLES - вроде работает
-
Проект скомпилить удалось...но от этого не легче. Директивы: KOL_MCK;GRAPHCTL_XPSTYLES;UNICODE_CTRLS;USE_OLD_FLAGS;CMDACTIONS_RECORD
АСМ-версия: Вылет при создании в 1. NewImageList -> DoInitCommonControls
Поставил ПАС версию. В ПАС версии не работает: 2. Free для PWStrList. 3. TDirList.ScanDirectory
Это пока
-
Нет, не кнопка, а битмап. Груши это хорошо, тока почему без использования груш используется их код.
-
Обновил KOL.zip и grushcontrols. А, понял, ToolbarAddButtons вызывает новая версия MCK, если видит, что надо бы поместить новые операторы для автосайза кнопок. Но это если TBButtonsWidth <> 0 или TBAutoSizeButtons, Вы их меняли?
Буду visual_xp_styles смотреть, что там получилось.
-
> Вы их меняли? Естественно.
> 3. TDirList.ScanDirectory Не работает из-за косяка, упомянутом в 2.
-
>> А, понял, ToolbarAddButtons вызывает новая версия MCK, если >> видит, что надо бы поместить новые операторы для автосайза >> кнопок. Но это если TBButtonsWidth <> 0 или TBAutoSizeButtons, >> Вы их меняли? > Естественно. Ни смена TBAutoSizeButtons, ни TBButtonsWidth <> 0 не решают проблему. Параметр битмап не добавляется.
-
Объединяя. 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. Программу так запустить и не удалось!!!
-
Ну я примерно нашел, что это сочетание GRAPHCTL_XPSTYLE + asm. Нашел уже конкретно несколько мест, рою дальше. Думаю сегодня победить. (Чертова аэра, уже в глазах все мелькает).
-
Я так и думал, с выключенными темами не падает. Ну что же, придется потерпеть.
-
Владимир, посмотрите, пожалуйста 4ый пункт...как будет время
-
Вылет происходит при добавлении директивы UNICODE_CTRLS
-
Нашел, исправил KOL.zip, и с DoInitCommonControls тоже управился. Не помню, как раньше было, заменил в IFDEF на ASM_UNICODE. Я же так понимаю, проблема была именно с UNICODE_CTRLS.
-
MCK тоже новый лежит - с третьим параметром 0, когда битмапа нет. ImageList в ListView проверил, работает.
-
Наконец-то выключил темы. Как вы терпите этот мрак только.
-
С GRAPHCTL_XPSTYLES теперь не падает при старте, но панель с Align = caBottom - исчезает.. Без GRAPHCTL_XPSTYLES - вроде норм
-
У меня видно. Хотя не саму панель, а ее содержимое. Может, это камуфляж такой?
-
> Может, это камуфляж такой?
Нее.. на старой версии то работает нормально. А здесь панель целиком исчезает
-
Проверьте, что там не одновременно Align и Anchors используются.
-
-
Скачал - распаковал - запустил - упало. Открыл в Delphi - откомпилировал - запустил - все работает. Что не так?
-
А темы включены?
-
Да. Но нет опций, может в этом дело? Попробуйте у себе грохнуть файлы в папке проекта, распаковать и перекомпилировать. Если еще падает, надо снова забрать kol.zip и mck.zip. Больше пока нет идей.
-
> Да. Но нет опций, может в этом дело? Попробуйте у себе грохнуть > файлы в папке проекта, распаковать и перекомпилировать. > Если еще падает, надо снова забрать kol.zip и mck.zip. Больше > пока нет идей.Делал:Скачал снова kol.zip и mck.zip, отказался от сторонних компонентов и своих добавок, переставил KOL с ребилдом естесственно, также чистил проект и менял папку (на всякий случай). Итог: как падало, так и падает!!! Идея: Вы же говорили, что уменьшали размер TControl, как я понял пакованные данные ввели (не пинайте сильно, если ошибся), пользуетесь Delphi6, а я 2007, так может с менеджером памяти проблемы? Кстати, awkward [9], тоже упоминал про ошибку при уничтожении объектов. Запрос:У кого D2007 и ХР, проверьте, пожалуйста, проект на новом KOL и напишите о результатах. Проект: http://zalil.ru/29764390
-
P.S. > Но нет опций, может в этом дело? В смысле директив компиляции? Они есть просто я пользуюсь D2007, тючю они в другом файле.
-
> Запрос: > У кого D2007 и ХР, проверьте, пожалуйста, проект на новом KOL и напишите о результатах. Абсолютно "чистая" Windows XP SP3, Delphi 7 Lite, KOL v.3.00. Тестовый проект "валится". Используемые директивы: KOL_MCK; UNICODE_CTRLS. Отключение последней решает проблему.
-
Значится так. 1. По поводу уничтожения PKOLStrList с UNICODE_CTRLS. Вылет здесь:
if Assigned( fOnDestroy ) then
begin
fOnDestroy( @Self ); в третьем заходе, когда @fOnDestroy уже равно nil. Непонятно зачем было проверку в NIL_EVENTS ставить. Добавление директивы или удаление ее из кода решило проблему. 2. По поводу непрорисовки комбобокса. Виноват (а точнее зависит от наличия) manifest-файла. Буду искать.
-
> 2. По поводу непрорисовки комбобокса. Виноват (а точнее зависит от наличия) manifest-файла. Буду искать.Не до конца, как мне кажется, додумано использование DummyProc. Ошибка отрисовки кнопки здесь: if Assigned(Sender.EV.fOnBitBtnDraw) then надо заменить на: if Assigned(Sender.EV.fOnBitBtnDraw)and (@Sender.EV.fOnBitBtnDraw <> @DummyProc123_0) then Комбик вообще вручную не отрисовывается, т.ч. возможно из-за этого и подвисает...
-
Да, кстати, забыл сказать. Надо еще директиву GRAPHCTL_XPSTYLES добавить.
-
В общем, что с комбиком не знаю.
Проект, форма, апплет и один комбик на форме. Директивы: KOL_MCK;GRAPHCTL_XPSTYLES;UNICODE_CTRLS;NIL_EVENTS;USE_OLD_FLAGS;CMDACTIONS_RECO RD (а также без последних двух). Манифест-файл присутствует, темы включены.
Итог: Комбик не отрисовывается. Но стоит добавить любой визуальный элемент, даже пустой лэбел, комбик начинает нормально работать.
Хрень какая-то.
-
-
Похоже какая-то хрень с потоками...
-
> Проверьте, что там не одновременно Align и Anchors используются.
Оказывается исчезает не панель, а кнопки на ней! Либо они рисуются, либо еще что-то.. Хотя лабел и эдит на месте..
> У кого D2007 и ХР, проверьте, пожалуйста, проект на новом > KOL и напишите о результатах.
Turbo, XP - комбо бокс выглядит как УГ.. с GRAPHCTL_XPSTYLES и без него.
Но если сделать InitCommonControls; - все в норме
-
Поставил UNICODE_CTRLS - падение где-то в TObj.Final... NIL_EVENTS решает проблему.. Вообще идея NIL_EVENTS как-то не нравится мне..
Проект с NewDirChangeNotifier - сразу падение
-
Во втором проблема с созданием потока. А там опять же NIL_EVENTS.. только там ошибочно стоят директивы {$IFDEF SAFE_CODE} вместо {$IFDEF NIL_EVENTS}
NIL_EVENTS в топку...
-
Po povodu knopok, 4itaj post [44]
-
Ponjal. Respekt.
-
а мошт убрать все что связано с GRAPHCTL и XPSTYLES ибо нафиг надо ?
-
QAZ, это почему нафиг надо? :D
-
Из 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.
-
> это почему нафиг надо?
ну потому что GRAPHCTL актуален мог быть онли винда 95\98 а без XPSTYLES и так все работает,достаточно манифеста ну а рисовать кнопки програмно ,заместо винды - смешно и очень велосипедно
-
2QAZ: Вы не разобрались, а я не исправил комментарий. Первоначально были придуманы графические контролы. Кстати, вполне себе даже актуальные, хотя и в редких случаях. Например, 100 контролов на форме будут тормозить однозначно. Графических - не будут. Потом были дописаны visual_xp_styles. И приспособлены, чтобы обеспечить более корректную отрисовку некоторых оконных контролов, а заодно и реагировать на изменение темы. Не совсем в стиле KOL (включая только код для того, что есть), а скорее в стиле VCL (включить на всякий случай все, что только вдруг да понадобится), но это не ко мне, а к авторам. В примерах на баги нет ни одного графического контрола.
-
> а без 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.
Проверить смогу только завтра...
-
> Приведите пример bitbtn на API, чтобы было только манифеста > достаточно. Может я просто чего не так понял с этим контролом.
BCM_SETIMAGELIST
> Приведите пример grоupbox на API, чтобы не было зачеркивания > метки.
не в курсе о чем реч, но в винде то проблем не возникает ,значит можно Ж)
-
>> По поводу combobox + XPSTYLES - нужен InitCommonControls > Проверю.Действительно. Почему не знаю. Для себя в kol.pas сделал так: initialization
InitCommonControls;
-
>> Приведите пример bitbtn на API, чтобы было только манифеста достаточно. Может я просто чего не так понял с этим контролом. > > BCM_SETIMAGELIST Снимаю шляпу. До этого не докопал. Посмотрю что получится. Единственное, что меня смущает, что для каждого состояния кнопки нужно будет свое изображение (hot, disable, enable), наверное, а это соответственно размер. Сейчас, хоть и велосипед, с одним имэйджем.
>> Приведите пример grоupbox на API, чтобы не было зачеркивания метки. > > не в курсе о чем реч, но в винде то проблем не возникает,значит можно Ж) Не могу ссылку пока найти.
-
При переходе на новый MCK теряются закладки TabControl'a
-
> нужно будет свое изображение (hot, disable, enable), наверное
необязательно если картинка одна то она на все состояния также есть выравнивание по любому краю текста и картинки
-
> Например, 100 контролов на форме будут тормозить однозначно. > Графических - не будут
а нафига вменяемому прогеру стока контролов? мошт ему тогда чемто другим заняца Ж) я непротив графических контролов в принципе,т.е. конкретно самодельных, но вот перерисовывать стандартные.... вобщем хз
-
нафига вменяемому прогеру стока контролов? У меня тормоза были заметны на 16 эдитах (и паре комбобоксов), которые отображали состояние регистров эмулируемого процессора, в режиме трассировки это мешало. Речь не об одиночном нажатии, когда все просто перерисовалось один раз, а о трассе или удержании кнопки типа F8.
100 контролов, это совсем не предел, если сложная форма ввода. Требование на число полей ввода в форме определяет не программист, а заказчик. Ему требуется, чтобы было 100, значит, надо делать 100.
И как уже говорилось visual styles давно уже для других целей. В VCL групбокс перерисовывает код из VCL еще с тех пор, когда это был Borland Delphi. В API его делать - перечеркивается, если прозрачный. Так что проблемы есть.
Решение с BCM_SETIMAGELIST плохо тем, что оно действительно только с XP. На работе я работаю с NT4 и Windows2K, например. Впрочем, для картинки на кнопке есть способы и получше, чем bitbtn. Для чего имеется MouseTransparent в KOL и AcceptChildren в MCK. Это решение вообще универсальное, и под темами XP кнопка по теме, и под NT4 кнопка с картинкой и классическая одновременно.
-
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; const _TabControl1_Tab1 = 1; Result.TabControl1 := NewTabControl( Result.Form, [ ], [ ], nil, 0 ).SetAlign ( caClient ); -> Result.TabControl1 := NewTabControl( Result.Form, [ 'Tab0', 'Tab1' ], [ ], nil, 0 ).SetAlign ( caClient );
-
С табконтролом я протормозил. Как-то так получилось, что во всех проектах он не использовался. Дело, однако, не в том, что код иначе генерируется, и если Вы помните, исправлять код в UnitXXX_1.inc бессмысленно, т.к. этот код генерируется в MCK.
Пока решение именно такое: открыть руками dfm (в блокноте), найти объекты закладок на уровне, следующем за объектом TKOLTabControl, и переименовать их тип из TKOLPanel в TKOLTabPage. После этого открыть проект и на вопрос Delphi, следует ли скорректировать декларации, ответить утвердительно.
Надо попробовать сделать автоматическую конвертацию.
-
2 Кладов А что по поводу вылета при закрытии доч.формы с табконтролом?
-
Не вылетело. Или давайте примерный код.
Я выложил 3.00.B - kol.zip и mck.zip - миграция TabControl полу-автомат. Образуется некоторое число пустых закладок с теми же заголовками, их надо удалить вручную. Полностью автоматическое удаление дает странные результаты: все компилируется и сохраняется, но после повторного открытия формы какой-то затык, и форма не создается. Не стал разбираться глубоко, такой вариант, я думаю, вполне приемлем.
-
2 Кладов Какой код? Я тестовый проект дал. Сообщение [67]. И описание проблемы.
-
Да, я его скачивал. Но нет, пока не смотрел. Вроде и правда падает. Завтра смотреть буду.
-
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'
-
> Решение с BCM_SETIMAGELIST плохо тем, что оно действительно > только с XP
ну так для олда есть BM_SETIMAGE +\- BS_BITMAP,BS_ICON
-
> > Решение с BCM_SETIMAGELIST плохо тем, что оно действительно > > только с XP > ну так для олда есть BM_SETIMAGE +\- BS_BITMAP,BS_ICON для какого олда? Я сейчас встречаю w2k и выше.
-
> для какого олда?
от 95\nt4 до xp
-
Исправил падение (пример с таб-контролом). Причина не в соственно таб-контроле, в общем нашел.
Новые версии 3.00.C на сайте: KOL.zip, MCK.zip, ActiveKOL.zip, KOLadd.zip.
-
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
-
Event OnDropFiles not working too.
-
Там надо добавить лишь "EV."
-
3.00.D
-
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.
-
> Event OnDropFiles not working too.
> Там надо добавить лишь "EV."
No, the event does not fire. Tested with v3.00d too.
-
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)
-
Which version of KOLMHToolTip.pas are you using? Here is the latest: http://zalil.ru/29788607Can you add the correct one to the KOL release package please.
-
Версия 3.00.DОШИБКИ ПРИ КОМПИЛЯЦИИ ПРОЕКТА mckCtrls.pas1. SL.Insert( IndexOfBeginLine, 'const ToolbarButtonsArray_' + Name + ': array[' +
'0..' + IntToStr(Buttons_Count-1) + '] of PKOLChar = (' +
Buttons_List + ');'); KOL_ASM.inc1. 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.PAS1. function Int2Hex( Value : DWord; Digits : Integer ) : KOLString; 2. function Hex2Int( const Value : KOLString) : Integer; 3. function Int2Str( Value : Integer ) : KOLString; Другие ошибки1. procedure TForm1.KOLFormFormCreate(Sender: PObj);
begin
ListView1.Clear;
ComboBox1.Clear;
TreeView1.Clear;
Toolbar1.Clear;
RichEdit1.Clear;
Memo1.Clear;
EditBox1.Clear;
Label1.Clear;
ListBox1.Clear;
end; ВОПРОСЫ1. Зачем в StrReplace сделали KOLString? Для этих целей есть KOLStrReplace?
-
3.00.F
Зачем в StrReplace сделали KOLString? Для этих целей есть KOLStrReplace? Автоматически. Слишком много было предупреждений от D2010. Вернул.
По поводу MHToolTip. Новую версию я выложил. Просьба к авторам дальнейших версий учесть, что блок {$IFDEF interface} был изменен на {$IFDEF interface_part}.
-
Может 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;
...
-
2 КладовВладимир, повторяю ошибки которые вылазят при UNICODE_CTRLS: Версия 3.00.FmckCtrls.pas1. SL.Insert( IndexOfBeginLine, 'const ToolbarButtonsArray_' + Name + ': array[' +
'0..' + IntToStr(Buttons_Count-1) + '] of PKOLChar = (' +
Buttons_List + ');'); KOL_ASM.inc1. 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.PAS1. function Int2Hex( Value : DWord; Digits : Integer ) : KOLString; 2. function Hex2Int( const Value : KOLString) : Integer; 3. function Int2Str( Value : Integer ) : KOLString; Жирным выделено то, что надо исправить...либо объявление в KOL.PAS.
-
Ошибся чуток: KOL.PAS1. function Int2Hex( Value : DWord; Digits : Integer ) : KOLString; 2. function Hex2Int( const Value : KOLString) : Integer; 3. function Int2Str( Value : Integer ) : KOLString;
-
Владимир, а для чего поменяли этот участок кода?
function TThread.Execute: integer;
...
if F_AutoFree then
begin
H := FHandle;
FHandle := 0;
Free;
TerminateThread( H, 0 );
end;
старый вариант нормально работает
-
А зачем в Int2Str и прочих AnsiString заменено на KOLString?
-
Думаете там юникоде символы будут?
-
Где они вылазят? У меня ничего не вылазит на 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 раз в секунду.
-
Думаете там юникоде символы будут? Уверен, что будут. Они занимают 2 байта. Асм-код надо переделывать. В Windows не используется UTF-8.
-
> Нет, не работал прежний вариант нормально. Потоки не удаляются, > по крайней мере в Win7, и продолжают висеть. Особенно это > заметно, если создавать и убивать по 100 раз в секунду.
Вот мой тестовый проект program Project1;
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. Все нормально пашет. Покажите тот в котором прежний вариант не нормален
-
-
А вот почему у меня нет доступа к svn.
А чем Вы смотрите, что все нормально пашет? Я, например, process explorer'ом (SysInternals) смотрел.
-
> А вот почему у меня нет доступа к svn.
Дык сколько раз я предлагал сделать вам доступ и каждый раз вы отказывались ссылаясь на неработоспособность свн клиентов... Зарегтесь на sourceforge.net и сделаю права вам..
> А чем Вы смотрите, что все нормально пашет?
Им же и смотрю..
запустил.. смортю - 101 поток... жду примерно 5 сек.. и остается 1 поток
-
Да, я сейчас посмотрел на том большом проекте, больше такого нет (если строку закомментарить). Не знаю, что это было. Какой-то глюк промежуточной версии.
И что, на SourceForge через svn-клиентов работает? Или только web?
-
> Да, я сейчас посмотрел на том большом проекте, больше такого > нет (если строку закомментарить). Не знаю, что это было. > Какой-то глюк промежуточной версии.
а может ждали мало..
> И что, на SourceForge через svn-клиентов работает? Или только > web?
Скачать можно и без клиента (по файлово или через tarball), а вот чтоб заливать надо свн клиент
-
Или вы про зарегаца? Зарегаца можно по веб..
-
а может ждали мало Ждал столько же, сколько и со строчкой TerminateProcess, но в случае Terminate лишних вообще не появлялось. Поставлю в ifdef-скобки как обычно. По умолчанию без Terminate.
Так, D2010 приказал долго жить. При очередном запуске поломался, не смог загрузить какой-то пакадж, и теперь при любом запуске стоит в процессах около секунды и исчезает. Ремонт и переустановка не помогла. Проверять его синтаксические искусы больше не на чем. Разве только D2009+Upd1 поставить.
-
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.
-
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;
-
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); 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
-
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.
-
Судя по пас версии, надо и в асм добавить DIBPixels32bitWithAlpha, иначе не задействуется новый код
fGetDIBPixels := _GetDIBPixelsTrueColorAlpha
_GetDIBPixelsTrueColor ;
Есть еще одна улучшалка для TStrList:
...
procedure SortEx(const CompareFun: TCompareEvent);
...
procedure TStrList.SortEx(const CompareFun: TCompareEvent);
begin
SortData(@Self, fCount, CompareFun, @TStrList.Swap);
end;
Таким образом можно использовать настраеваемую сортировку Залил на свн 3.00.G.
-
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.
-
-
2 КладовЕще один баг: http://zalil.ru/29797062Неправильный подсчет размера текста. Сочетание директив обязательно такое: KOL_MCK;GRAPHCTL_XPSTYLES;UNICODE_CTRLS;nil_events
-
2 КладовТока щас сообразил. Ошибка появилась после смены объявления procedure TextArea( const Text : KOLString; var Sz : TSize; var P0 : TPoint ); То Вы сидите на D6 и ХР, то кинулись сразу на D2010 и семерку. Чем анси-версия-то не устраивала? Есть же WTextArea... Поясните уж тогда, почему в TextExtent и DrawText оставили AnsiString, потому что пока Вы это не используете?
-
Ну и до кучи.
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
-
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; 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;
Pls download ActiveKOL from kolmck.net, unit file size is 77 251 bytes.
-
-
Can you provide the correct download link for ActiveKOL. I used this one: http://kolmck.net/Components/dde_ole_activex/ActiveKOL.zipActiveKOL.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.
-
почему в TextExtent и DrawText оставили AnsiString, потому что пока Вы это не используете Потому что по этому поводу не ругался D2010. Важно убирать все предупреждения компилятора. Если этого не делать, то между огромным числом предупреждений менее существенных (таких как предупреждение о возможной потери информации при имплицитном преобразовании из WideString/WideChar/PWideChar в AnsiString/AnsiChar/PAnsiChar) начинают теряться более существенные предупреждения. Например, предупреждение о "подозрительном" (suspicious) приведении типа PWideChar к PAnsiChar является обязательным к устранению, речь идет уже скорее об ошибке, чем о предупреждении.
В случае TextArea более корректно привести для UNICODE_CTRLS к KOLString, т.к. размеры национальных символов могут отличаться от размеров символа '?', к которому они приводятся при преобразовании в Ansi. Более правильно и DrawText преобразовать, чтобы изображались иероглифы и умляуты как положено.
На D2010 я пересаживаться не собираюсь. Мне и D6 более чем хватает. Тем более эти жуткие тормоза в D2010. Единственное, для чего установил, это улучшить к нему адаптацию. А заодно и unicode_ctrls усовершенствовать.
-
Выложил kol.zip (H), mck.zip (поправил версии файлов), koladd.zip (DirDlgEx - фикс пиктограмм для режима 16 бит на экране).
В KOL.pas появился символ SPEED_FASTER, наверное, оставим его по умолчанию, уж очень эффект полезный (сортировка StrList с AnsiSort (nocase) быстрее в 6 раз).
-
я немного не в теме... Что с количеством директив? Я за их уменьшение :)
-
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)
-
По поводу 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. Вылетает при компиляции. Если оно не надо, то вопрос снимаю.
-
Confirmed:
program MDI_test;
uses KOL;
begin
Applet := NewForm(nil, 'MDI test');
NewMDIClient(Applet, 0); end.
-
Здравствуйте. Быть может, что-то путаю, но были испорчены: function TStrList.GetLineName(Idx: Integer): AnsiString; и function TStrList.GetLineValue(Idx: Integer): AnsiString;
кодом: Q := StrScan( PAnsiChar(s), '=' ); и Q := StrScan( Q, '=' );
Хотя рядом в файле лежат функции, где fNameDelim не игнорируется...
-
то с количеством директив? Я за их уменьшение :) Я тоже. Как версия зафиксируется, будем убирать хлам типа OLD_ALIGN (NEW_ALIGN вполне себе прижился), ADD_AUTOFREE4CONTROLS (уже давно прижился как основной) и т.п. Вообще, текущий набор опций таков, что никакие опции добавлять не нужно, кроме специальных случаев. Если надо очень много, есть EXTERNAL_DEFINES и это удобнее, чем в опциях проекта хранить.
-
По поводу MDI. program MDI_test; Это я поправлю сегодня. Но вы тоже молодец: в двух местах Add2AutoFree сделали, чтобы не забыло помереть. Не надо ни разу. При создании контрола дочерним он автоматом уже попадает в fAutoFree родителя, а более раза ему там нечего делать. В первый раз, добавляется в AutoFree вообще nil - контрол еще не создан.
-
рядом в файле лежат функции, где fNameDelim не игнорируется Я совсем забыл про fNameDelim, избавляясь от Parse. Поправлю сегодня.
-
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.
-
Thank you - can you recheck ActiveKOL as per [116] please.
-
Спасибо Большое [125].
-
Sorry, Jon. These were really different. May be file was locked when I updated it. I reuploaded it just now.
-
I mean ActiveKOL.zip, certainly.
-
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)); end.
But with KOL 3 I have to assign an Applet:
program Test;
uses KOL;
begin
Applet := NewForm(nil, '');
MsgOK(Int2Str(1)); end.
Is this a bug?
-
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); Run(Applet);
end.
Very strange..
-
Just tested [133] with PAS_VERSION and it works correctly.
-
Подтверждаю. При UNICODE_CTRLS асм-версия Int2Digs не пашет. А может и еще что, предполагаю: Int2Ths, Num2Bytes, String2PascalStrExpr
-
Поскольку Int2Digs использую, то пока отключил асм-версию.
-
KOL.zip 3.00.j on site with fixes.
Если и дальше так пойдет, все переведем в KOLString, кроме StrList (его как раз не желательно, для скорости некоторых алгоритмов).
-
> KOL.zip 3.00.j on site with fixes.
Thank you very much, master. Excellent work!
-
Первая стабильная версия 3.00...смотрю со "своей колокольни".
Единственное в секцию инициализации так и добавляю InitCommonControls.
-
на http://kolmck.net/ написано, что последняя версия 3.00 H для KOL и 3.00 G для МСК и аддонов. в компонентах обновлялись некоторые вещи, такие как тот же трекбар - дата неизменена (а в самом модуле убрали функцию ChannelRect + было б неплохо, чтоб добавилось trbBoth в TTrackbarOption и TBS_BOTH в TrackbarOptions в функции NewTrackbar - но это уже мелочи)
-
добавляю InitCommonControls А зачем? Я так разницы никакой не увидел.
написано, что последняя версия 3.00 H для KOL и 3.00 G для МСК На самом деле kol.zip 3.00.j обновлялся отдельно.
убрали функцию ChannelRect + было б неплохо, чтоб добавилось trbBoth в TTrackbarOption и TBS_BOTH в TrackbarOptions в функции NewTrackbar - но это уже мелочи Я ничего не убирал, поправил ту версию, что у меня была. Посмотрите, что поправил, подправьте вашу, вышлите\выложите, я обновлю.
-
Обновил KOLBook.rar, добавил PDF-вариант на сайт.
-
> Обновил KOLBook.rar, добавил PDF-вариант на сайт.
Вот этот супер, спасибо!
> А зачем? Я так разницы никакой не увидел.
Возможно это проявится если на форму положить только комбобокс и включить манифест.
Свн обновил до новой версии
-
если на форму положить только комбобокс и включить манифест
Делал, но как-то не различил различий. Если какие-то есть, расскажите, где их искать.
-
Чей-та не могу оставить коммент
-
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
-
У меня такого нет, на скачанном примере тоже. Выложил 3.00.К (только KOL.zip), в нем вызывается InitCommonControls для комбобокса при сочетании GRAPHCTL_XPSTYLES+UNICODE_CTRLS. +исправил сортировку Ansi в asm-версии, + ускорил DirList (особенно его сортировку).
-
[125] убрал в двух местах Add2AutoFree как сказали. с 3.00.К работает без ошибки. Большое Спасибо.:) если добавить замену (SysDcu7), при закрытии любого контрола вылет.
-
begin
UseDelphiMemoryManager;
Applet := NewForm(nil, 'MDI test').SetPosition(240, 120).SetClientSize(380, 280);
Должно исправить.
-
Работает как надо ;) Спасибо Мастер.
-
Уважаемые спецы. Досадная ошибка осталась в последней версии - не работает ListBox.Clear.
-
Исправлено. 3.00.L на сайте.
Заодно добавил NewMemBlkStream и еще на четверть ускорил работу DirList.
-
версия 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
-
3.00.M на сайте.
-
Перестал работать эвент Combobox.OnChange.. При выборе элемента OnChange не срабатывает.
Исправление: aChange := CBN_SELCHANGE, но т.к сейчас там стоит CBN_EDITCHANGE, то при изменении текста в комбобоксе эвент срабатывать не будет..
-
При выборе элемента срабатывает OnSelChange, так всегда (с не помню какой версии) было. OnChange - это для реакции на редактирование edit-части, когда она доступна для редактирования.
-
При определенных условиях неправильно работает 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
-
посмотрите ктонить, сохраняется ли значение tag у попапменю после использования этого меню раньше у меня tag становилось равно 32чегототаммногоцифр....
-
ResizeParentBottom
Обновление KOL.zip 3.00.o на сайте.
2 QAZ: Много цифр - как смотрели? fTag надо в Watch и курсором мыши смотреть, а не Tag.
-
> OnChange - это для реакции на редактирование edit-части, > когда она доступна для редактирования.
Вот раньше она и так и так работала.. но в принципе не критично. свн обновил
-
Раньше - это когда? Я проверил тестовый пример на версии 2.94++ - так же как и сейчас. Срабатывает на OnSelChange, если выбираю другой элемент из списка, а на OnChange - только при редактировании.
-
2.88 например
-
Понял: надо было тестировать только с событием OnChange. Версия 3.00.P на сайте. Осталась еще половина латинского алфавита.
-
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
-
KOLadd.pas line 2712 if i <> 0 then replace with if i > 0 then Or add #9 as a last char for ActionCaption.
-
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
-
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.
-
Хм, тройка нормально завелась под Д2010, с минимумом правок :) Посмотрим, может и пригодится ) Только варианты цопако с сисутилс тянет вместе с ActiveX юнитом...
-
И FakeVariants помог :) Надо же, помнится, вроде 2009-я брыкалась и тянула именно системный юнит вместо фейка.
-
Кстати, нужно заводить еще один тип: KOLWideString, помимо KOLString. Чтобы под Д2009 и выше он (как и KOLString) соответствовал родному дельфийскому типу UnicodeString. Это приведет к снижению количества неявных преобразований строк из одного вида в другой, и в результате - уменьшению бинарного кода и увеличению быстродействия. KOLWideString подразумевается что будет двухбайтовым всегда (под Д < 2009 он будет WideString), и использовать его в функциях/объектах с префиксом W.
-
Непонятно, в чем прикол с KOLWideString - есть же WideString, для случая, когда всегда нужен WideString?
-
toVladimir Kladov Jon © (21.10.10 00:40) [12] написал в DemoMDI kol(без мск) [Delphi, Windows]
-
В том, что это не нативный дельфийский тип. При работе в своем коде я (да и все) всегда используют 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, с тем же функционалом и той же обработкой, только двухбайтовый.
-
А заводить KOLWideString нужно для того, чтобы условной компиляцией приравнивать его либо к WideString либо к UnicodeString в зависимости от версии Дельфи. С 2009-й версии, когда появился UnicodeString, потребность в WideString для работы с юникодом внутри программы полностью отпала и стала даже вредна из-за постоянных преобразований строк туда-сюда. Перекодировки при этом нет, но всё равно это лишние операции и безосновательная потеря производительности.
-
SPeller PWideChar - просто указатель на строку с 0 на конце WideString - указатель на строку + перед самой строкой хранится ее длина.
А как строка UnicodeString представлена в памяти? (Кроме отзывов про него найти пока ничего не могу).
-
Т.е. Вы предлагаете заменить именно WideString на KOLWideString в KOL.pas ? Это можно. А разве для KOLString не нужно в D20xx переопределить его тоже как UnicodeString ?
-
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.
-
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
-
KOL.zip v 3.00.R is uploaded.
-
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)
-
3.00.R+ or change line 20549 to if Copy( Result, 1, 2 ) = KOLString('-') + ThsSeparator then
-
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
-
At least what I found: KEY_PREVIEW is not important, problem function is _NewControl only (but did not yet find why).
-
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.
-
Version 3.00.T+ on site.
-
> 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
-
When compiling v3.00.T+ in the IDE, I get this message:
[Fatal Error] KOL.pas(18249): Unterminated conditional directive
-
> 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 и выше.
-
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: уже сделано.
-
Еще вот думаю, может в Д2009 и выше следует по дефолту включать UNICODE_CTRLS?
-
Мне, честно говоря, D20XX не нужен как таковой. Уж так, для поддержания, раз уж на него народ зачем-то переходит. Наверное, кто не успел купить нормальный Delphi. Но я лучше буду пользовать нелегальную копию Delphi 3, чем ЭТО.
-
Версия 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%.
-
И опять какие-то артефакты с отрисовкой элементов. На тестовом проекте получить не удалось. Суть в том что после закрытия дочерней формы некоторые элементы не отрисовываются. В версии 3.00.P все было нормально.
-
А в пас-версии при закрытии вообще краш приложения.
-
> Vladimir Kladov © (25.10.10 08:21) [191] > > Мне, честно говоря, D20XX не нужен как таковой. Уж так, > для поддержания, раз уж на него народ зачем-то переходит. > Наверное, кто не успел купить нормальный Delphi. Но я лучше > буду пользовать нелегальную копию Delphi 3, чем ЭТО.
Ну, ХЕ (2011) уже более-менее жизнеспособна ) 2010 стала шустрее загружаться ) Юникод, хэлперы и ртти - вкусные. Поддержка хр, висты в вцл. Поэтому везде есть свои плюсы )
-
По поводу [193] и [194]. Баг в WndProc. А именно в 2х кусках кода: 1.
self_.RefInc;
TRY
if M.message = WM_KEYDOWN then
asm
nop
end;
Result := self_.WndProc( M );
FINALLY
self_.RefDec;
END;
Вернул старый код. 2. function TControl.WndProc( var Msg: TMsg ): Integer; RefInc и RefDec закомментировал.
-
В асм-версии только закомментировал RefInc/RefDec.
-
Это только на падения или на отрисовку тоже влияло? Поставил было, отлавливая свою ошибку, ошибку нашел, назад не вернул. Как бы не успел. Верну, без проблем. И еще, возвращать весь код в паскаль-версии нет особого смысла вроде бы: в реальности уже не отрабатывает этот кусок, кроме случая бага:
(Это WndFunc, а не WndProc, там тоже RefInc/RefDec был добавлен). Основной баг, который я нашел, когда-то багой не был, это была фича с двойным разрушением апплета в TerminateExecution. Ну и плюс в AlignChildrenProc не туда RefDec припечатал как выяснилось. После чего поспешил выложить T+. Не верю я, что новые Delphi когда-нибудь будут работать без тормозов в code insight. Когда при наборе кода комп регулярно замирает на несколько секунд, мне это не надо. Я вынужден либо отключать фичу, либо возвращаться к нормальному Delphi с адекватной скоростью реакции.
-
Версия 3.00.U на сайте. Проверьте со своим, MTsv DN.
-
> Версия 3.00.U на сайте. Проверьте со своим, MTsv DN. Подтверждаю. Баг исправлен (и пас- и асм-версии). Спасибо.
-
Версия 3.00.U. Еще один баг в асм-версии. Простой код if ListView1.RightClick then
beep(400,100); при нажатии левой/правой кнопкой на элементе валится где-то в глубинах WndFunc (вроде ;) ) Пас-версия работает корректно.
-
Код находится в procedure TForm1.ListView1Click(Sender: PObj); . Директивы: KOL_MCK;GRAPHCTL_XPSTYLES;UNICODE_CTRLS;nil_events
-
Фикс на сайте v3.00.V. Заодно чуть ускорил TLIST_FAST, и поправил KOLDirDlgEx (KOLadd.zip)
-
Issue from [186] remains (concerning ALT+SPACE with conditionals)
-
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))]);
Run(Applet);
end.
-
Issue from [186] remains (concerning ALT+SPACE with conditionals)
I answered: it should not work and now is not working in both cases.
-
Есть предложение немного доработать TThread до такого:
function WaitFor(ATimeOut: Cardinal = INFINITE): Integer;
ну и в коде
WaitForSingleObject(FHandle, ATimeOut);
Никаикх изменений в существующий пользовательский код. Отработку по таймауту коде можно определить возвращаемым значением метода WaitFor, которое будет равно константе STILL_ACTIVE.
-
Не-а. Не катит. До Delphi5 нет параметров со значениями по умолчанию. Добавить WaitForTime(timeout) могу.
-
Можно и так. Основной код вставить в WaitForTime, а из WaitFor вызывать его с параметром INFINITE
-
ВОт еще что. Уже обсуждалось, но осталось по прежнему. Проблема в том, что при работе с KOL в DLL возникает проблема из-за обрезки необходимых ей релоков. За это отвечает вот такая штука в koldef.inc:
Предлагаю использовать не NO_STRIP_RELOC для отключения обрезки, а наоборот, включать обрезку только когда объявлен символ STRIP_RELOC. Не знаю как в старших версиях дельфей, но 2010-я мне сегодня заявила: [DCC Fatal Error] E2163 Too many conditional symbols Поэтому опасно плодить дополнительные символы, компилятор может обидеться )
-
Еще проблема. При наличии манифеста ХР даже при выключенных темах контролы не отрисовываются. На форме просто области, заполняющиеся предыдущим содержимым экрана. Включение-отключение тем, DoubleBuffered никак не влияет. Форма с контролами находится в длл.
-
When using TBAssignEvents, left click works but right click does notAs in 2.94, it works when event is assigned for toolbar itself, not for a button. (Uncomment
)
-
[DCC Fatal Error] E2163 Too many conditional symbols
В прежних Delphi ничего не говорил, просто переставал воспринимать после определенного числа символов в строке с дефинициями. Но для этого решение есть давнор: включается символ EXTERNAL_DEFINES, и символы помещаются в EXTERNAL_DEFINES.inc в нужном количестве в виде {$DEFINE символ}.
А что это делает, и чем будет отличаться вариант с STRIP_RELOC, я как бы и не в курсе. Нету D2010 (IDE), могу только через dcc32, это неудобно.
-
WaitForTime уже есть, не помню с какой версии.
-
> WaitForTime уже есть, не помню с какой версии.
Точно... Давно не работал с KOL, забыл всё уже.
> А что это делает, и чем будет отличаться вариант с STRIP_RELOC, > я как бы и не в курсе. Нету D2010 (IDE), могу только через > dcc32, это неудобно.
{$SetPEFlags 1} - указывает компилятору что надо вырезать из конечного модуля релоки. Для ЕХЕ это нормально, а вот ДЛЛ без релоков не сможет загрузиться. Правда, проблема плавающая, при билде проекта эта опция отрабатывает, длл получается без релоков и не загружается, а если делать компиляцию, то релоки присутствуют и длл работает.
-
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?
-
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.
-
мда.... а я ак раз ДЛЛки в основном и творю.... правда, на 5й и 7й дельфи...
-
Владимир, что значит "никто не делает дллки?" :) Вы так шутите, да? :)
-
> 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.
-
Проблема: при сипользовании USE_MHTOOLTIP KOL не компилируется.
-
Проблема: при использовании USE_GRAPHCTLS вываливается экзепшин при отрисовке в PaintGraphicChildren из-за мусора, возвращаемого TControl.GetChildCount.
ЗЫ: Всегда использую PAS_VERSION ЗЫ: Версия U
-
проблема: Не грузится в KOLImageShow фрагмент изображения BITMAP_0 из файла ресурса (*.res)
ImageList1.LoadBitmap('BITMAP_0',clWhite); ImageShow1.CurIndex:=0; ImageShow2.CurIndex:=1;
-
Для Д2009 и выше нужно добавить:
function CharInSet(C: AnsiChar; const CharSet: TSetOfChar): Boolean; overload; inline;
function CharInSet(C: WideChar; const CharSet: TSetOfChar): Boolean; overload; inline;
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;
Это копипаст решения из сисутилс для случаев проверки 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
-
при сипользовании 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.
-
На сайте версия 3.00.W, исправления для Graph_ctls и ImgShow (asm).
2Speller У нас есть WInChar, если кому нужен, и он появился до того, как в Delphi добавили CharInSet. Другое дело, что где-то по-прежнему может использоваться in [ ]. Но я вычищал все предупреждения, заменяя максимально эффективным >= and <=. Или говорите, где (при каких условиях) лезут ворнинги.
Лучше не изменения давайте, а командную строку для компиляции, чтобы те же предупреждения (или ошибки) выскочили.
-
> Другое дело, что где-то по-прежнему может использоваться > in [ ]
Вот оно и используется в строке 20227, функция Octal2Int.
> Лучше не изменения давайте, а командную строку для компиляции, > чтобы те же предупреждения (или ошибки) выскочили.
Попробую. Но предыдущие изменения и так понятны, последнее - это функция cHex2Int.
> Не пойму в каком Delphi, в 2010 компилируется, см. Версия > V.
Добавьте к своей строке -DDEBUG. В релизной версии у меня тоже компилируется, как оказалось.
-
> У нас есть WInChar
Но в нем кода в 4 раза больше чем в дельфийском варианте )
-
Вот код из 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'у.
-
> Вы считаете, это корректное решение? Например, для случая > W in [ 'А'..'Я' ] ?
Может и не совсем корректное, но зато быстрое и инлайном ) А поменять на это можно в самом KOL, окружив ifdef-ом, тем более что вроде как только одно место всплыло (ворнинг дельфя выдает).
-
Почему инлайном? (Код я посмотреть не могу, IDE не запускается). А если инлайном, то будет ли оно инлайном, если код скопипастить? Вообще, есть вариант достаточно эффективный: - для проверок наличия диапазона заменять на (w >= 'А') and (w <= 'Я') - для проверок некоторых символов использовать pos( w, 'АБВ' ) > 0 Т.е. я по-прежнему не вижу смысла, у себя придется писать код в виде if CharInSet( w, (w in [ ... ]) then либо ориентироваться строго на _D2010. Или все-таки сделать вариант CharInSet для других версий, заменив тип TSysCharSet на свой или объявить его для старших версий TSysCharSet = Set of KOLChar; и рекомендовать пользоваться функцией вместо действительно инлайн-кода, который генерит in. А то, что одно место, я его сам поправлю. Только до дома дойду вечером, там D2010 "стоит" без IDE, с -DDEBUG откомпилирую, и поправлю. Я вообще считаю, что то, как Embarcadero сделало с переопределением String на UnicodeString - неправильно в корне. Это можно было сделать опцией по умолчанию, но обязательно нужна была директива, возвращающая все на свои места. Это точно такое же неправильное решение, как решение об использовании unicode-16: решение как в Linux использовать UTF-8 было бы намного правильнее с точки зрения совместимости. Таоке ощущение, что это было специально для обеспечения максимальной несовместимости.
-
Версия 3.00.X на сайте. Поправил с -DDEBUG и заодно где увидел все in [ ] для Char. Не стал трогать только явный AnsiChar in [ ]. Восстановил работу MCK в Delphi2/3.
-
> А если инлайном, то будет ли оно инлайном, если код скопипастить?
Вообще, инлайны с 2007 версии точно поддерживаются :) И они реальные инлайны. Мне очень понравились инлайновые методы в хелперах для записей. Например, делаем хелпер для TRect, добавляем ему инлайн метод Width, вставляем строчку кода и вуаля, в коде везде пишем rect.width, а в конечном бинарном коде получаем работу с Left и Right без вызовов функций. Одно плохо - IDE не любит такие штуки. В Дельфи ХЕ этот момент вроде доработали, но не тестировал еще, до конца ли (я им плавающую ошибку из-за хелперов год ловил, когда поймал - в багтрекере ответили что в ХЕ поправлено). На работе сейчас используем 2010, и там очень успешно применяем свойства объектов, get методом которых являются инлайн функции. Т.е. обращаемся к свойству, а в конечном коде инлайн разворачивается и работает например с полями без лишних вызовов.
> Т.е. я по-прежнему не вижу смысла, у себя придется писать > код в виде
Я не настаиваю, в общем то, на решении методом копипаста, просто предложил ) Если можно обойтись без лишних добавок, то я только за )
> с переопределением String на UnicodeString - неправильно > в корне
На сколько я понял из исходников - rtl можно откомпилить без нативной поддержки юникода. Там есть не мало {$IFDEF UNICODE}.
> это было специально для обеспечения максимальной несовместимости
На самом деле аккуратно написанный код не нуждается в правке при переходе на юникод, дельфийцы над этим поработали хорошо. Единственный момент - это когда выделяется память под строки, тут да, мало кто писал конструкции вида GetMem(ptr, Length(str) * Sizeof(Char)), умножать на размер символа не привыкли. Но рабочие бизнес-приложения без этого легко обходятся. У нас, например, с парой пустяковых правок нормально откомпилился и заработал большой проект. Бал на 2007, переводили на 2009.
-
> аккуратно написанный код
Дело не только в аккуратности. Паскаль имеет много гитик, связанных с его низкоуровневостью. Я видел, народ был в панике из-за использования строк в качестве динамических массивов при обмене данными в ком-объектах. Потом, кому на протяжении 20 лет могло в голову прийти писать умножение на размер оф чар, если он всегда = 1 ? Супермазохизмом никто не страдает, да еще код загромождать. Кто теперь будет просматривать миллионы строк старого кода только потому, что новые хозяева решили изменить незыблемую казалось бы аксиому. Да если и будет, сколько времени пройдет, пока будут устранены все такие неаккуратности. rtl перекомпилировать - это они сами пусть сначала попробуют. Я лично все равно не собираюсь на d20xx переходить, моя организация тоже - ей надо обеспечивать поддержку для платформы nt4/win2k, на висту/семерку/восьмерку никто здесь переходить не планирует до 2020 года точно. А если будут переходить, то уже не на delphi точно. C#, J#. Опцию надо было оставлять для совместимости, чтобы клиентов не терять хотя бы.
-
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)
-
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.
-
Новый вариант TStrList.IndexOfName падает =\ пока не разобрался почему и когда именно..
-
Постейший код падает
list := NewStrListFromString('a=1'+crlf+'b=2');
writeln(list.IndexOfName('a')); - тут и валится
writeln(list.IndexOfName('b'));
writeln(list.IndexOfName('c'));
list.Free;
-
Забыл сказать, что старый вариант(IndexOfName_old) - работает
-
Поправил ошибку в StrLComp_NoCase2. IndexOfName работает. 3.00.Y+
-
Если что, в kol.zip и mck.zip теперь лежит версия koldef.inc, учитывающая версию XE (VER220, символы _DXE и _DXEorHigher). Заодно немного поправил символы для _D2005.._D2010.
-
> Потом, кому на протяжении 20 лет могло в голову прийти писать > умножение на размер оф чар, если он всегда = 1 ?
Ну тут как бы не всё однозначно :) Сегодня он 1 байт, завтра 2, послезавтра 3. Тут просто нужно сразу писать с учетом будущего роста размерностей. Идеально конечно не напишешь, но свести к минимуму будущий геморрой - можно.
> Кто теперь будет просматривать миллионы строк старого кода
Тут тоже палка о двух концах. Старый код с миллионами строк конечно нет смысла тащить на новую платформу просто потому что потому. Но с другой стороны либо иде и компилятор полностью поддерживают юникод, либо нет. Это такая особенность дельфей. Нет у теперешней команды разработчиков оной достаточно ресурсов чтобы делать идеальные продукты. Я не углублялся, но говорят что борланд с кодгиром очень и очень сильно запустили дельфи, и теперь новой команде с ограниченными ресурсами надо не только наверстать технологические отставания (юникод, 64 бита, кросс-платформенность (линукс, мак), поддержка новых осей), но и исправить тысячи багов, которые тянулись издревле, но в погоне за выручкой на их решение закрывали глаза. Появился у них интересный продукт - RadPHP. Мне очень понравился. Очень сыроват еще, но начало сделано очень хорошее. Поэтому тут всем не угодишь. А новые проекты начинать на юникоде - вполне нормально и удобно.
В 2010, кстати, вернули прежнюю палитру компонентов :)
> на висту/семерку/восьмерку никто здесь переходить не планирует > до 2020 года точно
Для некоторых это наоборот, критично )
> А если будут переходить, то уже не на delphi точно. C#, > J#
Не панацея. С этими фреймворками тоже не всё так просто. 4-й уже до 400 мбайт распух. Причем, при установке без спросу лезет в интернет и чего-то там качает. да, у микрософта больше возможностей по поддржке и развитию. Но нет ничего такого сверхъестественного с их продуктах чтобы прям стремиться туда. Да и дельфи к 2020 году может уже стать серьезным продуктом, избавившись от лихорадки наследственных проблем )
-
> Да и дельфи к 2020 году может уже стать серьезным продуктом, > избавившись от лихорадки наследственных проблем ) >
Супер, надо записать цитату "к 2020 году может уже стать". Прошу прощения за офтоп.
-
Предлагаю в koldef.inc добавить для д2010 и выше вот такие строки: {$WEAKLINKRTTI ON} {$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])} Это говорит компилятору не компилировать в бинарник новое rtti. Бинарник от этого пухнет очень заметно при использовании классов.
-
и возможно не только классов
-
Обновил KOL.zip и MCK.zip до 3.00.Z.
-
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.
-
The following result is incorrect - it worked in v3.00w: if StrLComp_NoCase('01', '02', MaxInt) = 0 then MsgOK('EQUAL');
-
In Z, there ir no message. It was fixed with Y+.
-
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.
-
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.
-
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
-
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
-
3.00.Z2, fixes for StrLComp_NoCase, DirList.Sort
2MTsvDn: в вашем проекте нет нигде OnLeave. Когда я добавил на кнопку и чекбокс, работает. С темами, с USE_OLD_FLAGS.
-
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]);
-
3.00.Z3
+Некоторые исправления visual_xp_styles.inc: были глюки с отображением текста.
-
2 Кладов В проект ничего не надо. Вот директивы: KOL_MCK;GRAPHCTL_XPSTYLES;UNICODE_CTRLS;USE_OLD_FLAGS;nil_events Наводишь курсор на уже существующий чекбокс он "загорается" (состояние hot), отводишь курсор все остается так же. В пас-версии все работает нормально.
-
Ну, и еще один вопрос. Вот код: NewForm2(Form2, Applet);
Form2.Form.ShowModal;
Free_And_Nil(Form2.Form); Form2 в первый вызов NewForm2 равно nil, а во второй нет. Разве не должно уничтожаться всё? Т.к.у меня в рабочем проекте при втором вызове создания дочерней формы все уже создано, nil равно только Form. Если так задумано, то как правильно уничтожать форму, чтобы всё уничтожалось?
-
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; Что-то такое.
-
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
-
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
-
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
-
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).
-
My apologies, I had assumed that it was your component.
-
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.
-
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.
-
> Add CreateWindow; before any works with Canvas.
Indeed, but I am curious why is it only necessary when using UNICODE_CTRLS and not without.
-
is there a way to compile KOL on FreePascal?(not on Lazarus)
-
Vladimir Kladov, В NormalizeUnixText по-моему есть баг.. Сейчас там (строка 22641, 22642):
S[J] := #13;
S[J-1] := #10;
так вот если взять unix текст (строки разделены LF) то при обращении к .Items[] каждый элемент содержит LF на конце... а если поменять код на:
S[J] := #10;
S[J-1] := #13;
то все в норме
-
> 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.
-
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.
-
is there a way to compile KOL on FreePascal?
1) You should read a message from Thaddy de Koning in koldef.inc near
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 with a mark 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
Delphi compatible
Generated code
[X] Range checking
[X] I/O checking
[X] Integer overflow checking
[X] Create smartlinkable units
[X] Generate smaller code
Processor
i386/i486
Verbose - for your decision
Browser - for your decision
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
-
Dufa © (08.11.10 12:53)
Vladimir Kladov, В NormalizeUnixText по-моему есть баг.. Сейчас там (строка 22641, 22642): S[J] := #13; S[J-1] := #10;
Так давно это не проверял... Но ведь когда-то же проверял, и даже работало. Сейчас поищу, как сделать unix-текст для проверки. Это у которого #10 единственный используется, без #13. Вообще-то должно быть #13#10 в обычном тексте. Может и баг.
-
Точно баг. Забавно, что для тех целей для которых делал - работает все верно. После открытия и "исправление" этой функцией, текст сохраняется, и он дальше нормально открывается блокнотом. Но порядок управляющих символов не тот.
Выложил 2 последних исправления как 3.00.Z6.
-
> Выложил 2 последних исправления как 3.00.Z6.
Отлично!
> Забавно, что для тех целей для которых делал - работает > все верно
Забавно и то, что когда-то и у меня работало %)
-
> 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.
-
Jon, you are joking? :) Width := Canvas.TextWidth(Text) + 10; - is it in your code?
function TControl.GetCanvas: PCanvas;
asm
PUSH EBX
PUSH ESI
MOV EBX, EAX
CALL CreateWindow --- press F5 here to make a breakpoint
XCHG EBX, EAX
In PAS_VERSION, KOL line 44774.
-
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; asm
PUSH EBX
PUSH ESI
XCHG EBX, EAX
MOV ESI, [EBX].fCanvas
TEST ESI, ESI
JNZ @@exit
...
-
Indeed, I forgot to update kol_asm.inc in the archine. Fixed now.
-
Thank you very much Vladimir.
-
[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.
-
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
-
Thanks very much:)
-
one file for fpc whois example was missing. Added and updated archive. (same name)
-
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.
-
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...
-
There are no commented or uncommented defines USE_NAMES in the mirror.pas.
-
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.
-
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?
-
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' );
-
Now understand. Just set TKOLForm.GenerateNames to true. In 3.00, I made so to provide more clear code in inc files.
-
It working, thank you.
-
Hi, I found use UNICODE_CTRLS, the EditBox will not trigger OnChar event, but recompile without UNICODE_CTRLS then works fine.
-
Try OnKOLCha
-
> 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.
-
KOL 3.00 Z7 на сайте. Но KEY_PREVIEW работать все равно не будет при UNICODE_CTRLS.
-
Строка 34786, заменить: if assigned( Self_.EV.fOnChar ) then на if assigned( Sender.EV.fOnChar ) then
-
3.00.Z8 положил. Плюс исправление для TBitmap.RLESaveToStream / pf4bit. Внимание: исправляет некорректность в MCK (нужен ребилд пакета).
-
3.00.Z9. Небольшие поправки в DoFileOp, KOLDirDlgEx (koladd) и еще парочка.
-
Добрый день. Скажите, как этот пак правильно юзать? 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.
Извините за мой французский, но заеб..ло уже эта хрень.
-
D2010 раньше работал, сейчас не знаю, у меня его нет, и ставить эту хрень я больше не собираюсь. Я пользуюсь Delphi 5, 6, 7, в них нормально работает.
-
Ну и на этом спасибо. Значит не судьба...
-
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.
-
KOL 2.89, в Windows 7 под учёткой админа не создаются каталоги с помощью ForceDirectories. Как с этим в новой версии?
-
У меня создаются, только не в 2.89 пробовал, а в 3.хх, но не думаю, что это как-то влияет. UAC у меня убит, правда, насовсем, как бы его и не было. Видимо, у родительского каталога права владения не принадлежат админу. Попробуйте "овладеть" им до операции. Или в личном каталоге пользователя, который админ, работать.
|