-
Сделал слияние изменений за 2 года. См. на сайте kolmck.net, архивы kol.zip, mck.zip, koladd.zip. Прежние архивы доступны с суффиксом 288 в имени. Новости от 30 марта 2010 г. (KOL & MCK v2.89)
[*]
UNI
Добавлен символ условной компиляции FORCE_ALTERNATEFILENAME для использования альтернативных имен файлов и путей для UNICODE версии.
Исправления для лучшей поддержки UNICODE версии в методах и функциях FBitBtnGetCaption, NewMDIChild, TGraphicTool.SetFontName, ExcludeAmpersands.
[+]
Добавлен метод TCanvas.OffsetAndRotate для упрощения манипуляций с преобразованием мировых координат канвы.
VK
[+]
Добавлен метод TControl.TBClear для удаления всех кнопок на тулбаре и свойство TControl.TBButtonLParam для доступа к значению LParam кнопки на тулбаре.
D[u]fa
[+]
Добавлена функция Extended2StrDigits( D: Double; n: Integer ), которая при форматировании обеспечивает ровно n цифр после десятичной точки.
VK
[+]
Добавлен метод TIniFile.ValueDouble для чтения и записи вещественных чисел в ини-файле.
VK
[*]
Тип TWindowsVersion расширен значением wvSeven (для функции WinVer, которая теперь отличает версию Windows 7 как отдельную версию ОС).
[+]
D200X
Добавлен inc-файл с определениями зеркальных типов MCK для лучшей поддержки D2006-D2010 и в случае этих версий о включается в KOL.pas.
KOLDEF.inc: обеспечены определения для Delphi 2010 (ver210 компилятора).
D[u]fa
[-]
Исправлена функция NormalizeUnixText для случая первого символа перехода строки (#10).
[-]
Исправлена утечка памяти в методе TDirList.ScanDirectory.
D[u]fa
[-]
Исправлено создание пункта меню с флажком (checkmark) - метод method TMenu.Insert.
shilou
[-]
Исправлен метод TMenu.RemoveSubMenu.
[-]
Исправлена функция WndFuncCombo для случая, когда определен символ KEY_PREVIEW (для обеспечения предварительной обработки в обработчике формы, когда KeyPreview = TRUE)
[-]
Исправлена функия WndProcNotify для предотвращения бесконечного цикла при передаче сообщения дочернему контролу.
Galkov
[-]
UNI
Исправлена утечка памяти в методе TControl.CreateWindow для UNICODE_CTRLS.
[-]
Исправлена функция WndProcTransparent (условие двойной буферизации формы).
[-]
Исправлена функция TControl.SetCurIndex (обеспечено присваивание значения fCurIndex для таб-контрола, несоответствие его реальному могло приводить к исключению access violation)
[+]
delphicommctrl.inc: добавлены определения TBIF_BYINDEX и для header-контрола (HDM_, HDN_ и др.)
[-]
ASM
Исправлен метод TCanvas.Arc для ASM-версии.
VK
[-]
visual_xp_styles: исправлена функция CheckThemes для случая DLL.
Устранены утечки ресурсов в функции WndXPMessage.
D[u]fa
[+]
KolAdd
Для случая, когда определен символ EXTERNAL_KOLDEFS, он включает файлы PROJECT_KOL_DEFS.INC и EXTERNAL_DEFINES.INC.
[*]
UNI
KOLadd.pas, KOLDirDlgEx.pas: Множество исправлений для лучшей поддержки UNICODE_CTRLS.
MCK: изменения в генерации кода для лучшей поддержки UNICODE_CTRLS (TKOLToolbar.SetupParams, PCharStringConstant)
[*]
MCK
Изменена генерация констант для пунктов меню: теперь они декларируются как безтиповые, т.е. неизменяемые константы.
-
Thank you very, very much!
-
C Богом!
-
по сравнению с последними 2.88 установка прошла идеально :)
-
Сравнил с тем что у меня. Кое что нашел. KOLAdd.pasprocedure TAction.LinkMenuItem(Menu: PMenu; MenuItemIdx: integer); {$IFDEF _FPC} var arr1_DoOnMenuItem: array[ 0..0 ] of TOnMenuItem; {$ENDIF _FPC} begin //У меня используется MenuId, а не MenuItemIdx. Т.к. в случае динамического меню с индексом работает не корректно LinkCtrl(Menu, ckMenu, Menu.Items[MenuItemIdx].MenuId, UpdateMenu); //LinkCtrl(Menu, ckMenu, MenuItemIdx, UpdateMenu);
{$IFDEF _FPC} arr1_DoOnMenuItem[ 0 ] := DoOnMenuItem; Menu.AssignEvents(MenuItemIdx, arr1_DoOnMenuItem); {$ELSE} Menu.AssignEvents(MenuItemIdx, [ DoOnMenuItem ]); {$ENDIF} end; KOL.pas1.В оконной функции WndProc_LVCustomDraw, зачем-то вызывается Sender.Canvas;, соответственно в программу включается код для Canvas. Хотя дальше он и не нужен. Если кому потребуется Canvas для отрисовки итема, он к нему и сам обратится в OnLVCustomDraw. function WndProc_LVCustomDraw( Sender: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean; ... Sender.Canvas; //!!!!!!!!!!! Rslt := Sender.FOnLVCustomDraw( Sender, {Sender.fPaintDC} NMCustDraw.nmcd.hdc, NMCustDraw.nmcd.dwDrawStage, ItemIdx, SubItemIdx, NMCustDraw.nmcd.rc, ItemState, TColor( NMCustDraw.clrText ), TColor( NMCustDraw.clrTextBk ) ); ... 2.В ветке http://pda.delphimaster.net/?id=1249457352&n=10 писал про TIcon, но Владимир или не увидел, или не понял или проигнорировал, тогда почему? Еще раз. ... function ReadIcon : Boolean; .... if BIH.biBitCount = 16 then begin if BIH.biCompression = BI_BITFIELDS then Stream2Stream(Mem, Strm, 12) else for I := 0 to 2 do begin J := InitColors[ I ]; Mem.Write( J, 4 ); end; end;Объясняю зачем это. Столкнулся с 16 битными иконками, в которых палитра уже лежит непосредственно внутри (BIH.biCompression = 3 {BI_BITFIELDS}). Обычно BIH.biCompression = 0 и 12 байт палитры добавляются (for i:=0...Mem.Write( J, 4 );...), а если BIH.biCompression = 3 то их нужно прочитать. Ну и также далее при чтении маски: ... BIH.biBitCount := 1; BIH.biPlanes := 1; BIH.biClrUsed := 0; BIH.biCompression:= 0;... Если нужно могу выложить\прислать пример такой иконки. Собственно в WinCe они почти все такие. И в ресурсах и в *.ico. Win XP их читает, MSVS тоже, а вот Delphi, ну и KOL - фиг! 3.Еще такое предложение. Добавить в TStrList метод FindFirst(). А то TStrList.Find() ищет просто вхождение строки в список, А зачастую нужно именно первое. Соответственно код: function TStrList.FindFirst(const S: AnsiString; var Index: Integer): Boolean; begin Result := Find(S, Index); if Result then while (Index-1 > 0) and (AnsiCompareStr( AnsiString(PAnsiChar( fList.Items[ Index-1 ] )), S ) = 0) do Dec(Index); end;
Еще в MirrorKOLPackageD6.dpk попало лишнее: {$R 'Components\MH\MCKMHXP.dcr'} ..... KOLadd in 'KOLadd.pas', KolGif in 'KolGif.pas', MCKGif in 'MCKGif.pas', MCKMHXP in 'Components\MH\MCKMHXP.pas', MCKTracker in 'Components\KOLTracker\MCKTracker.pas', mckCCtrls in 'mckCCtrls.pas', mckDatePicker in 'Components\DatePicker\mckDatePicker.pas';
Пустячек, но все же....:)
-
> Еще в MirrorKOLPackageD6.dpk попало лишнее: {$R 'Components\MH\MCKMHXP. > dcr'}..... KOLadd in 'KOLadd.pas', KolGif in 'KolGif.pas', > MCKGif in 'MCKGif.pas', MCKMHXP in 'Components\MH\MCKMHXP. > pas', MCKTracker in 'Components\KOLTracker\MCKTracker.pas', > mckCCtrls in 'mckCCtrls.pas', mckDatePicker in 'Components\DatePicker\mckDatePicker. > pas';Пустячек, но все же....:)
Не все лишнее, не посмотрел внимательно. Но многое попало видимо случайно (MHXP, Tracker, Gif и т.д...)
-
С пакетом для Delphi6 это я действительно немного переборщил, попал мой "полносборный" dpk-шник, который я ставлю для своих проектов. Позже вычищу. Я так понимаю, D6 используют не все.
Пример иконки можно.
Добавить в TStrList метод FindFirst(). А то TStrList.Find() ищет просто вхождение строки в список, А зачастую нужно именно первое. Соответственно код: function TStrList.FindFirst(const S: AnsiString; var Index: Integer): Boolean; begin Result := Find(S, Index); if Result then while (Index-1 > 0) and (AnsiCompareStr( AnsiString(PAnsiChar( fList.Items[ Index-1 ] )), S ) = 0) do Dec(Index); end; Это можно. Только сначала еще понять, что это за AnsiString(PAnsiChar(... у меня там в коде. Явно должно замедлять процесс. Там еще todo позабытый стоит.
Насчет WndProc_LVCustomDraw я посмотрю. Кажется, зачем-то это было все-таки нужно и без него что-то не работало. Не зря же там такой строгий комментарий.
TAction.LinkMenuItem - TAction я не использую, это исключительно не моя инициатива. Если считаете так более правильно, сделаем по-вашему. Если у кого-то есть возражения, пусть высказываются.
-
Посмотрел DemoLVCustomDraw. После небольшик поправок в коде все пошло и без обращения к Canvas в KOL.pas. Буду смотреть еще.
-
> Пример иконки можно.
несколько иконок положил в архив kolnmck.kolmck.net/Icons.zip
> Посмотрел DemoLVCustomDraw. После небольшик поправок в коде > все пошло и без обращения к Canvas в KOL.pas. Буду смотреть > еще.
У меня обращение к Canvas уже давно закоментированно, каких либо проблем не замечал.
-
несколько иконок положил в архив Что-то не плучается загрузить, и с вашим исправлением тоже: --------------------------- Form1 --------------------------- Can not create DIB section, error: 0, The operation completed successfully. --------------------------- OK --------------------------- Т.е. DIB загрузился, маска загрузилась, прежде чем вызывать CreateIconIndirect, код пытается получить хэндлы загруженных битмаов - ImgBmp и MskBmp. И вот так ломается вызов CreateDIBSection. Что-то еще изменяли или у вас новая версия виндов? У меня ХР 32бита.
-
А, кажется, догоняю: для MskBmp наверное надо почистить biCompression, это на нем не может дескриптор получить. С ImgBmp все как раз в порядке. Кстати, система эти иконки никак не показывает, ни в папке, ни в системном Preview. С трудом (криво) изобразил только Irfan.
-
А, у вас же так и написано. А я и не заметил. Да, теперь грузится. Я сейчас выложу обновленный KOL.pas отдельно, ссылку сюда брошу.
-
http://kolmck.net/KOL289+.rarВнутри лежит проект для тестирования скорости TStrList(Ex).Find, T(W)StrList(Ex).IndexOf для всех 4 случаев. Переделал, чтобы учитывалось, как сортировалось - с учетом регистра или без, Ansi или просто Ascii. Find для TWStrList е делал.
-
> Кстати, система эти иконки никак не показывает, ни в папке, > ни в системном Preview. >
Странно. У меня показывает.... Выглядит вот так: kolnmck.kolmck.net/Untitled-1.jpg
OS: WinXP 32, SP3 (сборка 2600.xpsp.080413-2111).
-
> Странно. У меня показывает.... Выглядит вот так:
Я собственно поэтому и ковыряться с ними стал: система открывает, а программа - фиг! Обидно..:)
-
> http://kolmck.net/KOL289+.rarВнутри лежит проект для тестирования > скорости TStrList(Ex).Find, T(W)StrList(Ex).IndexOf для > всех 4 случаев. Переделал, чтобы учитывалось, как сортировалось > - с учетом регистра или без, Ansi или просто Ascii. Find > для TWStrList е делал.
Спасибо. Потестирую, если что еще найту, отпишу.
-
Dy1, а на какую версию делфи прежняя не вставала?
Vladimir Kladov, почему бы не перейти на свн? было гораздо проще..
СВН версию смешал с 2.89
-
неушто пришло счастие и автор сел на безSOLевую диету и вспомнил про свое дитя?
-
Вот поправил малях:
function TStrList.Find(const S: AnsiString; var Index: Integer): Boolean; var L, H, I, C: Integer; begin Result := FALSE; if FCount = 0 then Exit; ....
Без этой проверки падает, если список пустой.
-
По мне так лучше пусть падает. 1 раз на отладке упадет, программист обеспечит правильную последовательность вызовов, и все. В любом случае Find нельзя вызывать на неотсортированном списке, а проверить, что в нем далали изменения после сортировки - никак не возможно, опять же вся надежа на программиста. Но если вы считаете так более правильным, сделаем так. Хотя я бы предпочел Assert и однозначное падение, хотя оно и так однозначное, т.к. указатели на функции = nil.
|