Конференция "KOL" » Версия 2.91 [Delphi, Windows]
 
  • Vladimir Kladov © (29.05.10 12:33) [0]
    Новости от 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
  • Hallif © (29.05.10 20:16) [1]
    Владимир, огромное спасибо за релиз, соавторам изменений тоже выражаю свою благодарнось.
  • 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 может быть уникодным...
  • Vladimir Kladov © (01.06.10 13:54) [4]
    Я же по вашему коду брал, из сообщения [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 тк сразу видно что лишнее
  • Vladimir Kladov © (01.06.10 16:26) [6]
    Обновил до 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;)
  • Vladimir Kladov © (01.06.10 17:37) [9]
    Может, вообще лучше убрать это
    if (SI.nMax = 0) and (SI.nMin = 0) then
        SI.nMax := 1;

  • QAZ (01.06.10 18:11) [10]

    > Может, вообще лучше убрать это

    незнай ,выш для чегото это придумали
    а с учетом того что по умолчанию будет правильный (если ищо чего не всплывет) вариант,то вобще без разницы
  • Vladimir Kladov © (01.06.10 18:54) [11]
    А я не помню. Может, оно иначе не работало вообще, в какой-нибудь 98. Если бы я комментарии к каждой строчке писал, проблем бы было меньше, с одной стороны. А с другой больше. Придется условной компиляцией бороться, на случай если всплывет бяка.
  • Vladimir Kladov © (01.06.10 20:23) [12]
    2.912
  • QAZ (01.06.10 21:05) [13]
    ну типерь можно спокойно перейти с 2.79 версии :)

    кстати а почемубы не обновлять кол также оперативно в будущем?
    типа не копить косяки полгода а потом разгребать
    а сразу ,появился - исправили - +0.001 к номеру версии и выложить на сайт
  • Vladimir Kladov © (01.06.10 21:14) [14]
    Это потому что я сегодня в отпуске 1й день. Но в субботу я все равно улетаю до конца месяца. А зачем Вам такая оперативность, если вы не хотите с 2.79 расстаться.
  • Hallif © (01.06.10 21:39) [15]
    В методе 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 расстаться.

    уже хочу, все критичные для мну вещи уже исправлены
  • Hallif © (01.06.10 23:51) [17]
    Владимир, увидел новый тип 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}
    ...

  • Hallif © (02.06.10 01:14) [18]
    Еще промелькнуло...~строка 32153 в обоих случаях (_D2) GetScrollInfo одинаков.
     {$IFDEF _D2}
     GetScrollInfo( Sender.fHandle, Bar, SI );
     {$ELSE}
     GetScrollInfo( Sender.fHandle, Bar, SI );
     {$ENDIF}

  • Vladimir Kladov © (02.06.10 09:15) [19]
    На сайте 2.92. Серьезное исправление: StrComp_NoCase + TStrList.IndexOf_NoCase, XStrList убрал, NewKOLStrList+NewKOLStrListEx добавил. Немного по todo пробежался, что-то поубирал в комментариях. Анонс делать буду позже, вечером время будет. Побегу дальше собирать документы.
 
Конференция "KOL" » Версия 2.91 [Delphi, Windows]
Есть новые Нет новых   [120350   +20][b:0][p:0.003]