![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
версия 2.06 [Delphi, KOL/MCK, Windows]
Владимир Кладов © (2005-03-06 17:24:00)Новости от 6 марта 2005 года
Новости KOL и MCK (v2.06):
[*]KOL: функция Int2Ths несколько изменена и использует глобальную переменную ThsSeparator. По предложению Дмитрия Жарова a.k.a. Gandalf. Так же, asm-версия этой функции исправлена для случая отрицательного аргумента.
[-]MCK: исправлена опечатка в наименовании свойства GenerateSeparatorConstants (когда проект будет загружен в Delphi IDE после пересборки пакета, следует игнорировать все предупреждения).
[-]MCK: функция TKOLDataModule.Result_Form исправлена ECM (для случая USE_NAMES генерировался неверный код: nil.Name := ...).
[+]MCK: добавлено свойство TKOLListBox.LBItemHeight - автор ECM.
[-]KOL: исправлена функция TStream.WriteStrEx (теперь возвращает число записанных байтов).
[-]KOL: испрвлена функция NewGroupbox (asm-версия: начальный размер по умолчанию вычислялся неверно). Так же удалены ненужные стили окна (WS_GROUP, WS_TABSTOP) и устанавливается (новый) флажок fIsGroupBox (protected).
[*]KOL: для TabControl-а, изменение текущей закладки более не приводит к ее фокусирования (так как такое изменение могло быть выполнено программно из вашего кода, а не только по клику мыши).
[*]KOL: изменен метод TControl.SetRadioChecked для предотвращения фокусирования радиобокса, если этот метод вызывается из программы, а не в результате клика мыши.
[-]KOL: при наборе контролов, попадающих список для табулирования (Tabulate) контролы, имеющие дочерние табулируемые контролы, сами из списка теперь исключаются и более не фокусируются кнопкой табуляции.
[-]KOL: AutoSize изменен для WordWrap-контролов и для них автоматически меняет теперь только свойство Height.
[-]KOL: исправлен метод TBitmap.SetHandle.
[+]KOL: добавлены метод TList.AddItems и еще одна функция-конструктор: NewListInit.
[*]KOL: объекты TListEx, TWStrList, TWStrListEx, TMetafile, TDirChange, TCabFile, TAction, TActionList и сопутствующие функции, а так же функции WStrCopy, WStrCmp перемещены в модуль KOLadd.pas для сохранения размера модуля KOL.pas в пределах ограничения 65535 строк (иначе отладчик Delphi отказывается работать с модулем, вплоть до краха Delphi IDE).
[+]KOL: добавлен метод-функция TControl.MakeWordWrap.
[*]KOL: метод TControl.CreateWindow преобразован из процедуры в функцию (boolean) и может возвращать false - для безоконных контролов.
[+]KOL: добавлен набор графических контролов, с конструкторами-функциями: NewGraphLabel, NewWordWrapGraphLabel, NewGraphPaintBox, NewGraphCheckBox, NewGraphRadioBox, NewGraphButton, NewGraphEdit. MCK: добавлено свойство windowed для TKOLLabel, TKOLCheckBox, TKOLRadioBox, TKOLEditBox, TKOLPaintBox. Так же, свойство WordWrap доступно теперь для TKOLCheckBox, TKOLRadioBox, TKOLButton, хотя имеет эффект только для их безоконных версий (когда windowed = false). При добавлении в свойства проекта символа условной компиляции GRAPHCTL_XPSTYLES, графические контролы отрисовываются с использованием текущей темы под XP, и когда добавлен символ GRAPCTL_HOTTRACK, они еще и маркируются визуально при наведении мыши (если GRAPHCTL_XPSTYLES так же уже включен), и при этом втором символе для графических контролов работают события OnMouseEnter / OnMouseLeave.
Вид и поведение графических контролов такие же (или очень похожи) по сравнению с обычными оконными, хотя они не имеют дескриптора окна. Это может экономить так называемые "user resources" (несущественно для NT/2K/XP) и повышать быстродействие для форм, имеющих большое число таких дочерних элементов. Так же, графические контролы имеют дополнительные преимущества: события OnPrePaint / OnPaint / OnPostPaint, для большинства из них действует свойство WordWrap, а кнопка может содержать иконку вместе с тектом.
[*]KOL: изменение свойств TControl.Enabled, Parent, BoundsRect теперь вызывает Invalidate. Это необходимо для правильной работы графических контролов.
[*]KOL: процедура TerminateExecution объявлена в интерфейсной части KOL.pas. Это позволяет переопределить свою процедуру взамен Run слегка изменив ее код (например, увеличить приоритет обработки некоторых сообщений выбирая их из очереди сообщений первыми).
[+]KOL: для формы добавлено свойство KeyPreview (автор - truf), требуется включить так же символ условной компиляции KEY_PREVIEW в опции проекта. Нет специального свойства MCK, просто событие OnKeyDown срабатывает для формы до обработки WM_KEYDOWN в фокусном контроле.
Прочие новости:
[*]обновлено инструментальное приложение DiffLines (работает быстрее, исправлен вид для XP) и теперь с исходниками в дистрибутиве. См. в Инструментах.
BelchonokH (2005-03-12 21:29:00) [1]2 [57] Владимир Кладов (12.03.05 08:03)
Опс, извиняюсь! Действительно работают! Оказалось что просто перестало автоматом происходить событие OnPaint при OnMouseEnter/Leave, что как я понимаю очень хорошо! для данного случая пришлось принудительную перерисовку поставить.
BelchonokH (2005-03-12 09:58:00) [2]Хм, то ли я так криво установил новую версию... Про метку я тоже уже писал, а вот у меня теперь и в дереве узлы не добавляются... наверное стоит плюнуть на всё и ждать более новую версию...
Владимир Кладов (2005-03-12 08:03:00) [3]А как же OnMouseEnter/Leave для Панелей, это будет исправлено или самому надо вертеться? (ну просто очень надо нать, а то у меня скины так на
мышь реагируют)
пример? почему-то у меня работают
Sniper17 (2005-03-12 01:17:00) [4]почему-то у меня на метке перестал работать Wordwrap =(
т.е в дизайн-тайм он работает нормально, а в запущеном приложении не работает =(
thaddy (2005-03-11 23:45:00) [5]You can use the OnMouseMove event from the form on which the graphcontrols are and use the BoundsRect of the Graphcontrols to test if the mouse is in it. The BoundsRect is relative to the owning form or control. If you need a canvas, that would defeat the purpose of the graph controls:economize on resources!
BelchonokH (2005-03-11 21:52:00) [6]А как же OnMouseEnter/Leave для Панелей, это будет исправлено или самому надо вертеться? (ну просто очень надо нать, а то у меня скины так на мышь реагируют)
Владимир Кладов (2005-03-11 21:33:00) [7]Вообще имеет смысл сделать глобальную переменную DoNotDrawGraphCtlsUsingXPStyles, чтобы даже при включенном стиле в опциях все равно можно было отключить XP-like-рисование. Применение тут такое: если манифест лежит отдельно, то это делается обычно для того, чтобы дать возможность юзеру удалить/переместить его куда-нибудь и прога снова стала выглядеть в классике несмотря на. Тогда прога могла бы определить наличие отсутствия манифеста в директории запуска и установить true в этой переменной например при запуске.
С групбоксом я немного поборолся все-таки даже для этого случая. Не будет превращаться в кнопку. (Вообще-то в API groupbox это как раз и есть кнопка, просто для XP-стилей пришлось убрать соответствующий флажок в стиле контрола, иначе слишком сильно фликал он, постоянно перерисовываясь даже при проведении мышью).
Владимир Кладов (2005-03-11 14:18:00) [8]манифест нужен, даже если _XPSTYLES. Иначе смысл-то какой - граф. контролы будут в стиле ХР, а все остальное - ugly classic? :) А с манифестом все работает правильно.
ECM (2005-03-11 11:02:00) [9]Владимир Кладов (10.03.05 16:34) [49]
в mirror.pas в декларацию TKOLAction добавляется функция AdditionalUnits и добавляет KOLadd.
Маленькое уточнение. Я бы добавил KOLAdd еще и в TKOLActionList.
(При пустом ActionList - будет выскакивать ошибка, хотя тут достаточно будет создать хотя бы один Action, но все-таки...)
TKOLAction = class(TKOLObj)
...
protected
function AdditionalUnits: String; override;
...
TKOLActionList = class(TKOLObj)
...
protected
function AdditionalUnits: String; override;
...
function TKOLAction.AdditionalUnits: String;
begin
Result := ', KOLAdd';
end;
function TKOLActionList.AdditionalUnits: String;
begin
Result := ', KOLAdd';
end;
BelchonokH (2005-03-10 22:09:00) [10]Отправил примерчик письмом, Могу даже сказать, что ГрупБокс превращается скорее всего не в кнопку, а панель... хотя не знаю.
И всё таки вопрос, поскольку боюсь Вам письмом некогда будет отвечать, то спрошу тут ещё раз: OnMouseEnter/Leave для Панелей, то что их не происходит, это глюк текущей версии, или так всегда теперь будет?
Владимир Кладов (2005-03-10 16:34:00) [11]правильнее с TAction так:
{$IFDEF KOL_MCK}
type
TKOLAction = PAction;
TKOLActionList = PActionList;
{$ENDIF}
- прямо в KOLadd;
в mirror.pas в декларацию TKOLAction добавляется функция AdditionalUnits и добавляет KOLadd. Это все штатные средства для добавления "своих" контролов.
Для групбокса да перечеркнут, подправлю, но в кнопку не превращается, не получилось так сделать. Примерчик может вышлете, минимально достаточный?
Кто-нибудь хочет предложить код, чтобы новые AutoSize рисовались правильно в дизайн-тайм, мне совсем этим неинтересно озадачиваться.
ECM (2005-03-10 09:17:00) [12]Я думаю все-таки сначала неплохо бы "привести в порядок"
графические контролы - пока все сыровато - (может быть еще
на паре версий) - а потом вместе c KOLAdd выложить полный архив
SPeller (2005-03-10 07:24:00) [13]BelchonokH (10.03.05 7:10) [46]
может его лучше в архив КОЛ'а положить
Поддерживаю.
BelchonokH (2005-03-10 07:10:00) [14]2 BeZ [45]
Похоже сделать то можно и кнопку с картинкой и даже в KOL, а даёт оно см. [17]
2 Владимир Кладов
Остались две непонятныё вещи:
см. [40] 2)
и ещё одно, если файл KOLadd.pas был создан что бы уменьшить основной KOL.pas в размерах, то зачем его было отдельно выкладывать? может его лучше в архив КОЛ'а положить? тогда будешь точно уверен, что скачана нужная версия и искать его по сайту не придётся...
BeZ (2005-03-10 00:57:00) [15]>+]KOL: добавлен набор графических контролов, с конструкторами-
>функциями: NewGraphLabel, NewWordWrapGraphLabel,
>NewGraphPaintBox, NewGraphCheckBox, NewGraphRadioBox,
>NewGraphButton, NewGraphEdit.
извините за тупость, но как этим пользоваться? это в MCK доступно или использовать на чистом КОЛ? и что вообще это дает? можно ли с помошью этого сделать кнопку с картинкой и отобразить ее в стиле ХР?
thaddy (2005-03-09 22:17:00) [16]It is fabulous, as are the new incremental updates!
Thank you Vladimir!
fellix (2005-03-09 22:09:00) [17]> [39] dimaxx
"... не верь глазам своим" (Козьма Прутков)
Значит в файле тоже ошибка. Знаю, потому как у KOLadd 2.04 от 21 декабря размер порядка 30К, а у последнего больше 90К. Плюс дата - 5 марта. Плюс все "переносы" в нем присутствуют. Сказано же: "качается последняя".
BelchonokH (2005-03-09 21:05:00) [18]2 [17] Владимир Кладов (07.03.05 20:34)
Я на счёт ГрупБокса, когда нём лежат граф.контролы, и используются темы оформления, рамка групбокса перечеркивает его Caption, в таком виде при нажатии на него, он превращается в кнопку, так же стирая все граф. контролы лежащие на нём!
ECM (2005-03-09 20:43:00) [19]BelchonokH (09.03.05 20:26) [40]
TKOLActionList = PActionList;
TKOLAction = PAction;
в MCKFakeClasses.inc ну и конечно не собирается :( Как это поправить?
Только что отправил Кладову письмо:
Здравствуйте, Vladimir.
Обнаружил "проблемку" с ActionList в 2.07
Связана с переносом его в KOLAdd.
Могу предложить сл. решение:
[KOLAdd.pas]
добавить объявления:
...
TKOLAction = PAction;
...
TKOLActionList = PActionList;
[mirror.pas]
все строки содержащие:
:= 'uses Windows, Messages, ShellAPI, KOL'
заменить на
:= 'uses Windows, Messages, ShellAPI, KOL, KOLAdd'
У себя проверил - пока без замечаний...
Добавка KOLAdd в Uses - код не увеличит :)
BelchonokH (2005-03-09 20:26:00) [20]Скачал себе версию 2.07, всё бы ничего, только появилась туча вопросов!
1) Скачал KOLadd, собрал MCK, открыл проект с ActonList, пытаюсь собрать, выдает: Undeclared identifier TKOLActionList и показывает на строку
TKOLActionList = PActionList;
TKOLAction = PAction;
в MCKFakeClasses.inc ну и конечно не собирается :( Как это поправить?
2) Не происходит событий OnMouseEnter/OnMouseLeave для Panel, как их можно вызвать? (GRAPCTL_HOTTRACK не помогает)
2 Владимир Кладов: с Shift и wParam для событий мыши СПАСИБО, глаза открыли!!!