-
> OnChange - это для реакции на редактирование edit-части, > когда она доступна для редактирования.
Вот раньше она и так и так работала.. но в принципе не критично. свн обновил
-
Раньше - это когда? Я проверил тестовый пример на версии 2.94++ - так же как и сейчас. Срабатывает на OnSelChange, если выбираю другой элемент из списка, а на OnChange - только при редактировании.
-
2.88 например
-
Понял: надо было тестировать только с событием OnChange. Версия 3.00.P на сайте. Осталась еще половина латинского алфавита.
-
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
-
KOLadd.pas line 2712 if i <> 0 then replace with if i > 0 then Or add #9 as a last char for ActionCaption.
-
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
-
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.
-
Хм, тройка нормально завелась под Д2010, с минимумом правок :) Посмотрим, может и пригодится ) Только варианты цопако с сисутилс тянет вместе с ActiveX юнитом...
-
И FakeVariants помог :) Надо же, помнится, вроде 2009-я брыкалась и тянула именно системный юнит вместо фейка.
-
Кстати, нужно заводить еще один тип: KOLWideString, помимо KOLString. Чтобы под Д2009 и выше он (как и KOLString) соответствовал родному дельфийскому типу UnicodeString. Это приведет к снижению количества неявных преобразований строк из одного вида в другой, и в результате - уменьшению бинарного кода и увеличению быстродействия. KOLWideString подразумевается что будет двухбайтовым всегда (под Д < 2009 он будет WideString), и использовать его в функциях/объектах с префиксом W.
-
Непонятно, в чем прикол с KOLWideString - есть же WideString, для случая, когда всегда нужен WideString?
-
toVladimir Kladov Jon © (21.10.10 00:40) [12] написал в DemoMDI kol(без мск) [Delphi, Windows]
-
В том, что это не нативный дельфийский тип. При работе в своем коде я (да и все) всегда используют 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, с тем же функционалом и той же обработкой, только двухбайтовый.
-
А заводить KOLWideString нужно для того, чтобы условной компиляцией приравнивать его либо к WideString либо к UnicodeString в зависимости от версии Дельфи. С 2009-й версии, когда появился UnicodeString, потребность в WideString для работы с юникодом внутри программы полностью отпала и стала даже вредна из-за постоянных преобразований строк туда-сюда. Перекодировки при этом нет, но всё равно это лишние операции и безосновательная потеря производительности.
-
SPeller PWideChar - просто указатель на строку с 0 на конце WideString - указатель на строку + перед самой строкой хранится ее длина.
А как строка UnicodeString представлена в памяти? (Кроме отзывов про него найти пока ничего не могу).
-
Т.е. Вы предлагаете заменить именно WideString на KOLWideString в KOL.pas ? Это можно. А разве для KOLString не нужно в D20xx переопределить его тоже как UnicodeString ?
-
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.
-
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
-
KOL.zip v 3.00.R is uploaded.
|