-
Новости от 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
-
Error in KOL_ASM.inc - it breaks Tabulate when the SHIFT key is down (reverse order).
-
Add the following lines in bold to KOL_ASM.inc:
function Tabulate2Control( Self_: PControl; Key: DWORD; checkOnly: Boolean ): Boolean;
...
PUSH VK_SHIFT CALL GetKeyState
CWDE
XCHG EDX, EAX
POP EDX
....
-
Sorry - my fix was incorrect. This is the correct one:
JNZ @@test_flag
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?
-
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.
-
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.
-
OK now I see that GetKeyState returns short int. And now see your CWDE instruction. Fixed version will be in the evening.
-
а можно еще сделать чтобы возможность чеканутости кнопок тулбара определялась в мск отдельным свойством а не самой чеканутостью иначе приходица их чекать в дизайне а потом расчекивать при запуске програмы надеюсь понятно объяснил...
-
> 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.
-
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 это было решено, надо было передать префикс, не помню какой. Гляну сегодня.
-
2QAZ: начал смотреть и "вспомнил": давно уже есть, надо только выставить radioGroup <> 0. Главное ведь что, и в прошлый раз так "вспомнил", и использовал, и опять забыл. Сейчас добавлю свойство Checkable с выдачей подсказки. Чтобы уже не забыть.
-
3.11 is on the site.
-
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.
-
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.
-
> давно уже есть, надо только выставить radioGroup <> 0.
это получаеца група зависимых переключателей а если нужно все кнопки с независимым чек\расчеком тогда несрост полный
-
Каждой отдельную радиогруппу и все.
А про выравнивание по вертикали никто что-то не пожаловался. Я первый заметил. Сегодня выложу поправочку.
-
Извините, я не совсем понял, у меня мозги кипят или реально ошибка. Пытаюсь сделать в программе 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" в формуле выше, получается, ненужно?
-
По-моему, там у меня маскирования индекса не хватает. Сейчас посмотрю получше.
-
Точно, оно самое. Выложил обновление. Код 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+ на сайте. Сейчас описание изменений поправлю.
-
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.Parent.DragStart;
end;
begin
Applet := NewForm(Applet,'');
with NewLabel(Applet,'Drag then double click')^ do
begin
SetAlign(caClient);
TextAlign := taCenter; VerticalAlign := vaTop; 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.
|