Конференция "KOL" » Версия 2.86 [Delphi, Windows]
 
  • Vladimir Kladov © (19.01.08 17:00) [0]
    Новости от 19-Jan-2007 (KOL & MCK v2.86)

    [*] KOL: символ условной компиляции TOOLBAR_FORCE_CHILDALIGN больше не
    действует  для  Win98  т.к. может там приводит к краху приложения. При
    создании  совместимых  с  Win9x  приложений,  избегайте  размещения на
    инструментальной линейке выравниваемых дочерних контролов.

    [+]  Добавлены  метод  TWStrList.Last  и  функция  WCharIn.  В  методе
    TWStrList.MergeFromStream,  обеспечивается  удаление  ведущего символа
    $FEFF    при    загрузке   текста   Unicode   из   файла.   В   методе
    TWStrList.SetText, обеспечивается терминирующий символ 0.

    [*]  UNICODE_CTRLS:  может  теперь комбинироваться с символом USE_PROP
    (константы ID_SELF и ID_PREVPROC объявлены как KOLString).

    [-] Для UNICODE_CTRLS, исправлено свойство TOpenDirDialog.InitialPath.

    [+]   Добавлены   функции:  Scrollbar_GetMinPos,  Scrollbar_SetMinPos,
    Scrollbar_SetAll,       Scrollbar_GetMaxPos,      Scrollbar_SetMaxPos,
    Scrollbar_GetCurPos,     Scrollbar_SetCurPos,     Scrollbar_SetPageSz,
    Scrollbar_GetPageSz,  Scrollbar_SetLineSz,  Scrollbar_GetLineSz  - для
    использования вместе с модулем ToGRush в дуальном коде.

    [*] IndexOfChar, IndexOfStr изменены и понимают #0 как обычный символ,
    не обязательно завершающий строку.

    [-] MCK: при генерации кода для установки нестандартного цвета (Color)
    добавлено  приведение  типа  для  предотвращения выдачи предупреждения
    компилятором.

    [-]   Дл  случаев,  когда  CanResize  =  false  или  запрещены  иконки
    минимизации   и/или  максимизации  формы,  так  же  окну  отправляется
    сообщение   WM_INITMENU,   что   обеспечивает   корректное  запрещение
    соответствующих пунктов системного меню.

    [+]  Свойство  LikeSpeedButton  обеспечено  для  зеркальных  контролов
    TKOLCheckBox,  TKOLRadioBox, и теперь может быть обеспечено для любого
    потомка  TKOLCustomControl  простым  перечислением  свойства  в списке
    публикуемых.

    [*] Обновлены компоненты TKOLGif, TKOLPng.
  • =BuckLr= © (19.01.08 18:01) [1]
    Хорошее обновление. Спасибо
  • Compiler © (19.01.08 19:08) [2]
    Исправьте, пожалуйста, Parse(). При Separators равном одному символу все работает, а при двухсимвольном (напр #13#10) разделителе глючит. Необходимо заменить
    Delete( S, 1, Pos )

    на
    Delete( S, 1, Pos+Length(Separators)-1 )

    . Посмотрите, может меня глючит?. Версия KOL 2.83.
  • Jon © (19.01.08 19:36) [3]

    > [-]  Дл  случаев,  когда  CanResize  =  false  или  запрещены
    > иконки минимизации   и/или  максимизации  формы,  так  же  
    > окну  отправляется сообщение   WM_INITMENU,   что  
    > обеспечивает   корректное  запрещение соответствующих пунктов
    > системного меню.



    > [-] For cases when CanResize is false or minimize or maximize
    > icon are disabled, also a code is generated which sends
    > WM_INITMENU to a form window handle at startup. This provides
    > correct disabling of correspondent system menu items as
    > well.


    Sorry - still does not work. I still have to add WM_INITMENU to disable maximize menu item:


    CanResize := False;
    Perform(WM_INITMENU,0,0);



    Problem only on first click of form system menu. Click on task bar icon is ok.
  • Vladimir Kladov © (19.01.08 20:01) [4]
    В Parse нет многоимвольных сепараторов. Это просто множество символов, из которых первый найденный считается разделителем.
  • Vladimir Kladov © (19.01.08 20:04) [5]
    System menu:
    For me it works. Check please if WM_INITMENU performed in _1.inc file.
  • Jon © (19.01.08 20:45) [6]

    > System menu:
    > For me it works. Check please if WM_INITMENU performed in _1.inc file.


    I do not use MCK. With this simlpe KOL test, restore and maximize are incorrect.

    program test;

    uses
     Windows, Messages, KOL;

    begin
     Applet := NewForm(nil,'Test');
     Applet.CanResize := False;
    //  Applet.Style := Applet.Style and not WS_MAXIMIZEBOX;    //remove to fix
    //  Applet.Perform(WM_INITMENU,0,0);                                //remove to fix
     Run(Applet);
    end.

  • Vladimir Kladov © (19.01.08 21:20) [7]
    Without MCK, it must be called since several different reasons are there in several possible combinations. In MCK, just Perform(WM_INITMENU,... generated and run.
  • MTsv DN (19.01.08 21:35) [8]
    В начале этого года была плановая смена пароля на сервере www.kolnmck.ru... С хозяином сайта Гэндальфом связаться не могу...надеюсь что пока... Т.ч. обновления пока не ожидается :(
  • Compiler © (19.01.08 22:34) [9]
    > Vladimir Kladov ©   (19.01.08 20:01) [4]
    > первый найденный считается разделителем.

    И удаляется только он один, а остальные остаются.
    Пример:
    const
     br=#13#10;
    var
     s:string;
    begin
    s:='Один'+br+'Два'+br+'Три';
    Showmessage(parse(s,br));//Должно быть Один, возвращается Один
    Showmessage(parse(s,br));//Должно быть Два , возвращается пустота
    Showmessage(parse(s,br));//Должно быть Три , возвращается Два
    end;

  • Elec3C © (20.01.08 00:18) [10]

    > WM_INITMENU

    За это спасибо.
  • Vladimir Kladov © (20.01.08 09:41) [11]
    И удаляется только он один, а остальные остаются.


    Так и должно быть. Для многосимвольных разделитей напишите свой parse.
  • D[u]fa (20.01.08 12:37) [12]
    Новости от 19-Jan-2007 (KOL & MCK v2.86)

    =)
  • Jon © (25.01.08 19:29) [13]
    In KOL.PAS line 33228:

        fDefWndProc := {$ifdef FPC21}@{$endif}Params.WindowClass.lpfnWndProc;



    Is FCP21 correct? I think it should be {$ifdef FPC}
  • _vadim (28.01.08 09:47) [14]
    Если кому интересно.
    Версия 2.86 нормально компилируется в FreePascal вот с такой доработкой:
    1. В файле koldef.inc:
    - перед строчками

    {$IFDEF FPC}
    {------------------------------------
    by Thaddy de Koning:


    поставить

    {$DEFINE FPC}
    {$DEFINE VER2}


    (Рекомендую работать именно с FreePascal версии 2)
    В результате получается:

    {$DEFINE FPC}
    {$DEFINE VER2}
    {$IFDEF FPC}
    {------------------------------------
    by Thaddy de Koning:


    2. В файле kol.pas, в той строчке, которую указал Jon:

    fDefWndProc := {$ifdef FPC21}@{$endif}Params.WindowClass.lpfnWndProc;


    изменить {$ifdef FPC21} на {$ifdef FPC}:

    fDefWndProc := {$ifdef FPC}@{$endif}Params.WindowClass.lpfnWndProc;


    Теперь у меня компилируется без ошибок.
    Но с кучей варнингов... :)
    Компилятор FPC 2.2.0.
  • Vladimir Kladov © (28.01.08 15:19) [15]
    Символы условной компиляции для того и придуманы, чтобы их можно было задавать не модифицируя исходный файл. В опциях проекта, например, или в командной строке компилятора. FPC21 отличается от FPC из-за бага в FPC2.0, который был исправлен в 2.1. Соответственно, надо ставить оба символа в FPC выше 2.0.
  • _vadim (29.01.08 10:00) [16]
    Тогда поправка к моему предыдущему постингу. :)
    Файл kol.pas не править, а в файл koldef.inc добавить DEFINE:

    {$DEFINE FPC}
    {$DEFINE FPC21}
    {$DEFINE VER2}

  • D[u]fa (29.01.08 12:08) [17]
    дык наверное нет директивы на тот случай если юзаете 20 фпц а не 21
  • Barloggg (29.01.08 12:36) [18]
    в KOL.pas много раз встречается несостыковка

    в interface стоит
    {$IFNDEF STREAM_COMPAT} const {$ENDIF}
    а в implementation стоит
    const

    без скобок.

    строки
    25169
    25204
    25242
    25267
    25635

    бяка всплыла при использовании KOLPNG которая в свою очередь использует KOLZLIB в которой сопсно и используются эти недопереписанные строки.

    кстати в сам KOLZLIB надо тогда внести эти директивы компиляции если уж руководствоватсья такой логикой.
  • Barloggg (29.01.08 12:37) [19]
    о, гм, вижу запись об обновлении KOLPNG :)
  • Barloggg (29.01.08 12:48) [20]
    и, кстати даты на сайте не обновлены. это я про KOLGIF KOLPNG.

    Перечитал внимательно новости. хм. KOLZLIB тоже обновлен. Хорошо, значит из моих слов актуально только про kol.pas
  • Jon © (30.01.08 02:37) [21]
    Bug found with ListView.

    ListView.OnMouse up does not respond to button up messages.
    Instead it responds to mouse double click messages.
    Here is a simple demonstration:

    program test;

    uses
     KOL;

    var
     Counter: Integer;

    procedure ListViewMouseUp(Dummy: Pointer; Sender: PControl; var Mouse: TMouseEventData);
    begin
     Applet.Caption := Int2Str(PControl(Sender).LVCurItem);
    end;

    begin
     Applet := NewForm(nil,'Test');
     with NewListView(Applet,lvsDetail,[lvoGridLines,lvoRowSelect],nil,nil,nil)^ do
     begin
       SetAlign(caClient);
       LVColAdd('Column 1',taCenter,200);
       LVColAdd('Column 2',taCenter,200);
       LVColAdd('Column 3',taCenter,200);
       OnMouseUp := TOnMouse(MakeMethod(nil,@ListViewMouseUp));
       Counter := 0;
       repeat
         LVItemAdd(Int2Str(Counter));
         Inc(Counter);
       until Counter = 100;
     end;
     Run(Applet);
    end.



    Tested in ASM and PAS version (D7 WinXP).
  • mdw © (30.01.08 18:13) [22]
    Заметил небольшой баг в MCK для меню с OwnerDraw := TRUE;
    свойство  OwnerDraw := TRUE; устанавливается только для меню верхнего уровня, а вот для подменю нет.
    Пока исправил так (жирным - то что добавил):

    procedure TKOLMenuItem.SetupAttributesLast(SL: TStringList; const MenuName: String);
    var I: Integer;
       MI: TKOLMenuItem;

    begin
     if FownerDraw then
       SL.Add( '    ' + MenuName + '.Items[ ' + IntToStr( ItemIndex ) +
               ' ].OwnerDraw := TRUE;' );

     for I := 0 to Count - 1 do
     begin
       MI := SubItems[ I ];
       MI.SetupAttributesLast( SL, MenuName );
     end;

    end;
  • Barloggg (04.02.08 15:00) [23]
    странно. при попытке распарсить пустую строку бабахает. очень странно. а дома работает.
  • shin (11.02.08 19:13) [24]
    Если обновлять от скаченного KOL&MCK-2.80 до 2.86, то на последнем апдейте kolmck285to286.upd не обновляется mckCtrls.pas, говорит об ошибке
  • =BuckLr= © (11.02.08 19:49) [25]
    У меня нормально обновилось с 2,85 на 2,86
  • Rocket © (24.02.08 20:55) [26]
    Баг: asm-версия IndexOfStr зацикливается если в S нет Sub. С паскаль-версией всё нормально, возвращает -1.
  • mdw © (21.03.08 12:46) [27]
    Что-то Владимир пропал.

    Вот еще баг нашел. Не понятно только, как вообще раньше работало, и долго уже....

    procedure TWStrList.SetText(const Value: WideString);
    ....
     L := (Length( Value ) + 1) * Sizeof( WideChar );
     GetMem( fText, L );
     System.Move( Value[ 1 ], fText^, L );

     fText[ L+1 ] := #0; // Вот здесь падает, что и не удивительно, т.к #0 заносится куда-то в двое дальше длины строки

     fTextBufSz := Length( Value );
    ....

    Предлагаю такое исправление:
    procedure TWStrList.SetText(const Value: WideString);
    ....
     fTextBufSz := Length( Value );
     L := (fTextBufSz + 1) * Sizeof( WideChar );
     GetMem( fText, L );
     System.Move( Value[ 1 ], fText^, L );
     fText[ fTextBufSz ] := #0;
    ....
  • Vladimir Kladov © (21.03.08 18:45) [28]
    Не пропал. Не дождётесь.

    Версия 2.87:

                 Новости от 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).

  • MTsv DN (21.03.08 19:43) [29]
    > Не пропал. Не дождётесь.
    Гы...
  • MTsv DN (23.03.08 16:16) [30]
    Vladimir Kladov ©   (21.03.08 18:45) [28]
    >
    > Версия 2.87:

    Владимир, подключите UNICODE_CTRLS. У меня 8 ошибок сразу выпало...
  • MTsv DN (23.03.08 16:22) [31]
    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...
  • MTsv DN (23.03.08 16:35) [32]
    Вообще функция 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 откуда-то взялась...
  • MTsv DN (24.03.08 07:35) [33]
    Еще один вопрос.

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

    В любом случае, в 2.87 IndexOfChar не работает с UNICODE.
 
Конференция "KOL" » Версия 2.86 [Delphi, Windows]
Есть новые Нет новых   [134431   +15][b:0][p:0.003]