Конференция "KOL" » KOL v 3.00 [Delphi, Windows]
 
  • Dufa © (18.10.10 17:05) [160]

    > OnChange - это для реакции на редактирование edit-части,
    >  когда она доступна для редактирования.


    Вот раньше она и так и так работала.. но в принципе не критично. свн обновил
  • Vladimir Kladov © (18.10.10 18:26) [161]
    Раньше - это когда? Я проверил тестовый пример на версии 2.94++ - так же как и сейчас. Срабатывает на OnSelChange, если выбираю другой элемент из списка, а на OnChange - только при редактировании.
  • Dufa © (18.10.10 20:22) [162]
    2.88 например
  • Vladimir Kladov © (18.10.10 22:20) [163]
    Понял: надо было тестировать только с событием OnChange.
    Версия 3.00.P на сайте. Осталась еще половина латинского алфавита.
  • Jon © (19.10.10 23:33) [164]
    Bug with Actions:


    program Actions;

    uses
     KOL, KOLadd;

    var
     ActionList: PActionList;
     Action: PAction;
     Button: PControl;

    procedure DoAction(Dummy: Pointer; Sender: PObj);
    begin
     ShowMessage('Test');
    end;

    begin
     Applet := NewForm(nil, 'Test');
     ActionList := NewActionList(Applet);
     Action := ActionList.Add('ActionCaption', 'ActionHint', TonEvent(MakeMethod(nil, @DoAction)));
     Button := NewButton(Applet, 'Button');
     Action.LinkControl(Button);
     Run(Applet);
    end.



    After using LinkControl the button has no caption.
    Using latest KOLadd.pas but version shows 2.82
  • Vladimir Kladov © (20.10.10 05:36) [165]
    KOLadd.pas line 2712
    if i <> 0 then

    replace with
    if i > 0 then



    Or add #9 as a last char for ActionCaption.
  • Jon © (21.10.10 02:05) [166]
    Thanks - that worked.

    Another bug - property RightClick does not work:


    program Test;

    uses KOL;

    var Toolbar: PControl;

    procedure Click(Dummy: Pointer; Sender: PControl);
    begin
     if Sender.RightClick then Applet.Caption := '>>>' else Applet.Caption := '<<<';
    end;

    begin
     Applet := NewForm(nil, '').SetSize(200, 100);
     Toolbar := NewToolbar(Applet, caTop, [], 0, ['X'], []);
     Toolbar.OnTBClick := TOnEvent(MakeMethod(nil, @Click));
     Run(Applet);
    end.



    The code works fine with KOL 2.94
  • Vladimir Kladov © (21.10.10 06:46) [167]
    kol_asm.inc line 4299, replace
    MOV CL, G6_RightClick


    onto
    MOV CL, 1 shl G6_RightClick



    Later I'll update version on the site.
  • SPeller © (21.10.10 08:57) [168]
    Хм, тройка нормально завелась под Д2010, с минимумом правок :) Посмотрим, может и пригодится ) Только варианты цопако с сисутилс тянет вместе с ActiveX юнитом...
  • SPeller © (21.10.10 09:09) [169]
    И FakeVariants помог :) Надо же, помнится, вроде 2009-я брыкалась и тянула именно системный юнит вместо фейка.
  • SPeller © (22.10.10 01:39) [170]
    Кстати, нужно заводить еще один тип: KOLWideString, помимо KOLString. Чтобы под Д2009 и выше он (как и KOLString) соответствовал родному дельфийскому типу UnicodeString. Это приведет к снижению количества неявных преобразований строк из одного вида в другой, и в результате - уменьшению бинарного кода и увеличению быстродействия. KOLWideString подразумевается что будет двухбайтовым всегда (под Д < 2009 он будет WideString), и использовать его в функциях/объектах с префиксом W.
  • Vladimir Kladov © (22.10.10 04:29) [171]
    Непонятно, в чем прикол с KOLWideString - есть же WideString, для случая, когда всегда нужен WideString?
  • RusSun © (22.10.10 04:42) [172]
    toVladimir Kladov  
    Jon ©   (21.10.10 00:40) [12]
    написал в DemoMDI kol(без мск) [Delphi, Windows]
  • SPeller © (22.10.10 04:48) [173]
    В том, что это не нативный дельфийский тип. При работе в своем коде я (да и все) всегда используют string, который в 2009 и выше является UnicodeString (в прежних версиях string был равен AnsiString). В результате при работе с функциями и объектами KOL происходят постоянные преобразования UnicodeString->WideString и обратно. Да и есть системные функции, используемые в самом KOL, которые принимают UnicodeString, а при подсовывании им WideString происходит ненужное преобразование. В контролах точно так же - они сначала внутри себя внешние данные из UnicodeString преобразуют в WideString, а потом в PWideChar при обращении к API функциям, и обратно через те же преобразования, только наоборот. А с UnicodeString мы выкинем ненужное преобразование UnicodeString->WideString, и строки будут сразу из UnicodeString приводиться к PWideChar (строка UnicodeString состоит из WideChar-ов) при работе с API и вообще не будем делать никаких преобразований при работе с функциями-объектами.

    WideString - это BSTR из ole32 по моему. А UnicodeString - это тот же AnsiString, с тем же функционалом и той же обработкой, только двухбайтовый.
  • SPeller © (22.10.10 04:56) [174]
    А заводить KOLWideString нужно для того, чтобы условной компиляцией приравнивать его либо к WideString либо к UnicodeString в зависимости от версии Дельфи. С 2009-й версии, когда появился UnicodeString, потребность в WideString для работы с юникодом внутри программы полностью отпала и стала даже вредна из-за постоянных преобразований строк туда-сюда. Перекодировки при этом нет, но всё равно это лишние операции и безосновательная потеря производительности.
  • L`Autour (22.10.10 11:24) [175]
    SPeller
    PWideChar - просто указатель на строку с 0 на конце
    WideString - указатель на строку + перед самой строкой хранится ее длина.

    А как строка UnicodeString представлена в памяти? (Кроме отзывов про него найти пока ничего не могу).
  • Vladimir Kladov © (22.10.10 18:30) [176]
    Т.е. Вы предлагаете заменить именно WideString на KOLWideString в KOL.pas ? Это можно. А разве для KOLString не нужно в D20xx переопределить его тоже как UnicodeString ?
  • Jon © (23.10.10 03:27) [177]
    Another bug found:


    program Test;

    uses KOL;

    var Toolbar: PControl;

    procedure Click(Dummy: Pointer; Sender: PControl);
    begin
     if Sender = Toolbar then
       Applet.Caption := 'Toolbar'
     else
       Applet.Caption := 'Error';
    end;

    begin
     Applet := NewForm(nil, '').SetSize(200, 100);
     Toolbar := NewToolbar(Applet, caTop, [], 0, ['X'], []);
     Toolbar.OnTBClick := TOnEvent(MakeMethod(nil, @Click));
     Run(Applet);
    end.



    Right click the button and toolbar empty space.
    With PAS_VERSION result is always sender=toolbar
    But with ASM_VERSION, left click button is ok, but right click button and left/right click space is error.
  • Jon © (23.10.10 04:17) [178]
    A drawing issue:


    program Test;

    uses Windows, KOL;

    procedure TBClick(Dummy: Pointer; Sender: PControl);
    begin
     case Sender.CurIndex of
       0: Applet.RemoveStatus;
       1: Applet.SimpleStatusText := 'Status';
     end;
    end;

    var
     Panel: PControl;
    begin
     Applet := NewForm(nil, '').SetSize(200, 100);
     Applet.SimpleStatusText := 'Status';
     Panel := NewPanel(Applet, esNone).SetSize(200, 24).SetAlign(caTop);
     with NewToolbar(Panel, caTop, [], 0, ['remove', 'restore'], [])^ do
       OnTBClick := TOnEvent(MakeMethod(nil, @TBClick));
     NewMDIClient(Applet, 0).SetAlign(caClient);
     Run(Applet);
    end.



    Clicking the toolbar buttons causes the top of the MDI area to be (re)drawn incorrectly.
    Works fine with KOL v2.94
  • Vladimir Kladov © (23.10.10 13:36) [179]
    KOL.zip v 3.00.R is uploaded.
 
Конференция "KOL" » KOL v 3.00 [Delphi, Windows]
Есть новые Нет новых   [134431   +9][b:0.001][p:0.002]