-
Новости от 29 мая 2010 (KOL & MCK v2.91)
[-]
Для UNICODE_CTRLS, печать некоторых китайских символов исправлена для Memo и EditBox.
VK, reported by zhoudi
[+]
Добавлена функция NewAlienPanel, позволяющая создавать дочернюю панель в любом окне в системе.
VK
[*]
Большое число кода из KOL_asm.inc перемещено обратно в KOL.pas - для упрощения поиска ошибок и различия в поведении pas-версии и asm-версии кода. Запрещена Asm-версия функции TList.Add.
VK
[*]
Изменено поведение Scrollbar-контрола. Прежняя версия доступна с использованием символа условной компиляции SCROLL_OLD.
QAZ
[*]
Изменено поведение TStrList.Find для случая, когда найдена не в точности искомая строка: в этом случае возвращается индекс найденной строки со знаком минус.
VK, mdw
[*]
UNICODE_CTRLS: DateTime2StrShort, String -> KOLString.
mdw
[*]
Изменена функция ExePath: теперь она возвращает путь к основному exe-файлу, даже когда вызвана из функции из DLL.
Добавлена функция ModulePath, возвращающая путь к исполнимому (самому) модулю, в том числе для DLL - путь к DLL.
VK
[*]
UNICODE_CTRLS: Добавлено определение типа TXStrList для использования вместо TStrList или TWStrList в зависимости от символа UNICODE_CTRLS.
VK
[-]
Функция FileSeek, параметр MoveTo: TStrmSize -> TStrmMove.
QAZ
[+]
Добавлена функция WStr2File (для параметра PWideChar, в отличие от WideString).
VK
[-]
Исправлены функции File2WStr, WStrSaveToFile.
zhoudi
[-]
UNICODE_CTRL: Исправлен баг API для Combobox контрола, связанный со вставкой строковой константы.
VK, QAZ,
[-]
TControl.SetDateTime исправлен для случая присваивания нулевой даты или только времени.
VK
[-]
TControl.REGetFont - исправлено.
VK
[*]
Под Windows Vista и Windows 7 (и для будущих версий Windows), GetDesktopRect перенаправлен на GetWorkArea так как окно рабочего стола имеет теперь размеры, совпадающие с размерами экрана, и не принимается в расчет даже панель задач.
VK
[-]
WndProcNotify - исправлена asm-версия (падение приложения при переключении тем в Windows XP и далее).
VK
[-]
KOLMediaPlayer - исправлено компилирование asm-версии.
VK
[*]
KOLmath.pas: добавлен символ MATH_NOERR, запрещающий подключение модуля err и обработку ошибок (для использования некоторых функций из KOLmath, не требующих такого контроля).
VK
MCK не менялся. Архивы kol.zip, kol_err.zip, KLMediaplayer.zip см. на http://kolmck.net -
Владимир, огромное спасибо за релиз, соавторам изменений тоже выражаю свою благодарнось.
-
QAZ (01.06.10 11:20) [2]аяйprocedure TControl.SetSBMinMax(const Value: TPoint);
begin
GetSBMinMax;
if (Handle <> 0) then
SetScrollRange(Handle, SB_CTL, Value.X,
Value.Y {$IFDEF SCROLL_OLD} + SBPageSize {$ENDIF (by QAZ)} - 1, True)
else
fSBMinMax := Value;
end;
а надоprocedure TControl.SetSBMinMax(const Value: TPoint);
begin
GetSBMinMax;
if (Handle <> 0) then
SetScrollRange(Handle, SB_CTL, Value.X,
Value.Y {$IFDEF SCROLL_OLD} + SBPageSize - 1{$ENDIF (by QAZ)}, True)
else
fSBMinMax := Value;
end;
т.е. -1 это лишнее, на одну позицию недоскролит -
QAZ (01.06.10 11:46) [3]а мошт функции которые SH...A,SH...W загнать в уникодные ифдефы как все остальные?
еще встречаются подозрительные парочки функций с окончанием А,например
AnsiCompareStr\AnsiCompareStrA которые вроде используют одну и туже CompareStringA, но имеют разные параметры KOLString\AnsiString, а KOLString может быть уникодным... -
Я же по вашему коду брал, из сообщения [31] с теме Версия 2.90.
Могу и заменить, прямо в этой же версии, апдейты ушли в прошлое. Пометить 2.911 просто.
------------------------------------------------------------------
По поводу SHGetFileInfoA SHFileOperationA SHBrowseForFolderA SHGetPathFromIDListA - они и так не используются при UNICODE_CTRLS, Версии W было важно отсечь для компиляции в Delphi2, который не понимает уникод. Остальные версии еще и не должны (бы) добавлять функцию в таблицу импорта. Если бобавляют, то тогда да, надо внутрь IFDEF'а.
AnsiCompareStr использует AnsiCompareString, в случае UNICODE_CTRLS это как раз функция из KOL_unicode.inc:
function CompareString; external kernel32 name 'CompareStringW';
AnsiCompareStrA всегда вызывает CompareStringA. Иногда в юникодовском приложении нужна работа с анси-строками. -
QAZ (01.06.10 15:53) [5]
> Я же по вашему коду брал, из сообщения [31] с теме Версия
> 2.90
это я ищо до тестового примера написал
там где я это использовал 1 была не критична\не видна
а в тестовом потом убрал -1 тк сразу видно что лишнее -
Обновил до 2.911.
-
QAZ (01.06.10 16:42) [7]
> Обновил до 2.911.
упс,как быстро
а я вот еще посмотрел и получается что
procedure TControl.SetSBPageSize(Value: Integer);
var
SI: TScrollInfo;
begin
fSBPageSize := Value;
if (Handle <> 0) then begin
FillChar(SI, SizeOf(SI), #0);
SI.cbSize := SizeOf(SI);
SI.fMask := SIF_PAGE or SIF_RANGE;
SBGetScrollInfo(SI);
if (SI.nMax = 0) and (SI.nMin = 0) then
SI.nMax := 1;
{$IFDEF SCROLL_OLD} // by QAZ
SI.nMax := SI.nMax - Integer(SI.nPage) + Value;
{$ENDIF}
SI.nPage := Value;
SBSetScrollInfo(SI);
end;
end;
а надо
procedure TControl.SetSBPageSize(Value: Integer);
var
SI: TScrollInfo;
begin
fSBPageSize := Value;
if (Handle <> 0) then begin
FillChar(SI, SizeOf(SI), #0);
SI.cbSize := SizeOf(SI);
SI.fMask := SIF_PAGE or SIF_RANGE;
SBGetScrollInfo(SI);
{$IFDEF SCROLL_OLD} // by QAZ
if (SI.nMax = 0) and (SI.nMin = 0) then
SI.nMax := 1;
SI.nMax := SI.nMax - Integer(SI.nPage) + Value;
{$ENDIF}
SI.nPage := Value;
SBSetScrollInfo(SI);
end;
end;
смотрел по скролу встроенуму в мемо
там мин=0 и макс=0 это норм
а если макс<пейдж то скролл выключен (можно конечно добавить это на усмотрение) -
QAZ (01.06.10 16:50) [8]
> там мин=0 и макс=0 это норм
а по коловски получается что например скролить нечего,а скрол показывает что есть (когда SI.nMax := 1;) -
Может, вообще лучше убрать этоif (SI.nMax = 0) and (SI.nMin = 0) then
SI.nMax := 1; -
QAZ (01.06.10 18:11) [10]
> Может, вообще лучше убрать это
незнай ,выш для чегото это придумали
а с учетом того что по умолчанию будет правильный (если ищо чего не всплывет) вариант,то вобще без разницы -
А я не помню. Может, оно иначе не работало вообще, в какой-нибудь 98. Если бы я комментарии к каждой строчке писал, проблем бы было меньше, с одной стороны. А с другой больше. Придется условной компиляцией бороться, на случай если всплывет бяка.
-
2.912
-
QAZ (01.06.10 21:05) [13]ну типерь можно спокойно перейти с 2.79 версии :)
кстати а почемубы не обновлять кол также оперативно в будущем?
типа не копить косяки полгода а потом разгребать
а сразу ,появился - исправили - +0.001 к номеру версии и выложить на сайт -
Это потому что я сегодня в отпуске 1й день. Но в субботу я все равно улетаю до конца месяца. А зачем Вам такая оперативность, если вы не хотите с 2.79 расстаться.
-
В методе TObj.Destroy в случае определенных {DEBUG_ENDSESSION} и {USE_NAMES} для функции Int2Hex передается неверный список аргументов.
директивы опущены'FINALLED: ' + Int2Hex( DWORD( @ Self ) + ' (name:' + FName + ')' , 8 )
предполагалось скорее всего:destructor TObj.Destroy;
begin
Final;
{$IFDEF DEBUG_ENDSESSION}
if EndSession_Initiated then
LogFileOutput( GetStartDir + 'es_debug.txt',
'FINALLED: ' + Int2Hex( DWORD( @Self ), 8 )
{$IFDEF USE_NAMES}
+ ' (name:' + FName + ')'
{$ENDIF USE_NAMES}
);
{$ENDIF DEBUG_ENDSESSION}
... -
QAZ (01.06.10 22:08) [16]
> не хотите с 2.79 расстаться.
уже хочу, все критичные для мну вещи уже исправлены -
Владимир, увидел новый тип PXStrList, но ведь он дублирует ранее определенный PKOLStrList?...
{$IFDEF UNICODE_CTRLS}
PXStrList = PWStrList;
{$ELSE}
PXStrList = PStrList;
{$ENDIF UNICODE_CTRLS}
...
{$IFDEF UNICODE_CTRLS}
{$IFNDEF _D2}
type TKOLStrList = TWStrList;
PKOLStrList = PWStrList;
{$ELSE _D2}
type TKOLStrList = TStrList;
PKOLStrList = PStrList;
{$ENDIF _D2}
{$ELSE UNICODE_CTRLS}
type TKOLStrList = TStrList;
PKOLStrList = PStrList;
{$ENDIF UNICODE_CTRLS}
... -
Еще промелькнуло...~строка 32153 в обоих случаях (_D2) GetScrollInfo одинаков.{$IFDEF _D2}
GetScrollInfo( Sender.fHandle, Bar, SI );
{$ELSE}
GetScrollInfo( Sender.fHandle, Bar, SI );
{$ENDIF} -
На сайте 2.92. Серьезное исправление: StrComp_NoCase + TStrList.IndexOf_NoCase, XStrList убрал, NewKOLStrList+NewKOLStrListEx добавил. Немного по todo пробежался, что-то поубирал в комментариях. Анонс делать буду позже, вечером время будет. Побегу дальше собирать документы.