Конференция "KOL" » Версия 3.04 [Delphi]
 
  • Vladimir Kladov © (31.12.10 12:11) [0]
    С наступающим Новым Годом!

    Новости от 31 декабря 2010 (KOL & MCK v3.04)

    Обратите внимание, что в данной версии изменилась декларация структуры TMsg. Из-за этого компилятор может отказываться воспринимать ранее назначенные обработчики события OnMessage. Для исправления ситуации достаточно заменить ссылки на тип tagMsg типом TMsg. Для проектов MCK такое исправление будет выполнено автоматически при загрузке (не забудьте сначала сделать ребилд пакета MCK !).

    [+]
    Добавлена собственная декларация типа TMsg, с расшифровкой кода сообщения в виде перенумерованного типа TMessageDecode (упрощает отладку, позволяет сразу видеть имя оконного сообщения при наведении на переменную типа TMsg или при показе ее значения в Watches).
    VK
    [+]
    TImageList: добавлено свойство OverlayIdx, упрощает рисование иконок с оверлеем.
    VK
    [+]
    TControl (toolbar): добавлена функция TBBtnEvent, позволяет получить обработчик события, назначенного на отдельную кнопку toolbar-контрола.
    VK
    [+]
    TControl (toolbar): добавлена функция TBBtnTooltip, позволяет получить значение тултипа, назначенного на кнопку toolbar-контрола.
    VK
    [+]
    TControl (form): добавлена функция CenterOnForm, позволяет центрировать одну форму относительно другой.
    VK
    [*]
    TDirList: небольшие оптимизации размера кода.
    VK
    [-]
    TControl (USE_MH_TOOLTIP): исправлено падение при удалении контрола в динамике (тултип пытался освободиться дважды).
    VK
    [*]
    TControl (DefaultBtn, CancelBtn): небольшая оптимизация размера кода.
    VK
    [*]
    Так же, изменены внутренние названия некоторых полей (fOnChange -> fOnChangeCtl, fOnGTChange, fOnChangeCanvas).
    VK
    [-]
    TControl (ImageShow): исправлено присваивание начального значения для индекса изображения CurIndex.
    VK
    [+]
    DirDlgEx (KOLadd): добавлено центрирование диалога ShowQuestion относительно активной формы приложения.
    VK
  • Jon © (31.12.10 20:34) [1]
    And a Very Happy New Year to you too. Thank you for everything that you have done for the KOL community this year.

    Looks like you forgot to include an updated KOL_ASM.inc in the KOL v3.04 archive:


    dcc32.exe -b KOL.pas -dPAS_VERSION;

    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    KOLDEF.INC(281)
    KOLDEF.INC(281)
    delphidef.inc(48)
    MsgDecode.pas(4958)
    delphicommctrl.inc(1588)
    KOL_ansi.inc(2317)
    KOL_ansi.inc(2317)
    KOL.pas(65723)
    77507 lines, 0.69 seconds, 259877 bytes code, 4342 bytes data.

    dcc32.exe -b KOL.pas

    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    KOLDEF.INC(281)
    KOLDEF.INC(281)
    delphidef.inc(48)
    MsgDecode.pas(4958)
    delphicommctrl.inc(1588)
    KOL_ansi.inc(2317)
    KOL_ansi.inc(2317)
    KOL_ASM.inc(1736) Error: Undeclared identifier: 'fOnChange'
    KOL_ASM.inc(11377) Error: Undeclared identifier: 'fOnChange'
    KOL_ASM.inc(14837)
    KOL.pas(65723)

  • Vladimir Kladov © (31.12.10 21:06) [2]
    You are right, Jon, forgot it. Just updated kol.zip on site.
  • awkward © (02.01.11 18:09) [3]
    А почему в последней версии нет сортировки TWStrListEx с учетом объектов? в TStrListEx она присуствует
  • Vladimir Kladov © (02.01.11 20:12) [4]
    Вы хотите сказать, что оно было раньше, и я его убрал? Такое вряд ли. Скорее, я редко пользуюсь WStrListEx и unicode. Скопировать недолго. Ну, я положил 3.04+, с этой сортировкой. Проверьте.
  • awkward © (02.01.11 20:41) [5]
    Я не говорю, что оно было раньше, просто в той версии кода не было :) Спасибо!
  • Гость (07.01.11 19:54) [6]
    Delphi 2009, KOL 3.04 Не подсвечиваются строки.

    procedure TForm1.Logger(RichEdit: PControl; AMsg: String; AColor: TColor; ABold: Boolean);
    var
     I: Integer;

    begin
     AMsg := AMsg + sLineBreak;
     RichEdit.SelStart := RichEdit.RE_TextSizePrecise;
     I := RichEdit.SelStart;
     RichEdit.Selection := AMsg;
     RichEdit.SelStart := I;
     RichEdit.SelLength := Length(AMsg);
     RichEdit.RE_FmtFontColor := AColor;
     RichEdit.RE_FmtBold := ABold;
     RichEdit.SelLength := 0;
    end;

    Logger(RichEdit1, 'Green bolded line', clGreen, True);
    Logger(RichEdit1, 'Red line', clRed, False);
  • Vladimir Kladov © (07.01.11 21:25) [7]
    Обновил 3.04++++ (KOL.zip)
  • RusSun © (08.01.11 21:16) [8]
    Скажите пожалуйста Где можно скачать 3.04++++ (KOL.zip)
    может чего не понял;)
  • Гость (08.01.11 21:24) [9]
  • RusSun © (09.01.11 07:03) [10]
    Вижу KOL v3.04  31.12.2010  598K

    а где 3.04++++ (KOL.zip)
  • RusSun © (09.01.11 07:11) [11]
    Мой пардоны это он и был;)
  • Vladimir Kladov © (10.01.11 20:37) [12]
    Выложил 3.05. Т.к. ничего практически нового, кроме исправлений в основном, версию 3.04 не оставляю на сайте.

    Новости от 10 января 2011 (KOL & MCK v3.05)
    [+]
    Добавлены процедуры Swap и Sort для WStrListEx, для сортировки с учетом объектов, прикрепленных к строкам - по аналогии с StrListEx.
    VK
    [*]
    TControl.Delete применима теперь к list view (ранее требовалось использовать LVDelete)
    VK
    [+]
    TDirList.InsertItem - для добавления собственных элементов в DirList.
    VK
    [-]
    Исправлено программное выделение текста в мемо и edit box'е.
    VK
    [-]
    Исправлена быстрая версия функции AnsiCompareStrNoCase.
    VK
    [-]
    Исправлено свойство RE_URL для rich edit.
    VK
    [-]
    Исправлено позиционирование формы по умолчанию (asm версия)
    VK
    [-]
    Исправлено раскрашивание текста в rich edit.
    VK
    [-]KOLadd
    Исправлен TBits - установка бита за пределами массива не меняла размер "массива".
    VK
  • Vladimir Kladov © (11.01.11 20:52) [13]
    Обновил до 3.05+:

    Исправление AnsiCompareStrNoCase было чуть неудачным, поправил. Теперь (вроде бы) стало совсем правильно.
  • Dufa © (13.01.11 12:33) [14]
    VK, а в каком плане неудачным?
    И еще хотел узнать, есть ли новая версия книги по КОЛу? или хотя бы 3.0 версия в doc формате.. а то на сайте старая.. (pdf не в счет)
  • Vladimir Kladov © (13.01.11 16:31) [15]
    Не достигалась цель, значит была неудачная. Изменение одной цифры в индексе все исправило.

    Книгу я еще осенью обновил, после выхода 3.00. Из всех новшеств можно было бы добавить, что Delete теперь работает для ListView, но и LVDelete работает так же. Все остальное соответствует вполне.
  • Vladimir Kladov © (21.01.11 19:02) [16]
    Вышла версия 3.06:

    Новости от 21 января 2011 (KOL & MCK v3.06)
    [-]
    Для Tab Control-а, исправлены установка свойства Color и получение прямоугольника панели.
    VK
    [*]
    С опцией FILE_EXISTS_EX, проверка существования файла в функции FileExists происходит с подавлением сообщений об ошибках (отсутствие флоппи-диска).
    VK
    [*]
    Для NewThreadAutoFree, обеспечивается вызов CloseHandle.
    VK
    [-]
    Исправлено: свойство Visible не работало в обработчике события OnShow формы.
    VK
  • Vladimir Kladov © (21.01.11 19:05) [17]
    Да, если кому не лень потестировать, выложил маленький файловый командер: http://kolmck.net/apps/ColumnCmdr.zip
  • Dufa © (21.01.11 22:53) [18]
    Иконки медленно и не всегда отображаются
    Языки почему то не подгрузились
    Надписи на кнопках не особо читабельны из-за размера
    Имена файлов\папок\винтов в панеле не влезают
    Размер свободного места красиво сделан - но глючит (после нескольких нажатий на диск д, его шкала пропала вместе с текстом)

    ну и 2 панельки привычнее все таки
  • Гость (22.01.11 01:14) [19]
    норм программа ColumnCmdr, но мне все же привычней табличный вид :)
  • Vladimir Kladov © (22.01.11 12:14) [20]
    Будет и табличный вид (немного не так в listview - в 2 строки), но позже. В первую очередь делаю то, что мне нужнее. Всю жизнь еще с 95 виндов всегда вынужден был переключать в режим Список. Достало уже, особенно доставать стало в семерке, где просто не запоминает вид для всех папок. Как только Проводник видит avi-файл или картинку, автоматом переключает в режим эскизов.

    Двухпанельность - мне не нужна. Есть Ctrl+Tab или системное меню New window, или открытие директории с шифтом в новом окне. Сколько надо, столько и будет окон. Двухпанельные менеджеры мне неудобны, заслоняют весь экран.

    Глюки возможны, С языками я немного ошибся в нумерации, лучше пока языковые файлы грохнуть. Все равно локализация еще только начата. Надписи нечитабельны - на каких кнопках - слева, что ли? Там не надо читать ничего, это так, декорация. Или на обычных кнопках?

    Хотя глюк с пропаданием диска - это вообще из фантастики. Как этого можно добиться - не представляю. Диск д - это что? СД? Жесткий? Флэшка? Я надеюсь, вы его не переименовали... А то я забыл на верхнем уровне убрать 1-секундное меню по долгому удержанию левой клавиши мыши :)
  • Dufa © (22.01.11 14:55) [21]
    Д это жесткий. Вот картинка http://s2.ipicture.ru/Gallery/Viewfull/3214354.html
  • Vladimir Kladov © (22.01.11 16:51) [22]
    Dufa Можно вопрос: вы картинку сразу сделали, или так несложно добиться этого эффекта повторно? (Если не секрет, то как).

    Со шрифтами правда странно, что они не вытянуты в ширину. У вас Arial неправильный в системе? (Или это вообще не Windows, а что-то иное?)
  • Dufa © (22.01.11 18:43) [23]
    Запускаю прогу с диска Д, выхожу в самый корень кнопкой вверх. Сначала все норм, потом начинается пересчет свободного\занятого места и происходит глюк

    Ариал самый обычный, тема не стандартная
  • Vladimir Kladov © (22.01.11 20:07) [24]
    Но на уровне Компьютер нет перерасчета, данные по диску берутся из GetDiskFreeSpace. Перерасчет - это когда в скобках мелькает (..:) -> (:..) -> (.:.), это для директорий.

    Должно быть примерно так (со шрифтами): http://s1.ipicture.ru/uploads/20110122/R3VTLTvK.png

    А вот, например, если в KOL-программе шрифту поменять FontWidth, у вас никакой реакции не наблюдается на компе? Со всеми шрифтами? На true type и вообще на масштабируемые должно бы действовать.

    Кстати, перезалил и архив с программой. Локализацию почти закончил, хотя еще не все на русский перевёл.
  • QAZ (26.01.11 11:08) [25]

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

    меня всегда умиляли програмисты которые сами не могут пользоваца тем,для чего они программируют :D
    а пытаюца заполнить пробелы в своих знаниях непонятными глюкавыми поделками

    чтобы проводник этого не делал надо потратить всего две минуты на настройку
    и при этом даже не используеца редактор реестра!!! :)
  • Santa (27.01.11 10:45) [26]
    Не знаю глюк или не глюк, но столкнулся в компоненте TabControl.
    Не прорисовываются компоненты на активной закладке.
    Ложим в MCK\KOL-проект на форму TabControl (Align=caClient) и добавим одну закладку (Count=1, Caption='Тестовое');
    Положим для примера кнопку (TKOLButton), по нажатии на которую будут добавляться закладки

    Напишем, допустим,следующий код в OnClick кнопки:

    procedure TForm1.Button1Click(Sender: PObj);
    var
     i,n:Cardinal;
     Page:TKOLTabPage;
     Panel:TKOLPanel;
     Edit:TKOLEditBox;
     ListView:TKOLListView;
    begin
     n:=TabControl.Count;
    {  Page:=TabControl.Pages[0];}
     Page:=TabControl.TC_Insert(n,'Тестовое2',0);
     TabControl.CurIndex:=n;                              {*}
     Panel:=NewPanel(Page,esNone);
     Panel.Align:=caTop;
     Panel.Height:=40;
     Edit:=NewEditBox(Panel,[]);
     ListView:=NewListView(Page,lvsDetail,[],nil,nil,nil);
     ListView.Visible:=true;
     ListView.Align:=caClient;
    end;

    Созданные компоненты не прорисовываются на закладке, зато достаточно малейшего изменения размера формы(свернуть, максимизировать, растянуть и т. д.) как они появляются так как им и надо быть.

    P. S. Если перенести строку {*} в конец процедуры - то все отображается нормально. Но аналогичная проблема свуществует, если закладку не добавлять, а рисовать на активной.
  • Santa (27.01.11 10:46) [27]
    Забыл добавить, версия 3.06
  • QAZ (27.01.11 10:48) [28]
    Удалено модератором
  • Santa (27.01.11 11:20) [29]
    Еще обнаружен глюк при использовании компонента MainMenu в версии 3.06 (в остальных не проверю).
    Если создать меню проекте KOL\MCK, затем распахнуть окно на весь экран, затем минимизировать на панель задач, затем востановить с панели задач, то востановление происходит в обыную форму, а не распахнутую на весь экран. При использовании других компонентов данный глюк не обнаружен.
  • Vladimir Kladov © (27.01.11 16:37) [30]
    По первому вопросу. Созданному контролу надо сказать CreateWindow или GetWindowHandle. Само не создастся, если не вызывался код, приводящий к созданию окна (например Perform). Это было и в ранешних версиях, всегда.

    Про MainMenu и восстановление не в максимум проверьте еще раз. Пока эффект не замечен, на тестовом проекте. Посмотрел под Win 7, в asm и в pas-версиях, восстанавливается в максимум.
  • Santa (27.01.11 16:57) [31]
    По второму вопросу - Delphi 7, Винда XP SP3, глюк воспроизвелся на аналогичной машине, на других системах воспроизвести глюк в ближайшем будущем нету возможности ...
  • Santa (27.01.11 17:05) [32]
    Забыл уточнить еще одну деталь, данный глюк с MainMenu случается при наличии на форме компонента KOLApplet, без него вроде как все в порядке
  • Vladimir Kladov © (28.01.11 03:32) [33]
    Ну так MainMenu вообще ни при чем, что оно есть, что его нет, поведение одинаково.

    Установите форме MinimizeNormalAnimated = true.
  • Jon © (30.01.11 03:50) [34]

    > Да, если кому не лень потестировать, выложил маленький файловый
    > командер: http://kolmck.net/apps/ColumnCmdr.zip


    I just tried v1.0f and it is a very nice start. Keep us updated on the progress.
  • BMouradov (30.01.11 21:15) [35]
    Сейчас скачал 3.06+, создал NewStrList и сделал .Sort(False), программа выдала ошибку: в ассемблерной функции Sort программа натыкалась на fList.Count, а fList при этом = nil. Я не разобрался до конца с ассемблером, похоже, там сравнение if Count > 1 то ли отсутствует, то ли обрезано, в общем, не работает.

    program Project1;

    uses
     KOL;

    var sl: PStrList;

    begin
     sl := NewStrList;
    //  sl.Add('1');
     sl.Sort(False);
     ShowMessage('1');
    end.
  • BMouradov (03.02.11 01:07) [36]
    В 3,07 то же самое.
  • Vladimir Kladov © (03.02.11 16:18) [37]
    SPEED_NORMAL добавьте в опции.
  • Santa (04.02.11 10:52) [38]
    Не совсем понятно следующее:
    В MainMenu есть набор примерно одинаковых по обработке пунктов меню с небольшими отличиями(Например структура файлов одинакова и значит обрабатывать их можно одинаково - различие допустим в названии файла). Что бы не заморачиваться с обработкой, выставляю свойство Tag у пуктов меню и отправляю на один и тот же обработчик. Что то вроде:


    procedure TForm1.MainMenuN200Menu(Sender: PMenu; Item: Integer);
    var
     c:Cardinal;
     st:TKOLString;
    begin
     c:=Sender.Tag;
     st:=Sender.Caption;
     ShowMessage(Int2Str(c)+' '+st);
    end;



    Так вот, с Caption все нормально получается, а вот Tag всегда равен нулю.
  • Santa (04.02.11 10:54) [39]
    Данное наблюдается в Delphi7, WinXP как в ассемблерной так и паскалевской версии.
  • Vladimir Kladov © (04.02.11 14:51) [40]
    Ничего удивительного, Sender всегда само меню. Для доступа к тагу пункта меню надо его взять:
    Sender.Items[Item].Tag

  • Santa (04.02.11 15:53) [41]
    Самое удивительное, что взял меню присвоил Tag, опять нуль приходит!
  • Santa (04.02.11 15:58) [42]
    ОЙ, вру, все нормально. Я забыл пересобрать проект.
  • Dufa © (04.02.11 16:12) [43]
    Santa, Есть вариант еще проще. У меню назначаешь обработчик OnMenuItem и в нем:


    procedure TForm1.mnuMainMenuItem(Sender: PMenu; Item: Integer);
    begin
       case Item of
         mnuA:
           ;
         mnuB:
    .....

  • Dufa © (04.02.11 16:20) [44]

    > program Project1;
    >
    > uses
    >  KOL;
    >
    > var sl: PStrList;
    >
    > begin
    >  sl := NewStrList;
    > //  sl.Add('1');
    >  sl.Sort(False);
    >  ShowMessage('1');
    > end.


    Можно исправить так:
    procedure TStrList.Sort(CaseSensitive: Boolean);
    asm
           MOV      [EAX].fCaseSensitiveSort, DL
           MOV      [EAX].fAnsiSort, 0
     {$IFDEF SPEED_FASTER}
             {$DEFINE SORT_STRLIST_ARRAY}
     {$ENDIF}
     {$IFDEF TLIST_FAST}
             {$UNDEF SORT_STRLIST_ARRAY}
     {$ENDIF}
           {$IFDEF  SORT_STRLIST_ARRAY}
           MOV      ECX, offset[StrComp]
           CMP      DL, 0
           JNZ      @@01
             {$IFDEF  SMALLER_CODE}
             MOV      ECX, offset[StrComp_NoCase]
             {$ELSE}
             MOV      ECX, [StrComp_NoCase]
             {$ENDIF}
    @@01:
           MOV      EAX, [EAX].fList
           test eax, eax
           jz @exit
           MOV      EDX, [EAX].TList.fCount
           CMP      EDX, 1
           JLE      @@02
           MOV      EAX, [EAX].TList.fItems
           CALL     SortArray
    @@02:
           {$ELSE}
           PUSH     Offset[TStrList.Swap]
           MOV      ECX, Offset[CompareStrListItems_Case]
           CMP      DL, 0
           JNZ      @1
           MOV      ECX, Offset[CompareStrListItems_NoCase]
    @1:     MOV      EDX, [EAX].fCount
           CALL     SortData
           {$ENDIF}
    @exit:
    end;

  • Santa (04.02.11 16:22) [45]
    Ну это на все меню хорошо, если оно почти одинаковое. А если две разные структуры надо реализовать на разные части, то по сути эта процедура будет состоять как бы из двух логических частей, что смысла в таком случае все сводить в одну процедуру не вижу. Хотя дела вкуса.
  • Dufa © (04.02.11 19:32) [46]

    procedure TForm1.MainMenuN200Menu(Sender: PMenu; Item: Integer);


    Тогда почему не юзать Item? =)
 
Конференция "KOL" » Версия 3.04 [Delphi]
Есть новые Нет новых   [120349   +19][b:0][p:0.003]