Конференция "KOL" » Версия 3.10 [Delphi]
 
  • Vladimir Kladov © (13.02.11 19:32) [0]
    Новости от 13 феврала 2011 (KOL & MCK v3.10)

    [+]  MCK: добавлено свойство TKOLForm.AssignTextToControls (если установить в False, то свойства Caption, Text, и другие, текстовое значение которое присваивается в коде, сгенерированном MCK, не присваивается или присваивается пустая строка - может использоваться для экономии кода в случае, когда этот текст все равно устанавливается своим кодом, например, с целью локализации на конкретный язык, с помощью собственного локализатора). Для TKOLCombobox и TKOLListBox добавлены свойства AlwaysAssignItems, значение которого true позволяет игнорировать эту установку для всей формы - в отношении элементов списка.  VK

    [-]  MCK: множество исправлений для FormCompact.  VK

    [*]  TControl.Tabulate (asm версия) изменен.  VK
  • Jon © (14.02.11 02:19) [1]
    Error in KOL_ASM.inc - it breaks Tabulate when the SHIFT key is down (reverse order).
  • Jon © (14.02.11 02:29) [2]
    Add the following lines in bold to KOL_ASM.inc:


    function Tabulate2Control( Self_: PControl; Key: DWORD; checkOnly: Boolean ): Boolean;
    ...
           PUSH     VK_SHIFT    // LINE 8641
           CALL     GetKeyState
           CWDE
           XCHG EDX, EAX
           POP      EDX
    ....

  • Jon © (14.02.11 02:51) [3]
    Sorry - my fix was incorrect. This is the correct one:


           JNZ      @@test_flag    // LINE 8638

           PUSH     ECX
           PUSH     EAX
           PUSH     VK_SHIFT
           CALL     GetKeyState
           CWDE
           XCHG EDX, EAX
           POP      EAX
           POP      ECX

           TEST     EAX, EAX



    I don't know assembler so it may not be right - but it works.
    Can anyone provide some useful documents for learning asm?
  • Vladimir Kladov © (14.02.11 04:37) [4]
    This was a very big problem on my computer due a hardware trouble with 255 key code. I remembered why there was -1 in a list of keys in asm version, but I just had to fix this for a moment. I suppose that there are no many people now use SHIFT+TAB, thank you that you catch this. I'll think how to solve the problem to the next update.
  • Vladimir Kladov © (14.02.11 05:43) [5]
    One thing. It may be very strange, but in my case anyway only GetAsyncKeyState works now. In step-by-step debugger, GetKeyState works too. Strange.

    And certainly, MOV EDX, ECX before calling Tabulate2Next is forgotten.
  • Vladimir Kladov © (14.02.11 08:43) [6]
    OK now I see that GetKeyState returns short int. And now see your CWDE instruction. Fixed version will be in the evening.
  • QAZ (14.02.11 12:49) [7]
    а можно еще сделать чтобы возможность чеканутости кнопок тулбара определялась в мск отдельным свойством а не самой чеканутостью
    иначе приходица их чекать в дизайне а потом расчекивать при запуске програмы
    надеюсь понятно объяснил...
  • Jon © (14.02.11 13:14) [8]

    > This was a very big problem on my computer due a hardware trouble with 255 key code.


    Ah, the problem that you reported here:  WM_KEYUP 255 (http://pda.delphimaster.net/?id=1284277474&n=10)

    I recently saw a similar problem. The computer had a rootkit. Maybe you do too. I found and fixed it with RootRepeal (http://rootrepeal.googlepages.com/).


    > I suppose that there are no many people now use SHIFT+TAB


    Really? I use the keyboard all of the time so the SHIFT+TAB issue was a big one for me.

    I would love to see KOL natively handle CTRL+TAB for TabControl, it would save using the keyboard hook workaround.
  • Vladimir Kladov © (14.02.11 15:39) [9]
    Last time I repaired it just reinstalling all the drivers. So I think this is not a rootkit. Hm, this rootrepeal seems not working on Wn 7: DeviceIO Error.

    I use the keyboard all of the time but me and many people I saw use mouse more often then keyboard (to switch between controls). And they are right, in some cases it seems the only method to switch between controls (e.g. in Delphi Run|Parameters it is very hard to select a combobox with parameters and clear it with a keyboard only). If there are a lot of controls it could be faster to get a mouse and click a certain one then to press the Tab key and wait until it becomes focused.

    I always try to simplify using the keyboard in my programs (if I publish it or use it often), but other developers seems not do that so. So controls have strange TabOrder and switching via keyboard becomes hard.

    2QAZ ДА, это можно, наверное. Самому хотелось. В принципе, на уровне KOL это было решено, надо было передать префикс, не помню какой. Гляну сегодня.
  • Vladimir Kladov © (14.02.11 16:41) [10]
    2QAZ: начал смотреть и "вспомнил": давно уже есть, надо только выставить radioGroup <> 0. Главное ведь что, и в прошлый раз так "вспомнил", и использовал, и опять забыл. Сейчас добавлю свойство Checkable с выдачей подсказки. Чтобы уже не забыть.
  • Vladimir Kladov © (14.02.11 17:11) [11]
    3.11 is on the site.
  • Jon © (14.02.11 21:21) [12]
    I compared MCK 3.10 with MCK 3.11 - the zip contents are identical except for mirror.pas line 22 (VERSION 3.1x). Did you omit the changes or a changed file?

    Hm, this rootrepeal seems not working on Win 7: DeviceIO Error.


    32bit or 64bit? There is a beta that I can send to you.
  • Vladimir Kladov © (15.02.11 04:41) [13]
    This is so because I changed mckCtrls.pas but forget to pack it. Now I reuploaded mck.zip. Anyway it does not contain anything serious except a joking message in response to attemt to change new property Checkable for toolbar button.

    x86. I have no any reason to use 64 bit Windows now and in near future several years.
  • QAZ (15.02.11 11:24) [14]

    > давно уже есть, надо только выставить radioGroup <> 0.

    это получаеца група зависимых переключателей
    а если нужно все кнопки с независимым чек\расчеком тогда несрост полный
  • Vladimir Kladov © (15.02.11 17:37) [15]
    Каждой отдельную радиогруппу и все.

    А про выравнивание по вертикали никто что-то не пожаловался. Я первый заметил. Сегодня выложу поправочку.
  • Awkward © (15.02.11 17:50) [16]
    Извините, я не совсем понял, у меня мозги кипят или реально ошибка.
    Пытаюсь сделать в программе ResetEvent(idx_fOnClick) = всё ок
    но как только совершаю клик после этого - вылетает с ошибкой.
    смотрю код:

    procedure TControl.ResetEvent(idx: Integer);
    begin TMethod( EV.MethodEvents[idx] ).Code := DummyProcTable[ InitEventsTable[ idx ] ];
         TMethod( EV.MethodEvents[idx] ).Data := nil;
    end;



    InitEventsTable дает (idummy123   + idummy123_0 shl 4) = (0+ 2 shl 4) = 16(!)
    но DummyProcTable: array[ 0..11 ] of Pointer (!!!)

    т.е. получается, что происходит выход за границы таблицы.
    т.е. "shl 4" в формуле выше, получается, ненужно?
  • Vladimir Kladov © (15.02.11 18:54) [17]
    По-моему, там у меня маскирования индекса не хватает. Сейчас посмотрю получше.
  • Vladimir Kladov © (15.02.11 19:05) [18]
    Точно, оно самое. Выложил обновление.

    Код ResetEvent проверял, но до того, как "придумал" в том же байте индекса в InitEventsTable хранить индекс для второй группы внутренних обработчиков. Сейчас добавил маску, проверил, работает.

    Правильный код:
    procedure TControl.ResetEvent(idx: Integer);
    begin TMethod( EV.MethodEvents[idx] ).Code := DummyProcTable[ InitEventsTable[ idx ] and $F ];
         TMethod( EV.MethodEvents[idx] ).Data := nil;



    (подчеркнутое добавлено)

    Версия 3.12+ на сайте. Сейчас описание изменений поправлю.
  • Jon © (16.02.11 05:10) [19]
    With KOL v3.12+ there is an error using both TextAlign and VerticalAlign together:


    program Test;

    uses KOL;

    procedure MouseDoubleClick(Dummy: Pointer; Sender: PControl; var Mouse: TMouseEventData);
    begin
     ShowMessage('OK!');
    end;

    procedure MouseDownDrag(Dummy: Pointer; Sender: PControl; var Mouse: TMouseEventData);
    begin
     Sender.{Form}Parent{Form}.DragStart;
    end;

    begin
     Applet := NewForm(Applet,'');
     with NewLabel(Applet,'Drag then double click')^ do
     begin
       SetAlign(caClient);
       TextAlign := taCenter;   // <-- ERROR!
       VerticalAlign := vaTop;  // <-- ERROR!
       Color := clRed;
       OnMouseDown := TOnMouse(MakeMethod(nil,@MouseDownDrag));
       OnMouseDblClk := TOnMouse(MakeMethod(nil,@MouseDoubleClick));
     end;
     Run(Applet);
    end.



    The events are never triggered. Comment one or both error lines and it works.
 
Конференция "KOL" » Версия 3.10 [Delphi]
Есть новые Нет новых   [134430   +3][b:0][p:0.002]