Конференция "KOL" » Версия 2.87
 
  • MTsv DN (25.03.08 09:14) [0]
    Новости от 21марта 2008 (KOL & MCK v2.87)

    [+]    Добавлены    функции    NextPowerOf2,   ToRadix,   FromRadiStr,
    InsertSeparators, Str2File.

    [*]  UNICODE_CTRLS:  обновлены  функции  IndexOfChar, IndexOfCharsMin,
    IndexOfStr (с использованием типа KOLString).

    [+]  Добавлены функции CrackStack_MapInResource и CrackStack_MapInFile
    (могут использоваться при отладке).

    [-] Исправлена функция NormalizeUnixText.

    [-]  Свойство  TStream.Size  исправлено  для  memory stream для случая
    присваивания значения 0 пустому потоку данных.

    [+] Исправлена функция TWStrList.SetText (by mdw).



    Решил создать отдельную тему...
    Ошибки при подключенной UNICODE_CTRLS
    1. function CrackStack_MapInResource( const MapName: String; Max_length: Integer; HandleSuspiciousAddresses: Boolean ): String;
    Строка:
    Resource2Stream( MapStrm, hInstance, PChar( MapName ), RT_RCDATA );
    2е ошибки: несоответствие типов Char и WideChar... Еще насколько я понимаю надо в функции, String на KOLString заменить...

    2. function ToRadix( number: Radix_Int; radix: Integer; min_digits: Integer ): KOLString;
    Ошибка: несовпадает объявление.

    3. function InsertSeparators( const s: KOLString; chars_between: Integer; Separator: KOLChar ): KOLString;
    Ошибка: несовпадает объявление.

    4. function IndexOfChar( const S : KOLString; Chr : KOLChar ) : Integer;
    Строка:
     F := StrScanLen( P, Chr, Length( S ) );
    Ошибка: несоответствие типов Char и WideChar...

    Вообще функция IndexOfChar как то странно поддержку UNICODE осуществляет...
    function IndexOfChar( const S : KOLString; Chr : KOLChar ) : Integer;
    var P, F : PChar;
    begin
     P := PChar( S );
     {$IFDEF INPACKAGE}
     F := StrScan( P, Chr );
     {$ELSE}
     F := StrScanLen( P, Chr, Length( S ) );
     {$ENDIF}
     Result := -1;
     if (F = nil) or (S = '') then Exit;
     Result := Integer( F ) - Integer( P )
            {$IFDEF INPACKAGE} + 1 {$ENDIF};
     if {(Result > Length(S)) or} (S[ Result ] <> Chr) then
       Result := -1;
    end;
    Кроме объявления ничего и нет. В самом начале строка S - WideString приводится к PChar...да и потом Ansi-версия StrScanLen откуда-то взялась...


    Еще один вопрос.

    А чем собственно результат IndexOfChar(S, Chr) отличается от Pos(Chr, S)? Или я чего-то недопонимаю?

    В любом случае, в 2.87 IndexOfChar не работает с UNICODE.
  • =BuckLr= © (26.03.08 11:01) [1]
    Владимиру Кладову:
    Будет ли официальное исправление того, о чём я писал здесь http://pda.delphimaster.net/?id=1201946463&n=10

    Я исправил свой KOL.pas, но хотелось бы видеть это исправление и в будущих версиях...
  • D[u]fa (26.03.08 12:28) [2]
    скинул б сюда исправление, видимо у Владимира времени нету просто...
  • =BuckLr= © (27.03.08 10:37) [3]

    > скинул б сюда исправление

    Всё есть по ссылке. Это очень небольшой фикс, но лично для меня очень важный.
  • MTsv DN (27.03.08 11:20) [4]
    А меня все так и интересует вопрос:
    А чем собственно результат IndexOfChar(S, Chr) отличается от Pos(Chr, S)? Или я чего-то недопонимаю?
  • D[u]fa (27.03.08 15:41) [5]
    либо что б не юзать встроенную функцию Pos, либо для поддержки уникода, либо чтоб параметры местами поменять, либо я хз =)
  • MTsv DN (27.03.08 17:21) [6]
    Перемена параметров тут не при чем. Вопрос в другом. Результат IndexOfChar(S, Chr) и Pos(Chr, S) чем-нибудь отличается?
  • D[u]fa (27.03.08 17:23) [7]
    Не уловил суть вопроса.. я так понял обновление кол у тебя есть, а почему бы не проверить?) лично я не обновлялся
  • GMax (27.03.08 23:10) [8]
    Pos ведь с подстрокой работает ?
    или в дельфях есть оптимизация на Pos(char...) ???
    значит IndexOf должен быстрее работать.
  • MTsv DN (28.03.08 09:06) [9]
    Ну, т.е. результат один и тот же... Да, работает с подстрокой, и медленнее, поэтому по совету mdw, заменил код в IndexOfChar на:

    Result := -1;
    if S = '' then exit;
    for I := 1 to Length(S) do
     begin
      if S[I] = Chr then
       begin
        Result := I;
        break;
       end;
     end;

  • misha_shar © (28.03.08 17:31) [10]
    Где новая версия? Что то не нашел.
  • =BuckLr= © (28.03.08 19:28) [11]
    На сайте Кладова лежит обновление...
  • vampir_infernal (04.04.08 08:09) [12]
    KOL.pas (2.87)
    строка 39975
    procedure TTrayIcon.SetTrayIcon(const Value: DWORD);
    //---
    Move( FTooltip[1], NID.szTip[0], Min( 63, L ) );
    //---


    почему-то не корректно работает при UNICODE_CTRLS, копирует только половину символов строки с текстом подсказки.
  • misha_shar © (07.04.08 17:40) [13]
    Интересно и где же это его сайт?
  • Дмитрий К © (07.04.08 17:53) [14]

    > Интересно и где же это его сайт?

    В интернете.
    http://kolmck.net/rindex.htm
  • azsd (02.05.08 00:31) [15]
    to MTsv DN
    replace repne scasb in StrScanLen to

     {$IFDEF UNICODE_CTRLS}
           REPNE   SCASB
     {$ELSE}
           REPNE   SCASW
     {$ENDIF}


    would be a lesser dirty workaround.
    sure make the Char in defination changed to KOLChar first.
  • azsd (02.05.08 00:34) [16]
    I am sorry, first line should be {$IFNDEF UNICODE_CTRLS}
  • =BuckLr= © (02.05.08 15:00) [17]
    Кажется, "официального" исправления этих ошибок не будет.
    MTsv DN, может быть стоит пофиксить это всё и прикрутить к версии KOL, той, что на сайте?
  • Barloggg (08.05.08 10:47) [18]
    столкнулся с неприятным эффектом.
    на клиентской машине не влезший в чекбокс текст (из-за другой ширины текста судя по скриншоту) сделал этот самый чекбокс многострочным.
    Однако у меня четко указано, что wordwrap:=false. в редакторе свойств, а не в коде конечно же.
    я так полагаю это следствие политики "невмешательства" активно используемой в KOL? и глюк вышел из того факта, что умолчания у двух систем разные. Мне делать wordwrap:=false принудительно своим кодом? раз уж МСК ленится.
  • mdw © (20.06.08 12:12) [19]
    Что-то Владимир пропал, с марта тишина...:( Ау!!!

    Нашел еще баг. В KOLAdd.pas с опцией TLIST_FAST.
    Наткнулся в PTree, но и в PBits и, кажется в PFastStrListEx, то же самое. Заключается в следующем. Там (в KOLAdd.pas) активно используется приведение:
    PCrackList( fList ).fXXXX или PCrackList( fChildren ).fXXXX
    Что и приводит к краху, если элементов списка больше 256. Нужно или обращаться к свойствам списка и PCrackList вообще убирать, или при создании списка ставить:
    {$IFDEF TLIST_FAST}fList.UseBlocks:= False;{$ENDIF}
    Пока поправил у себя так, а как лучше сделать Владимир пусть принимает решение...
 
Конференция "KOL" » Версия 2.87
Есть новые Нет новых   [134431   +14][b:0][p:0.002]