Конференция "KOL" » Версия 2.89 [Delphi]
 
  • Vladimir Kladov © (20.03.10 19:32) [0]
    Сделал слияние изменений за 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
    Изменена генерация констант для пунктов меню: теперь они декларируются как безтиповые, т.е. неизменяемые константы.


  • Jon © (20.03.10 21:06) [1]
    Thank you very, very much!
  • AndreyRus © (21.03.10 09:41) [2]
    C Богом!
  • Dy1 (21.03.10 11:13) [3]
    по сравнению с последними 2.88 установка прошла идеально :)
  • mdw (22.03.10 16:00) [4]
    Сравнил с тем что у меня. Кое что нашел.

    KOLAdd.pas

    procedure 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.pas

    1.
    В оконной функции 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';
    Пустячек, но все же....:)
  • mdw (22.03.10 16:06) [5]

    > Еще в 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 и т.д...)
  • Vladimir Kladov © (22.03.10 20:44) [6]
    С пакетом для 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 я не использую, это исключительно не моя инициатива. Если считаете так более правильно, сделаем по-вашему. Если у кого-то есть возражения, пусть высказываются.
  • Vladimir Kladov © (22.03.10 21:06) [7]
    Посмотрел DemoLVCustomDraw. После небольшик поправок в коде все пошло и без обращения к Canvas в KOL.pas. Буду смотреть еще.
  • mdw (23.03.10 14:53) [8]

    > Пример иконки можно.

    несколько иконок положил в архив
    kolnmck.kolmck.net/Icons.zip


    > Посмотрел DemoLVCustomDraw. После небольшик поправок в коде
    > все пошло и без обращения к Canvas в KOL.pas. Буду смотреть
    > еще.

    У меня обращение к Canvas уже давно закоментированно, каких либо проблем не замечал.
  • Vladimir Kladov © (23.03.10 20:11) [9]
    несколько иконок положил в архив
    Что-то не плучается загрузить, и с вашим исправлением тоже: ---------------------------
    Form1
    ---------------------------
    Can not create DIB section, error: 0, The operation completed successfully.
    ---------------------------
    OK  
    ---------------------------
    Т.е. DIB загрузился, маска загрузилась, прежде чем вызывать CreateIconIndirect, код пытается получить хэндлы загруженных битмаов - ImgBmp и MskBmp. И вот так ломается вызов CreateDIBSection. Что-то еще изменяли или у вас новая версия виндов? У меня ХР 32бита.
  • Vladimir Kladov © (23.03.10 20:15) [10]
    А, кажется, догоняю: для MskBmp наверное надо почистить biCompression, это на нем не может дескриптор получить. С ImgBmp все как раз в порядке. Кстати, система эти иконки никак не показывает, ни в папке, ни в системном Preview. С трудом (криво) изобразил только Irfan.
  • Vladimir Kladov © (23.03.10 20:20) [11]
    А, у вас же так и написано. А я и не заметил. Да, теперь грузится. Я сейчас выложу обновленный KOL.pas отдельно, ссылку сюда брошу.
  • Vladimir Kladov © (23.03.10 20:33) [12]
    http://kolmck.net/KOL289+.rar

    Внутри лежит проект для тестирования скорости TStrList(Ex).Find, T(W)StrList(Ex).IndexOf для всех 4 случаев. Переделал, чтобы учитывалось, как сортировалось - с учетом регистра или без, Ansi или просто Ascii. Find для TWStrList е делал.
  • mdw (24.03.10 12:22) [13]

    > Кстати, система эти иконки никак не показывает, ни в папке,
    >  ни в системном Preview.
    >

    Странно. У меня показывает....  Выглядит вот так:
    kolnmck.kolmck.net/Untitled-1.jpg

    OS: WinXP 32, SP3 (сборка 2600.xpsp.080413-2111).
  • mdw (24.03.10 12:24) [14]

    > Странно. У меня показывает....  Выглядит вот так:

    Я собственно поэтому и ковыряться с ними стал: система открывает, а программа - фиг! Обидно..:)
  • mdw (24.03.10 12:36) [15]

    > http://kolmck.net/KOL289+.rarВнутри лежит проект для тестирования
    > скорости TStrList(Ex).Find, T(W)StrList(Ex).IndexOf для
    > всех 4 случаев. Переделал, чтобы учитывалось, как сортировалось
    > - с учетом регистра или без, Ansi или просто Ascii. Find
    > для TWStrList е делал.

    Спасибо. Потестирую, если что еще найту, отпишу.
  • Dufa © (24.03.10 13:17) [16]
    Dy1, а на какую версию делфи прежняя не вставала?

    Vladimir Kladov, почему бы не перейти на свн? было гораздо проще..

    СВН версию смешал с 2.89
  • QAZ (24.03.10 14:18) [17]
    неушто пришло счастие и автор сел на безSOLевую диету и вспомнил про свое дитя?
  • mdw (24.03.10 15:11) [18]
    Вот поправил малях:

    function TStrList.Find(const S: AnsiString; var Index: Integer): Boolean;
    var
     L, H, I, C: Integer;
    begin
     Result := FALSE;
     if FCount = 0 then Exit;
    ....

    Без этой проверки падает, если список пустой.
  • Vladimir Kladov © (24.03.10 15:54) [19]
    По мне так лучше пусть падает. 1 раз на отладке упадет, программист обеспечит правильную последовательность вызовов, и все. В любом случае Find нельзя вызывать на неотсортированном списке, а проверить, что в нем далали изменения после сортировки - никак не возможно, опять же вся надежа на программиста. Но если вы считаете так более правильным, сделаем так. Хотя я бы предпочел Assert и однозначное падение, хотя оно и так однозначное, т.к. указатели на функции = nil.
  • mdw (24.03.10 16:20) [20]
    Владимир, вот кусок кода где сегодня словил AV. Получается, что перед вызовом Find(), нужно всегда проверять Count > 0?  Тогда все же проще сразу вставить в метод эту проверку.
       
       ListIdUnusedSwatches:= NewStrList;
       ListIdUnusedSwatches.Text := inddDocument.GetUnusedSwatchesId;
       ListIdUnusedSwatches.AnsiSort(False);


       for i:= 1 to ColorCount do begin
       ...
         ColorStorage.IsInDocument:= not ListIdUnusedSwatches.Find(ColorStorage.ColorId, FindIndex);

      ...
      end;

     
    В этом примере я понятия не имею пустой список ListIdUnusedSwatches или нет. Единственный вариант проверять перед каждым вызовом Find() пустой он или нет....
  • Vladimir Kladov © (24.03.10 16:59) [21]
    Согласен, пусть будет. Еще что-нибудь? До выходных жду, потом оформлю как 2.90, как раз круглое число будет.
  • mdw (24.03.10 17:49) [22]

    > потом оформлю как 2.90, как раз круглое число будет.

    :)
    У меня вроде пока усё.:)
    Сегодня собрал, выложил софт, если в ближайшее время благодарные пользователи не возопят, то критических ошибок нет, т.к. используют непрерывно и интенсивно. Хотя там, в основном математика, интерфейса - одна панель с меню для выбора действия... но уже часа 4 работает без ошибок :)
  • MTsv DN (24.03.10 18:15) [23]
    1.
    function RemoveSpaces( const S: AnsiString ): AnsiString;


    Заменит на KOLString.

    2.
    themelib = 'uxtheme';


    Предлагаю добавить ".dll". Не помню где, но получал ошибку.

    3. Функция
    function ExtractFilePath( const Path : KOLString ) : KOLString


    Я правил для себя так:
    function ExtractFilePath(const Path: KOLString): KOLString;
    var
     i: Integer;
    begin
     for i := Length(Path) - 1 downto 1 do begin
       if (Path[i] = '\') then begin
         Result := Copy(Path, 1, i);
         Exit;
       end;
     end;
     Result := Path;
    end;


    Если честно было это давно, т.ч. причину не помню, возможно производительность выше, щас проверять лень.

    4. WndProcToolbarCtrl
    Строчку
    if WinVer >= wvNT then // todo: check it.

    надо закомментировать, иначе краш системы (до ресета) в Windows 98 (если кому интересно)
  • MTsv DN (24.03.10 18:28) [24]
    KOL_ASM.inc
    ==========
    1. Это вообще не понятно:
    function AnsiEq( const S1, S2 : AnsiString ) : Boolean;
    procedure TDirList.ScanDirectoryEx(const DirPath, Filters: KOLString;



    2. Вот асм версия для WinVer:
    function WinVer : TWindowsVersion;
    asm
     MOVSX EAX, byte ptr [SaveWinVer]
     INC   AH     // если <> 0 после инкремента, то AL содержит вычисленную версию
     JNZ   @@exit
     CALL  GetVersion // EAX < 0 для платформы 9х, иначе NT; AL=MajorVersion; AH=MinorVersion
     XCHG  EDX, EAX
     XOR   EAX, EAX
     TEST  EDX, EDX
     XCHG  DL, DH    // DH=MajorVersion; DL=MinorVersion

     JL    @@platform_9x
     MOV   AL, wvNT
     CMP   DX, $0400
     JZ    @@save_exit

     INC   AL // wvY2K
     CMP   DX, $0500
     JZ    @@save_exit

     INC   AL // wvXP
     CMP   DX, $0501
     JZ    @@save_exit

     INC   AL // wvWin2003Server
     CMP   DX, $0502
     JZ    @@save_exit

     INC   AL // wvVista
     CMP   DX, $0600
     JZ    @@save_exit

     INC   AL // wvSeven
     CMP   DX, $0601
     JZ    @@save_exit
    @@platform_9x:
     CMP   DH, 4
     JB    @@save_exit // wv31
     INC   AL // wv95
     CMP   DX, $040A
     JB    @@save_exit
     INC   AL // wv98
     CMP   DX, $045A
     JB    @@save_exit
     INC   AL // wvME
    @@save_exit:
     MOV   byte ptr [SaveWinVer], AL
    @@exit:
    end;        

  • MTsv DN (24.03.10 18:33) [25]
    Если кому интересно. Файл MCKAppExpert200x. Заменить:
    dlg.Filter     := '*.dpr';


    на
    dlg.Filter     := 'DPR files|*.dpr';



    dlg.Filter := '*.pas';


    на
    dlg.Filter := 'PAS files|*.pas';


    Для корректной работы в Windows 7
  • Vladimir Kladov © (24.03.10 19:11) [26]
    ExtractFilePath
    Это не пойдет. Сравните вашу версию и из KOL.pas. Сразу примеры - путь 'C:aaa.txt' - не вернет ваша 'C:', для пути 'aaa.txt' правильно возвращать пустую строку. Кроме того, очень важно, чтобы можно было без всяких дополнительных проверок гарантированно получить ExtractFilePath и прибавить имя файла. Как отдельную функцию, типа ExtractFilePathFast - пожалуйста. Но даже в этом случае мне кажется боле корректным при отсутствии '\' возвращать пустую строку, а не саму входную.

    WndProcToolbarCtrl
    А, вот зачем там комментарий. К сожалению, не могу проверить сейчас не на чем, даже виртуалки под рукой нет. Пока пусть будет закомментарено тогда.

    function AnsiEq - почему непонятно? Я параметр на KOLString поменял глядя на реализацию. -> AnsiCompareStrNoCase(S1,S2:KOLString). Иначе лишние конверсии строк замедляют в случае UNICODE_CTRL.

    procedure TDirList.ScanDirectoryEx - аналогично, от реализации.

    function WinVer : TWindowsVersion; - а если так:

    function WinVer : TWindowsVersion;
    asm
    MOVSX EAX, byte ptr [SaveWinVer]
    INC   AH     // если <> 0 после инкремента, то AL содержит вычисленную версию
    JNZ   @@exit
    CALL  GetVersion // EAX < 0 для платформы 9х, иначе NT; AL=MajorVersion; AH=MinorVersion
    XCHG  EDX, EAX
    XOR   EAX, EAX
    TEST  EDX, EDX
    XCHG  DL, DH    // DH=MajorVersion; DL=MinorVersion

    JL    @@platform_9x
    MOV   AL, wvNT
    CMP   DX, $0400
    JZ    @@save_exit

    INC   AL // wvY2K
    SUB   DX, $0500
    JZ    @@save_exit

    INC   AL // wvXP
    //CMP   DX, $0501
    DEC   DX
    JZ    @@save_exit

    INC   AL // wvWin2003Server
    //CMP   DX, $0502
    DEC   DX
    JZ    @@save_exit

    INC   AL // wvVista
    CMP   DX, $0600 - $0502
    JZ    @@save_exit

    INC   AL // wvSeven
    //CMP   DX, $0601
    //DEC   DX
    JMP   @@save_exit
    @@platform_9x:
    CMP   DH, 4
    JB    @@save_exit // wv31
    INC   AL // wv95
    CMP   DX, $040A
    JB    @@save_exit
    INC   AL // wv98
    CMP   DX, $045A
    JB    @@save_exit
    INC   AL // wvME
    @@save_exit:
    MOV   byte ptr [SaveWinVer], AL
    @@exit:
    end;              


    ?
  • MTsv DN (24.03.10 19:29) [27]
    ExtractFilePath
    > путь 'C:aaa.txt'
    Я дико извиняюсь...а что такой путь возможен? 8) С таким же успехом можно любую строчку как путь в качестве примера привести.

    > function AnsiEq - почему непонятно? Я параметр на KOLString поменял глядя на реализацию. -> AnsiCompareStrNoCase(S1, S2:KOLString). Иначе лишние конверсии строк замедляют в случае UNICODE_CTRL.
    Вы не поняли. Вопрос был: почему в KOL_ASM.inc все еще используется AnsiString.
    То же самое для procedure TDirList.ScanDirectoryEx.

    WinVer
    Как угодно, если Ваш код работает. У меня щас не на чем проверить. Просто Вы асм-версию отключили, вот решил "подкинуть" рабочий код.
  • Vladimir Kladov © (24.03.10 19:57) [28]
    Вообще-то при каких-то условиях путь такой возможен. Вот код (VCL):
    procedure TForm1.Button1Click(Sender: TObject);
    var SL: TStringList;
    begin
       SL := TStringList.Create;
       TRY
           SL.LoadFromFile( 'C:aaa.txt' );
           SL.SaveToFile( ExtractFilePath( Application.ExeName ) + 'aaa.txt' );
       FINALLY
           SL.Free
       END;
    end;


    Работает. Пользователь, зная, что такой путь работает, может набрать его вручную, сохранить в ini-файле и т.д.

    почему в KOL_ASM.inc все еще используется AnsiString.
    Не понял. У меня в KOL_ASM.inc:
    function AnsiEq( const S1, S2 : KOLString ) : Boolean;
    asm
           CALL     AnsiCompareStrNoCase
           TEST     EAX, EAX
           SETZ     AL
    end;


    Прямой вызов функции
    function AnsiCompareStrNoCase(const S1, S2: KOLString): Integer;

    и преобразование результата.

    А для второго
    {$IFDEF ASM_UNICODE}
    procedure TDirList.ScanDirectoryEx

    , т.е. ассемблер отрубается для UNICODE_CTRLS. Как и раньше было, собственно.

    WinVer Мне тоже не на чем, да я и не собираюсь ставить Висту-Семерку. Просто если выйдет (не дай, не дай) версия 8, то предложенная Вами версия станет показывать что-то типа WinME, будет смешно :)
  • Vladimir Kladov © (24.03.10 20:06) [29]
    А нет, не WinME. Выйдет за пределы диапазона значений. Будет что-то типа Seven+3.
  • MTsv DN (24.03.10 20:24) [30]
    почему в KOL_ASM.inc все еще используется AnsiString


    Пардон. Ошибся.
  • vampir_infernal (25.03.10 00:53) [31]
    Спасибо, Владимир!

    KOL.PAS
    строка 13256

    {$IFDEF _D2006orHigher}
    {$I MCKfakeClasses200x.inc} // Dufa
    {$ENDIF}



    А в архиве с KOL2.89 поставляется MCKfakeClasses.inc. Или я что-то пропустил?
  • vampir_infernal (25.03.10 01:12) [32]
    Видать, я всё-таки что-то пропустил :) SVN лежит, где взять этот MCKfakeClasses200x.inc ?
  • Hallif © (25.03.10 02:49) [33]
    KOL.pas
    Описание: различие interface/implementation объявлений параметров функций:
    interface
    function SeekMemStream( Strm: PStream; {$IFNDEF STREAM_COMPAT} const {$ENDIF} MoveTo: TStrmMove; MoveFrom: TMoveMethod ): TStrmSize;


    implementation
    function SeekMemStream( Strm: PStream; const MoveTo: TStrmMove; MoveFrom: TMoveMethod ): TStrmSize;


    аналогично и для
    SetSizeMemStream,
    ReadMemStream,
    WriteMemStream,
    WriteExMemoryStream
    в KOL_ASM.inc объявления совпадают.
  • Hallif © (25.03.10 05:45) [34]
    KOL.pas
    Метод SetName обекта TObj.
    Описание: переопределение значения константы NewName в теле метода.
    Компилятор: D140,D200,FPC2xx.
    ...
     if FOwnerObj.fNamedObjList = nil then
        FOwnerObj.fNamedObjList := NewList;
     FName := NewName;
     {$IFDEF UNIQUE_NAMES}
     for i := 0 to FOwnerObj.fNamedObjList.Count-1 do
     begin
       if PObj( FOwnerObj.fNamedObjList.Items[ i ] ).FName = NewName then
       begin
          FName := '';  
           //                NewName := ''; Old code
         break;
       end;
     end;
     {$ENDIF}
          //                 FName := NewName; Old code
     if FName = '' then
        FOwnerObj.fNamedObjList.Remove( @ Self )
     else
     if FOwnerObj.fNamedObjList.IndexOf( @ Self ) < 0 then
        FOwnerObj.fNamedObjList.Add( @ Self );
    ...

  • Hallif © (25.03.10 12:24) [35]
    #issue_289
    KOL_ASM.inc
    Описание: различие interface/implementation объявлений параметров функций, предполагалось:

    kol_asm.implementation [4183]
    function TStream.Write(var Buffer; {$IFNDEF STREAM_COMPAT} const {$ENDIF} Count: TStrmSize): TStrmSize;

    //Dimaxx ©   (28.10.08 02:41)

    kol_asm.implementation [4190]
    function TStream.Seek({$IFNDEF STREAM_COMPAT} const {$ENDIF} MoveTo: TStrmMove; MoveMethod: TMoveMethod): TStrmSize;

    //Dimaxx ©   (28.10.08 02:41)
  • Vladimir Kladov © (25.03.10 16:37) [36]
    По поводу SetName - это для оптимизации?
    Посмотрите, что будет в этом случае (определены символы Use_names, Unique_names):

    procedure TForm1.Button3Click(Sender: PObj);
    begin
       ShowMessage( 'before: <' + Button3.Name + '>' );
       Button3.SetName( Form, 'A' );
       ShowMessage( 'after: <' + Button3.Name + '>' );
    end;

  • Vladimir Kladov © (25.03.10 16:39) [37]
    Там надо const убрать из декларации.
  • Vladimir Kladov © (27.03.10 17:07) [38]
    Больше замечаний не будет, как я понимаю. Буду оформлять выпуск.
 
Конференция "KOL" » Версия 2.89 [Delphi]
Есть новые Нет новых   [120349   +19][b:0.003][p:0.006]