Конференция "KOL" » баги kolnmck 288 [Delphi, Windows]
 
  • Dy1 (05.08.09 11:29) [0]
    обнаружил неприятную вещь - утечка памяти метода Draw. Т.к. прогер из меня никакой :) , решил заменой на Canvas.CopyRect
  • Dy1 (05.08.09 11:32) [1]
    забыл добавить, что рисую на форме в таймере бмпшку 80х80х32 250 раз в секунду (ну надо мне так).
  • D[u]fa (05.08.09 13:37) [2]
    Можно код где есть утечка? И чем обнаружил?
  • Dy1 (05.08.09 15:14) [3]
    код обычный: битмап.Draw(
    Обнаружил FastMM4-кой.

    И сейчас обнаружил утечку 20 байт при загрузке PNG из потока (KOLGraphicEx.pas)
  • Vladimir Kladov © (06.08.09 22:48) [4]
    Это баг KOLGraphicEx, там и надо смотреть видимо. Есть еще TinyPng из GrushControls.

    Народ, я уезжаю на месяц, связи не будет, в сентябре приеду.
  • Dy1 (24.08.09 17:11) [5]
    юзал tinyPNG и tinyJPGGIFBMP пока не надоели утечки по килобайту. FastMM место не показал, я в коде не разобрался. JpegObj работает отлично.
  • Dy1 (02.09.09 10:35) [6]
    попался ещё один баг:
    PBitmap.Canvas.Arc вылетает с ошибкой где-то в памяти. Вызов напрямую windows.Arc работает.
  • Vladimir Kladov © (02.09.09 15:57) [7]
    Я про это уже писал (TCanvas.Arc). Привет, кстати. Пример на баг TBits есть? Первый жень после возвращения некогда было даже в инет выйти.
  • Dy1 (03.09.09 12:08) [8]
    привет
    примера нет - опять потерял проект (или отложил или удалил), что делал не помню. Видимо использовал какой-то компонент, который использовал koladd
  • Ruzzz (07.09.09 10:47) [9]
    в Turbo Delphi не хочет компилироваться KOL.pas если установить UNICODE_CTRLS до тех пор пока не установим еще и FORCE_ALTERNATEFILENAME, ошибка в 23405:
    procedure TDirList.ScanDirectory(const DirPath, Filter: KOLString;
     Attr: DWord);
    var FindData : TFindFileData;
       E : PFindFileData;
       Action: TDirItemAction;
       {$IFDEF FORCE_ALTERNATEFILENAME}
       IsUnicode: AnsiString;
       {$ENDIF}
    begin
     Clear;
     FPath := DirPath;
     if (FPath = '') then Exit;
     FPath := IncludeTrailingPathDelimiter( FPath );
     if not Assigned(fFilters) then begin
    >>>    fFilters := {$IFDEF FORCE_ALTERNATEFILENAME} NewWStrList {$ELSE} NewStrList {$ENDIF};
       if Filter = '*.*' then
         fFilters.Add( '*' )
       else
         fFilters.Add( Filter );
     end;



    ошибка:
    [Pascal Error] KOL.pas(23405): E2010 Incompatible types: 'TStrList' and 'TWStrList'
  • Ruzzz (07.09.09 12:08) [10]
    Еще такой баг, или я что-то не так делаю:
    делаю
    ListView1.Anchor(TRUE, TRUE, TRUE, TRUE);


    потом такой код:
     DefWindowProc(Form.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
     ShowWindow(Form.Handle, SW_HIDE);
     ShowWindow(Form.Handle, SW_SHOW);
     DefWindowProc(Form.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);


    и после этого ListView1 по размерам уходит далеко-далеко вправо и вниз, это касается не только ListView1. если в Anchor установить только вертикальные(top, bottom) значения в true, то размер "уйдет" только вниз, соот-но для left/right
    Что посоветуете? Все таки Anchor довольно нужная штука, не всегда удобно align использовать.
  • MTsv DN (07.09.09 14:59) [11]
    2 Ruzzz
    Добавка форс_алтнейм - это мое, но тока видимо D[u]fa добавил не правильно. Вот как должно быть:
    {$ELSE ASM_VERSION} //Pascal
    procedure TDirList.ScanDirectory(const DirPath, Filter: KOLString;
     Attr: DWord);
    var FindData : TFindFileData;
       E : PFindFileData;
       Action: TDirItemAction;
       {$IFDEF FORCE_ALTERNATEFILENAME}
       IsUnicode: AnsiString;
       {$ENDIF}
    begin
     Clear;
     FPath := DirPath;
     if (FPath = '') then Exit;
     FPath := IncludeTrailingPathDelimiter( FPath );
     if not Assigned(fFilters) then begin
       fFilters := {$IFDEF UNICODE_CTRLS} NewWStrList {$ELSE} NewStrList {$ENDIF};
       if Filter = '*.*' then
         fFilters.Add( '*' )
       else
         fFilters.Add( Filter );
     end;

  • Dy1 (07.09.09 14:59) [12]
    > Пример на баг TBits есть?
    подключаю kolAdd, сразу 6 ошибок.

    Символы
    {$DEFINE ASM_VERSION}
    {$DEFINE NO_DEFAULT_BUTTON_BOLD}
    {$DEFINE NOT_USE_RICHEDIT}
    {$DEFINE CRASH_DEBUG}{$DEFINE DEBUG_GDIOBJECTS}{$DEFINE CHK_BITBLT}
  • MTsv DN (07.09.09 15:13) [13]
    Тестовый проект?
  • D[u]fa (07.09.09 16:32) [14]
    FORCE_ALTERNATEFILENAME исправлено и залито. C kolAdd ошибок нет
  • Dy1 (07.09.09 18:32) [15]
    www.dy.cdrrhq.ru/t2.rar
    весь тестовый проект - подключение koladd, как я и говорил.
  • MTsv DN (07.09.09 19:27) [16]
    2 Dy1
    Странный Вы все-таки...или такой "уникальный", что находите себе на причинное место приключения там где их нет... На кой ляд Вы {$DEFINE ASM_VERSION} добавили? Она по умолчанию выставляется...
  • MTsv DN (07.09.09 20:00) [17]
    Гы. Чую, придется мне извиниться...{$DEFINE ASM_VERSION} не подхватывается в D2007 для KOLadd.pas...

    А правки следующие:
    1. Стр. 1136
     MOV  EAX, [EAX].TBitsList.fItems
    2. Стр. 1309
     MOV  ECX, [ECX].TBitsList.fCapacity
    3. Стр. 1330
     MOV  EAX, [EAX].TBitsList.fItems
    4. Стр. 2275
           CALL     TObj.Final
    5. Стр. 2343
           CALL     TObj.Final
  • D[u]fa (07.09.09 20:26) [18]
    Исправлено, 4 и 5 пункты под вопросом - заменены на TObj.Destroy
  • Ruzzz (08.09.09 15:36) [19]
    файл KOLadd, строка 2227, Заменил Path: AnsiString на KOLString, иначе при использовании UNICODE_CTRLS выдает ошибку что "не совпадает с предыдущим описанием"
    //[function NewDirChangeNotifier]
    function NewDirChangeNotifier( const Path: AnsiString; Filter: TFileChangeFilter;
                                  WatchSubtree: Boolean; ChangeProc: TOnDirChange )
                                  : PDirChange;



    и действительно: строка 459
    function NewDirChangeNotifier( const Path: KOLString; Filter: TFileChangeFilter;
                                  WatchSubtree: Boolean; ChangeProc: TOnDirChange ): PDirChange;

    Здесь Path: KOLString уже не AnsiString
  • Ruzzz (08.09.09 15:51) [20]
    Под Delphi 2006/Turbo Delphi при использовании UNICODE_CTRLS
    в unit KOLXPMenus;
    выдает ошибку
    [Pascal Warning] KOLXPMenus.pas(225): W1044 Suspicious typecast of string to PWideChar

    вот это участок кода:
    function TXPMenu.TextExtent(const Text: string): TSize;
    var
     DC: HDC;
    begin
     DC := CreateCompatibleDC( 0 );
     SelectObject(DC,FFont.Handle);
     GetTextExtentPoint32( DC, PKOLChar(Text), Length(Text), Result); // <<<
     DeleteDC(DC);
    end;

    Text нужно изменить с string на KOLString?
  • Ruzzz (08.09.09 16:36) [21]
    проблемы в KOLReport c юникодом

    добавил в KOL_unicode.inc строку PDevMode = PDeviceModeW;
    и изменил немного эти файлы:
    KOLReport, KOLPrinters, KOLPageSetupDialog, KOLPrintCommon
    вот: http://narod.ru/disk/12928534000/KOL_printers.7z.html

    У меня такой вопрос, получается что и в MCKReport репорт нужно бы string поменять? но это же IDE, как сама IDE нормально будет это воспринимать? И что если ansi оставить, что тогда будет заносится в свойства при включенном юникоде? чета я не пойму :)
  • Ruzzz (08.09.09 17:00) [22]
    KOLRarProgBar не поддерживает метод SetUnicode, потому что наследуется не от TControl а от TObj
  • MTsv DN (08.09.09 22:24) [23]
    > Text нужно изменить с string на KOLString?
    Ну, уж тогда:
    function TXPMenu.TextExtent(const Text: KOLString): TSize;
    var
    DC: HDC;
    begin
    DC := CreateCompatibleDC( 0 );
    SelectObject(DC,FFont.Handle);
    GetTextExtentPoint32( DC, PKOLChar(Text), Length(Text) * SizeOf(KOLChar), Result);
    DeleteDC(DC);
    end;


    При условии, что где-то объявлено, что GetTextExtentPoint32 при UNICODE_CTRLS = GetTextExtentPoint32W и GetTextExtentPoint32А в ином случае...
  • MTsv DN (08.09.09 22:26) [24]
    > KOLRarProgBar не поддерживает метод SetUnicode, потому что наследуется не от TControl а от TObj
    В то время когда этот компонент писался KOL не не держал еще UNICODE. А нафига он Вам ваще нужен?
  • MTsv DN (08.09.09 22:30) [25]
    2 Ruzzz
    Почти ВСЕ КОМПОНЕНТЫ надо подправлять под UNICODE_CTRLS. Лично у меня есть некоторые правленные, но их мало.

    Если склероз не изменяет, то 100%, из "серьезных" для меня, только ATL. Кое-какие из новосозданных SATabs, QProgressBar и некоторые другие... Т.к. не надо флудить по каждому компоненту.

    З.Ы. А с KOLReport, кажись и без юникода траблов хватало...
  • MTsv DN (08.09.09 22:33) [26]
    Дополнение
    Там не только надо юникод править. Там и кое-что, скажем так, после изменений в "ядре" KOL'а надо править, и поддержку новых версий Дельфи тоже надо править.

    Никто не будет этим заниматься направленно. По мере необходимостей будут появляться некоторые правленные версии...
  • Ruzzz (09.09.09 11:33) [27]
    Я понял, действительно для юникода многое не готово, но по мере использования буду помечать это все и потом переодически постить здесь.
  • Vladimir Kladov © (09.09.09 22:45) [28]
    Хорошо бы еще потом список исправлений одним файлом (хотя бы текстовым), или ссылку на место с правленым архивом. Большая просьба (я надеюсь, все в порядке, но все же): по возможности не переставляйти местами блоки кода - чтобы можно было сравнивалкой изучать различия. (А вот мне UNICODE практически редко-редко нужен).
  • Ruzzz (09.09.09 23:50) [29]
    По моему просто нужно пройтись по всем модулям и заменить PChar на PKOLChar и String на KOLString, а также все то что берется из windows внести также и в unicode.inc
  • L'Autour (10.09.09 06:00) [30]
    Тогда желательно еще  в функциях по обработке строк, которые специально работают с PChar и String как с ANSI сделать замену на PAnsiChar и AnsiString.
  • Vladimir Kladov © (10.09.09 16:50) [31]
    2 Ruzzz - если бы можно было все заменить на KOLChar, мы бы это 2 года назад проделали. Каждый раз надо смотреть и проверять, и заменять не бездумно, а править окружающий код. Так что дальнейшие изменения по unicode делаются по мере надобности, и в основном теми, кому надобно. С последующим слиянием.
  • Ruzzz (10.09.09 17:36) [32]
    Да, я это понимаю. Я не правильно выразился, конечно не все так просто, нужна проверка.
  • Soloton (17.09.09 10:47) [33]
    Прошу прощения за оффтоп, но всё же:
    svn://nekki.ru/kolnmck
    уже не работает?
  • Демьян (17.09.09 21:23) [34]
    Нормальный такой спам, мутировавший...
  • intlex (29.12.09 01:22) [35]
    может и не баг, но замечание

    при использовании TKOLIB, в частности делаем backup базы по Firebird 2.1
    в методе TIBBackupService.SetServiceStartOptions после вызова GetConnectString следует в названии БД оставить только путь, а имя сервера удалить, иначе вызовет ошибку:
    gbak: ERROR:connection rejected by remote interface
    gbak:Exiting before completion due to errors

  • Vladimir Kladov © (29.12.09 19:14) [36]
    KOLIB не входит в KOL Как основная часть, это дополнительный компонент. Я так его ни разу и не загружал.
  • Dimaxx © (05.01.10 02:21) [37]
    Обнаружена проблемка с mainmenu в турбо-дельфи.

    В design-time при изменении меню, а также вставке из буфера обмена готового меню из другого проекта, ни меню, ни его пункты вообще не отображаются на форме. Более того, при вставке из буфера обмена меню не попадает в inc-файл, потому как вставив меню и сохранив проект, после компиляции запуская полученный exe и в нем меню не отображается. Помогает только добавление и удаление пункта меню после вставки из буфера обмена. После этого меню нормально создается в exe.

    Были еще проблемы с жуткими тормозами от постоянной отрисовки некоторых сторонних контролов, но это успешно решили, а также переделано изменение кода не в файле, а прямо в редакторе. Осталась проблема с меню - бьемся весь день - не отображается, собака. Хотя вплоть до Д7 нормально отображалось.

    Также невозможно увидеть форму старого проекта (например из Д5/Д7) при загрузке его в турбо-Д. Приходится старые проекты переделывать ручками. Иногда ТД сыплет ошибками, что не знает что такое new, create и прочие очевидные вещи, но компилирует нормально... Если честно, мне эта "лицензионная халява" начинает надоедать своими проблемами.
  • mdw (18.03.10 12:22) [38]
    Небольшая правка TIcon.

    procedure TIcon.LoadFromStream(Strm: PStream);
    ...
     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;

    Жирным - то что добавил. Без этого исправления пропадает палитра, ну и картинка сдвигается.
 
Конференция "KOL" » баги kolnmck 288 [Delphi, Windows]
Есть новые Нет новых   [134430   +2][b:0.001][p:0.005]