-
Новости от 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.
-
KOL_asm.inc, line 8909: AND DH, $F3 instead of AND DH, CL
I'll upload the fix soon.
-
Не понятен случай в следующем коде:
var
Panel:TKOLPanel;
ComboBox:TKOLComboBox;
begin
Panel:=NewPanel(Page,esSolid).SetAlign(caTop).SetBorder(0).SetSize(0,28);
ComboBox:=NewComboBox(Panel,[coNoIntegralHeight,coOwnerDrawFixed]).SetAlign(caLe ft);
end
...
Если ракоментировать хоть одну строку, то ComboBox не отображается, хотя код аналогичен формируемому *.inc-файлу MCK-компонентом. Delphi 7, XP SP3, как в PAS, так и ASM-версиях.
-
Извиняюсь, разобрался. Только не совсем понятен момент, почему после минимизации формы и востановления под компонентом ComboBox остается какой-то глюк прорисовки?
-
Глюк остается из-за свойства
Align:=caLeft
Видно он перерисовывается и уменьшается. Можно ли это пофиксить?
-
Нет. Комбобокс нельзя выравнивать влево, вправо и по клиенту. Положите его на отдельную панель с выравниванием caTop, панель выравнивайте как требуется.
Надо будет хотя бы в MCK предупреждения добавить.
-
Problem with StrRepeat when UNICODE_CTRLS is defined:
program Test;
uses KOL;
begin
Applet := NewForm(nil, '');
NewLabel(Applet,StrRepeat('.',20));
Run(Applet);
end.
I suggest this change to KOL.PAS:
function StrRepeat( const S: KOLString; Count: Integer ): KOLString;
var I, L: Integer;
begin
L := Length( S );
SetLength( Result, L * Count );
for I := 0 to Count-1 do
Move( S[ 1 ], Result[ 1 + I * L ], L * Sizeof( KOLChar ) );
end;
-
3.14 is on the site. I also added an asm version for this function (and for WStrRepeat). Even for UNICODE_CTRLS, there is a partial asm version there (for the most inner loop which is implemented with a single assembler instruction).
-
незнаю как здесь, но в версии какой пользуюсь метод Close зачемто сделан через Postmessage !!!
procedure TControl.Close;
begin
PostMessage( Handle, WM_CLOSE, 0, 0 );
end;
что может стать причиной вылетов изза уже отсуттвующих объектов например если так:
procedure TForm1.KOLForm1Close(Sender: PObj; var Accept: Boolean);
begin
Accept:=good;
Form4.Form.Close;
..................
end;
Form4 закроеца только после уничтожения Form1 и всего что в очереди а там и всевозможные глюки при доступе из Form4.Close к уже освобожденым в Form1.Close ресурсах например вобщем надо на sendmessage заменить :)
-
..................
Освобождать всяко-разно надо в OnDestroy, а не в OnClose. В OnClose имеет смысел инициировать остановку потоков, выполнить какие-то предварительные действия. Вообще, основное назначение - ответить на Accept. А вот если сейчас сделать как вы предлагаете, а не так, как спокон веков было, то тут же полезут странности в уже разработанных приложениях, если их пересобрать. Например, могут возникнуть дедлоки с потоками, которые в момент завершения будут пытаться выполнить что-нибудь через Synchronize.
-
> Освобождать всяко-разно надо в OnDestroy, а не в OnClose. > В OnClose имеет смысел инициировать остановку потоков, > выполнить какие-то предварительные действия. Вообще, основное > назначение - ответить на Accept.
так я так и делаю, нетак выразился просто ,но факт в том что очередь до form4 доходит только после close и Destroy главной формы те в любом случае я дочернии формы должен сначала закрыть вручную хотя по нормальному сам кол при закрытии главной формы должен сначала автоматом закрывать все дочерние формы незнай у кого как,но уменя слово "close" ассоциируеца с НЕМЕДЛЕННЫМ закрытием иначе название должно быть типа "closequery"
-
Perform( WM_CLOSE сами можете сделать. Дочерних форм не бывает, это условность. Если бы формы действительно были дочерними, обработчик Windows по умолчанию первый разослал бы WM_CLOSE всем дочерним. Мало ли какие у кого ассоциации: в Windows WM_CLOSE выполняет роль запроса к коду, можно ли сейчас закрыть окно, см. MSDN:: An application can prompt the user for confirmation, prior to destroying a window, by processing the WM_CLOSE message and calling the DestroyWindow function only if the user confirms the choice.
By default, the DefWindowProc function calls the DestroyWindow function to destroy the window.
Реально закрывает форму WM_DESTROY, от него уже нельзя отказаться.
-
Как раз насчет OnDestroy и хочу написать.. он перестал работать собсно.. Делаю пустой проект, назнчаю обработчику следующий код:
procedure TForm1.KOLFormDestroy(Sender: PObj);
begin
MsgOK('KOLFormDestroy');
end;
при закрытии мессаджа нету
-
Посмотрел в хистори... в версии 3.0.Y в процедуре TerminateExecution в конце был App.RefDec; потом он закомментился зачем то.. если раскомментить - работает
-
to Vladimir Kladov это понятно что понятия понятиями,но темнеменее PostMessage это негодица однозначно то что возможны косяки в старых прогах, так это скорей врятли,потому что те кто использовал вызовы типа Form.Close всетаки были уверены что им надо ее закрыть\запросить закрытие именно сейчас,а не когда очередь дойдет и нужные объекты уже освобождены каждый апгрейд самого кола несет в себе столько исправлений в софте, что Form.Close просто ничто по сравнению с этим
т.е. я не спорю для чего нужно close или Destroy и что когда и для чего вызывать я против конкретно PostMessage ибо здесь она источник неуловимых косяков, и должна использоваца в особых специфических случаях
-
Действительно, не работает. Закомментарил - помню, что было лишним. Теперь так уже не кажется. RefInc же вначале есть, должен быть и RefDec. Free тот же RefDec, меня видимо смутило, что их два подряд. Сейчас буду исправлять "как было".
Да, это самый правильный вариант. Если дестроить объект, связанный с окном, в WM_NCDESTROY, бяка получается. Объектам надо дать пожить, пока не грохнется вся форма, как минимум.
-
Все, обновление уже на сайте, я пока новости заполняю.
-
Если что, на сайте 3.14159. Заметил ошибку с асм-версией в тулбаре - вместо тултипов грязь отображалась, поправил.
-
next version will be: 3.141592 and then, of course: 3.1415926 3.14159265 3.141592653 3.1415926535 3.14159265358 3.141592653589 3.1415926535897 3.14159265358979 3.141592653589793
Good system!, we will never run out of numbers ;-)
-
Версия 3.141592 на сайте :) (компилируемость с Delphi2, Delphi3 поправлена, до кучи соптимизирована асм-версия WndProcTreeView и еще чего-то не помню чего.
-
Версия 3.1415926 на сайте ;) Исправил работу с датой и временем, переделал на работу через функции API (но они работают с 1601 года), на случай необходимости использовать собственный прежний код KOL для правильного представления более ранних дат, введен символ условной компиляции DATE0_0001. Так же, поправлен FormCompact для фреймов, на больших проектах MCK с формами из большого числа контролов вполне прилично откусывает (особенно, если форм несколько). Еще всякие мелкие поправки. Для любителей: компилируемость с Delphi2, Delphi3. Если используете в UNICODE-проектах toolbar и treeview, проверьте, пожалуйста, работу асм-версий. Если что, сообщайте. Я пока что выложил Column Commander 0.4b с полнофункциональным поиском, но даже еще не протестировал все комбинации параметров (их много).
-
Версия конечно зачёт :D Есть два пожелания: 1) В функции Str2Extended заменить:
'.': if not Pt then Pt := TRUE else break;
на
'.', ',': if not Pt then Pt := TRUE else break;
Чтобы работало вот такое:
MsgOK(Extended2Str(KOL.Str2Extended('0.1')));
MsgOK(Extended2Str(KOL.Str2Extended('0,1')));
2) Чтобы не падало вот такое: StrSatisfy('stoka', ''); Добавить проверку на пустую маску
-
Хорошо, KOL 3.14159265, MCK не менялся. У меня работает, не сломалось :). Когда версию зафиксирую, буду ссылаться как на версию "пи" (стабильно).
-
У меня на сайте лежит старый достаточно уже Zoomer, он сделан с Grush (режим dual). Можете его запстить - упадет или нет, на той же машине? Просто интересно. Вдруг дело все-таки в версии KOL, и тогда что-то было устойчивее.
-
А где можно найти файл с утилтиами KOLUtils06.pas ?
-
-
Кстати.... скачал последнюю версию KOL. Delphi 7 компилирует "на ура" Delphi 5 выдает ошибку kol.pas(26878) Fatal: Internal error: C1093
Может, тут и не сама библиотека виновата..... но все же. Что это может быть? версия от 20го февраля компилировалась нормально.
-
дополню: если определить {$DEFINE DATE0_0001} компиляция в пятой дельфи проходит нормально
-
-
Я пока выложил именно такое исправление: для Delphi5 и раньше по умолчанию старый код с DATE0_0001, с Delphi6 и выше по умолчанию новый. Неправильно TRUNC работает в D5. С теми же входными значениями выдает другие выходные. Internal error у него на преобразование в INT64. В общем, новый код намного короче, но, увы, не для старых Delphi.
Заодно в версии на сайте исправлен ParamCount (асм-версия).
-
спасибо за пояснение, просто
{$IFDEF _D2orD3} {$DEFINE DATE0_0001} {$ENDIF _D2orD3}
про дельфи версий 4 и 5 - ни слова
-
Что-то не та версия. Я только что выложил 3.14159265358, до этого выкладывал без 8. Там было {$IFNDEF _D6orHigher}. Сейчас я сделал, что для D5 тоже работает, чуть-чуть больше кода требуется, байт на 80. Не умеет сразу получить int64 из числа удвоенной точности. Пришлось лишние операции делать. Так что сейчас в том месте {$IFnDEF _D5orHigher}
-
KOL.pas has exceeded 2MB - I remember that there were some issues with the file size of .pas files, should we be concerned?
-
Problem is only in setting breakpoints after 65535th line but this is a problem for Delphi 5 and earlier. May be D6 too, but there are no problems in D7. In D5, if do not stop after that line it works ok.
Next time I'll move some new asm code to kol_asm to make smaller lines in pascal part.
-
Вот такая штука тут всплыла.. Если использовать Extended2Str (а так же несколько других функций в PAS версиях) то к коду добавляется мусор из за
Assert( Result[ 1 ] = '0', 'error!' );
Предлагаю все ассерты экранировать {$IFDEF DEBUG} ... {$ENDIF}
-
Номера версий конечно оригинальные ))))
-
Этот Assert вообще закомментарю. Не помню, зачем я его оставил. Может, просто забыл. Но вообще, все ассерты убираются одним крыжиком в опциях проекта. Они как бы для этого и пишутся, чтобы их можно было этим крыжиком включать или выключать. Это уже как бы {$IFDEF}.
-
На сайте KOL 3.141592653589. В принципе, ничего особенного не менял, только вынес ассемблерные части в KOL_asm.inc и KOL_ASM_NOUNICODE.inc (новый), чтобы опять втиснуться в прокрустовы 65535 строк. Очень не хотелось плодить еще один inc-файл, так как усложняется поиск различий методом льва в коробке, теперь надо синхронные правки делать уже в 3х файлах, но видимо уже ничего не поделаешь). Теперь есть резерв в 4000 строк.
С ассертами я все-таки сделал как Dufa предложил. Оно обычно ни на что по-сути не влияет, а кому-то может понадобится такая штука, чтобы в KOL все assert'ы выключить, а прочие оставить. Сразу не подумал о такой возможности, извиняюсь.
Ждем еще неделю, и фиксируем Пи-версию.
-
Ассерты нормально теперь, а про галочку кстати совсем забыл.. В Str2Extended потеряли: '.', ',': if not Pt then Pt := TRUE else break; Локальная асм версия DateTime2SystemTime приводит к падению.. не разбирался почему. ПАС версия работает. И напомните какие функции относятся к ASM_NOUNICODE или наоборот к ASM_UNICODE
-
Исправил, 7 на конце.
Всегда не-UNICODE. Ассемблеря я для UNICODE делал для очень небольшого числа функций, в них используется просто {$IFDEF ASM_VERSION}. Если {$IFDEF ASM_UNICODE}, это значит, что асм отключится для UNICODE_CTRLS для этой функции. Вообще, в начале файла написано kol_asm_nounicode.inc
-
Вот теперь нормалек. С nounicode вроде разобрался, от наличия многих инк начинаешь запутываться уже..
Еще такое предложение: в DefFont изменить Name: 'Tahoma' (для уникода уже он стоит UNICODE_CTRLS); и Height: -11; Вроде дефолтный шрифт и дефолтный размер..
-
Говорили уже. Дефолтный шрифт - это тот, который по умолчанию дает Windows окну, если ему не назначать шрифт вообще. Вообще-то, это шрифт System.
В TKOLProject можно поставить сейчас любой шрифт по умолчанию. Так в чем неприятность от того, что умолчание совпадает с тем, что дает окну система?
-
версия кола 3.1415926535897 При установке:
[DCC Error] mirror.pas(13076): E2010 Incompatible types: 'Char' and 'AnsiChar' [DCC Fatal Error] mckActionListEditor.pas(67): F2063 Could not compile used unit 'mirror' [Pascal Warning] mirror.pas(5295): W1057 Implicit string cast from 'ShortString' to 'string' [Pascal Warning] mirror.pas(5301): W1057 Implicit string cast from 'ShortString' to 'string' [Pascal Warning] mirror.pas(10819): W1057 Implicit string cast from 'ShortString' to 'string' [Pascal Warning] mirror.pas(10825): W1057 Implicit string cast from 'ShortString' to 'string' [Pascal Error] mirror.pas(13076): E2010 Incompatible types: 'Char' and 'AnsiChar' [Pascal Warning] mirror.pas(13078): W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit. [Pascal Warning] mirror.pas(13080): W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit. [Pascal Hint] mirror.pas(184): H2219 Private symbol 'FCallingOnAdd' declared but never used [Pascal Hint] mirror.pas(766): H2219 Private symbol 'FGetShowHint' declared but never used [Pascal Hint] mirror.pas(770): H2219 Private symbol 'FFormCompact' declared but never used [Pascal Hint] mirror.pas(1601): H2219 Private symbol 'AllItemsAreOwnerDraw' declared but never used [Pascal Hint] mirror.pas(2864): H2219 Private symbol 'FLinked' declared but never used [Pascal Hint] mirror.pas(2885): H2219 Private symbol 'ResolveLinks' declared but never used [Pascal Hint] mirror.pas(2886): H2219 Private symbol 'FindComponentByPath' declared but never used [Pascal Hint] mirror.pas(2887): H2219 Private symbol 'GetComponentFullPath' declared but never used [Pascal Hint] mirror.pas(2888): H2219 Private symbol 'UpdateLinkedComponent' declared but never used [Pascal Hint] mirror.pas(2889): H2219 Private symbol 'UpdateLinkedComponents' declared but never used [Pascal Fatal Error] mirror.pas(1): F2092 Program or unit 'mirror' recursively uses itself [Pascal Fatal Error] mirror.pas(1): F2092 Program or unit 'mirror' recursively uses itself
-
забыл сказать что это в Д2009
-
Обновил mck.zip.
-
Не знаю где спросить авторов сторонних компонент
Существуют ли компоненты KOLBlockCiphers и kolhash для Д2009? Пишет "попытка обращения к неверному адресу", первой строчкой правильный путь на папку с bpl
Ну, и другие компоненты.
-
помогите пожалуйста. кол вроде бы подключается, но проект компилируется размером полтора мегабайта. http://dy.cdrrhq.ru/90.rarKOLBlockCiphers установил, а для хешей не могу найти модули
-
извиняюсь, нашёл причину - отладка включилась (не сохранилось её отключение). Остался последний вопрос - о необходимых компонентах.
-
-
спасибо
-
В конце агуста прошлого года закончил проект с использованиеем KolEcmKistEdit с Kol v2.9*. D5, WinXP В начале марта вернулся к этому проекту для его модернизации (Kol версия от 26 февраля.) Трансляция прежнего проекта не прошла. Ошибка: Incompatible types: TMsg и tagMsg в командах AttachProc(WndProcxxx) если эти команды закоментировать теряется вся обработка в KolEcmKistEdit Подскажите, где искать ошибки?
-
function Proc( Sender: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
begin
Result := FALSE;
end;
procedure TForm1.Button1Click(Sender: PObj);
begin
Button2.AttachProc( Proc );
end;
Компилируется и работает. Покажите участок кода, который не компилируется.
-
Да, вот еще что. Проверьте, что в uses у Вас KOL идет ПОСЛЕ Windows, а не ДО.
-
Вин7, Делфи 2009, KOL 3.1415926535897 (с МСК) На форму положил мемо. С UNICODE_CTRLS заголовок формы "Fo" и в мемо выводится часть строки. Без опции норм, сейчас потестирую на предмет юникодоглюков. Отображение в юникоде в мемо получится проверить на днях. В дизайне заголовок формы в любом случае отображается нормально.
-
без юникода не катит
-
видимо при преобразовании где-то в библиотечке длина строки меняется не на 2, а на 1 байт
-
форма не берёт шрифт по-умолчанию. Необходимо вручную перещёлкивать FontDefault
-
Так что с [72] ? Никто юникод не использует что ли???
-
> Dy1 (24.03.11 11:08) [76]
Используй PAS_VERSION, либо в asm-версии TControl.SetCaption замени System.@WStrAsg на System.@UStrAsg
-
там не только caption, но и прочие компоненты. MEMO, например
-
> Так что с [72] ? Никто юникод не использует что ли???
Я не использую (не могу использовать) D2009. Могу только компилировать из командной строки в Delphi XE (его я оставил для тестирования). Попробуйте в Delphi5...Delphi7. Насколько мне известно, все MCK (и не MCK) проекты должны иметь опцию UNICODE_CTRLS, собрать ANSI версию там просто невозможно. String перманентно забанен и стал UnicodeString (или что-то в этом роде). Опции обратной совместимости не предусмотрено.
-
в пас версии вроде норм, глубоко не тестировал. В асме что-то не совсем так
-
не действует символ компиляции {$DEFINE DATE0_1601}, {$DEFINE DATE0_0001} выкл.
всегда считает с нулевого года.
Включены: {$DEFINE TLIST_FAST} {$DEFINE NOT_USE_RICHEDIT} {$DEFINE DEBUG} {$DEFINE CRASH_DEBUG} {$DEFINE DEBUG_GDIOBJECTS} {$DEFINE CHK_BITBLT} {$DEFINE DEBUG_OBJKIND} {$DEFINE NO_DEFAULT_BUTTON_BOLD} {$DEFINE TIMER_APPLETWND} {$DEFINE STOPTIMER_AFTER_APPLETTERMINATED} {$DEFINE STOP_WNDPROCTRANSPARENT_AFTER_APPLETTERMINATED} {$DEFINE KEY_PREVIEW} {$DEFINE ESC_CLOSE_DIALOGS} {$DEFINE ALL_BUTTONS_RESPOND_TO_ENTER} {$DEFINE CLICK_DEFAULT_CANCEL_BTN_DIRECTLY} {$DEFINE DEFAULT_CANCEL_BTN_EXCLUSIVE}
-
Оно так и должно считать. 1601 для того, чтобы использовать более короткий код и функции API для превода из DateTime в SystemTime и наоборот, но они работают корректно только с 1 января 1601 года.
-
Вин7, Делфи 2009, KOL 3.1415926535897 с МСК, опции и свойства ансишные.
1) AV на строчке в проекте: Memo1.Text := lst.Text; Если добавлять по строкам, то работает.
2) Не работают методы PStrList-а LoadFromFile и SaveFromFile, вылетов нет.
-
"по строкам" т.е. через Add
-
Какие такие ансишные, в 2009? Там только unicode_ctrls, другое работать не будет.
-
err.pas, строка 552 {$IFDEF UNICODE_CTRLS} WStrCopy {$ELSE} StrCopy {$ENDIF}( Fmt, SException ); не может самостоятельно выбрать функцию, ругается. Пробовал прописывать {$DEFINE UNICODE_CTRLS} в dpr, не помогает. Работает только если указать в самом err.
Чем отличается NewStrList от NewKOLStrList ? Т.е. зачем так было сделано?
-
Вообще, символы компиляции в старых Delphi (до D7) прописывались в свойствах проекта. Думаю, в новых так же, просто интерфейс а-ля Visual C++/C#/... Посмотрите где там символы прописываются.
KOLStrList следует использовать в проекте, если он может компилироваться и с unicode_ctrls и без, и в зависимости от опции работает как StrList или WStrList. StrList бывает нужен в unicode-проекте для работы с ansi-строками, WStrList - в ansi-программе, наоборот с unicode-строками. Если в строках есть #0 как символы, оба они бесполезны.
-
1) там у меня KOL_MCK;EXTERNAL_DEFINES спасибо
-
External_defines.inc вставляются и должны восприниматься в самом KOL.pas, в KOL_add.pas и вроде бы всё. Т.е. UNICODE_CTRLS все-таки надо в свойствах проекта. Есть некоторое количество дополнительных компонент, которые понимают UNICODE_CTRLS, но EXTERNAL_DEFINES только сам KOL и KOLadd.
-
ну так ведь запись в dpr на модули проекта тоже не действует
-
Запись чего-либо ({$DEFINE }) в файл dpr действует только на сам dpr, так же и запись в pas-файл - только на сам этот pas-файл, так всегда было. Исключения касаются общих директив типа {$APPTYPE }, но и не факт, что их надо именно в dpr-файл помещать, это тоже без разницы - можно в любом pas-файле проекта.
-
Vladimir,
Is there a good reason why you disabled field TControl.fCollectUpdRgn in Kol.pas ? It is needed for current KolHiLightEdit. Can you re-enable it? (I did already in my copy) I am using hilightedit in my KolIde project. If I rewrite the code to use only Tcontrol.fUpdRgn it becomes slow.
-
But it was not used actually (2.94++) and occured only in disabled asm-version of WndProcPaint. It is better to remove it from KOLHilightEdit, supposing it is always = 0.
-
Ok.
-
Такой вот момент всплыл...
function TStrList.IndexOfName_NoCase(AName: Ansistring): Integer;
...
...
вот зачем нужна эта строка?
-
If you mean the next line references a fNameDelimiter and this line effectively means you can not use a space or tab as a name delimiter, you are correct. Otherwise this is an optimized - basically standard - way to skip non-printable characters in AsciiZ strings.
-
Зачем нужна такая оптимизация? Это скорее не оптимизация, а фишка для пропуска пробелов и не печатных символов.. Но я не считаю, что она нужна. ПЛЮС в IndexOfName - этой фишки уже нету!
-
не знаю как сейчас, но в старой версии при щелчке правой мыши(и только ей) по хидеру лисвиева в режиме таблицы срабатывает onclick хотя по логике для него есть oncolumnclick
-
I found that there is a problem with RightClick when using a ListView. This program will demonstrate the error (KOL v3.14159265358979):
program Test;
uses KOL;
procedure ColumnClick(Dummy: Pointer; Sender: PControl; Idx: Integer);
begin
if Sender.RightClick then
MsgOK(Sender.LVColText[Idx]);
end;
begin
Applet := NewForm(nil, 'Test');
with NewListView(Applet, lvsDetail, [], nil, nil, nil)^ do
begin
LVColAdd('Col1', taLeft, 80);
LVColAdd('Col2', taLeft, 80);
LVColAdd('Col3', taLeft, 80);
OnColumnClick := TOnLVColumnClick(MakeMethod(nil, @ColumnClick));
end;
Run(Applet);
end.
-
LVN_COLUMNCLICK is fired by the system only in responce to left mouse click on column header. program Test;
uses
KOL;
procedure ColumnClick(Dummy: Pointer; Sender: PControl; Idx: Integer);
begin
MsgOK(Sender.LVColText[Idx]);
end;
procedure Click1(Dummy: Pointer; Sender: PControl);
begin
if Sender.RightClick then
MsgOK('Click right')
else
MsgOK('Click left');
end;
begin
Applet := NewForm(nil, 'Test');
with NewListView(Applet, lvsDetail, [], nil, nil, nil)^ do
begin
LVColAdd('Col1', taLeft, 80);
LVColAdd('Col2', taLeft, 80);
LVColAdd('Col3', taLeft, 80);
OnColumnClick := TOnLVColumnClick(MakeMethod(nil, @ColumnClick));
OnClick := TOnEvent(MakeMethod(nil, @Click1));
end;
Run(Applet);
end.
-
> LVN_COLUMNCLICK is fired by the system only in > responce to left mouse click on column header.
Understood - thank you very much.
-
You can handle right click on column header by yourself.
uses KOL, Windows, Types;
procedure Click1(Dummy: Pointer; Sender: PControl); var P: TPoint; hChildWnd: HWND; WndClass: string; hdhti: TLVHitTestInfo; begin if Sender.RightClick then begin P := Point(LoWord(GetMessagePos), HiWord(GetMessagePos)); ScreenToClient(Sender.Handle, P); hChildWnd := ChildWindowFromPoint(Sender.Handle, P); if (hChildWnd <> 0) and (hChildWnd <> Sender.Handle) then begin SetLength(WndClass, 80); SetLength(WndClass, GetClassName(hChildWnd, PChar(WndClass), Length(WndClass))); if WndClass = 'SysHeader32' then begin hdhti.pt := P; if SendMessage(hChildWnd, HDM_HITTEST, 1, Longint(@hdhti)) >= 0 then MsgOK('Click right ' + Sender.LVColText[hdhti.iItem]); end; end; end else MsgOK('Click left'); end;
-
что то, видимо народ, не понял что я имел в виду в [98] правая мышь на заголовке вызывает ONCLICK !!! в котором обрабатываются клики по итемам, и событиям от заголовка там делать нечего
-
Вот сюда function WndProcCommonNotify( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
var NMhdr: PNMHdr;
begin
Result := False;
if Msg.message = WM_NOTIFY then
begin
NMHdr := Pointer( Msg.lParam );
case NMHdr.code of
NM_RCLICK,
NM_CLICK:
if assigned( Self_.EV.fOnClick ) then
begin
if NMHdr.code = NM_RCLICK then
include( Self_.fFlagsG6, G6_RightClick )
else exclude( Self_.fFlagsG6, G6_RightClick );
Self_.fRightClick := NMHdr.code=NM_RCLICK;
Self_.EV.fOnClick( Self_ );
end;
NM_KILLFOCUS:
if assigned( Self_.EV.fOnLeave ) then
Self_.EV.fOnLeave( Self_ );
NM_RETURN,
NM_SETFOCUS:
if assigned( Self_.EV.fOnEnter ) then
Self_.EV.fOnEnter( Self_ );
end;
end;
end; приходит сообщение от Windows WM_NOTIFY с кодом NM_CLICK, дальше что?
-
а я почем знаю, левый то почемуто не приходит в onclick,а приходит в ОnColumnClick, значит не в винде дело
-
В том и дело, что от винды как раз и не приходит левый клик. А что приходит, то и отдает код.
-
ну согласитесь не логично, что клик по заголовку идет в клик по итему в той же vcl под онклик подразумеваются именно левые клики а для правого клика по заголовку создается отдельное событие OnColumnRightClick (именно оттуда Ken [102] скопировал код) и никакой путаницы
-
Да, в VCL groupbox вообще в переопределенной процедуре Paint перерисовывался кодом из VCL. Нет, можно добавить какую-нибудь проверку, например, что WM_NOTIFY пришел для самого окна listview. Но я против такого подхода. Еще раз: кому не нравится, свой обработчик WM_NOTIFY навешивается очень просто. Если что-то делается часто, оформляется процедурой. Всяко проще, чем в VCL, где нет возможности без определения наследника легко прицепиться к обработчику. Там есть только SetWindowLong, что простым способом назвать трудно. У нас есть OnMessage, AttachProc(Ex) - доработки со стороны без проблем. Базовая версия должна быть минималистская. Не абсолютно всех интересует, где был клик правой кнопкой мыши.
-
при установленных CenterOnScreen=true и WindowsState=wsMaximized форма при запуске оставляет небольшой зазор сверху, хотя в дальнейшем при переводе в нормальный режим, а затем опять в максимальный режим такого нет. Очень похоже что форма сначала распахивается на весь экран, а потом равняется по центру экрана и присутствие панели задач заставляет образоваться зазор. Походу надо селать наоборот, сначала выровнять по центру экрана, а затем распахнуть.
P.S. Delphi 7, Windows XP, версия библиотеки скачена 21.06.2011
-
Еще одно непонятное поведение ListView. В книге и описаниях компонента сказано, что можно редактировать только одну первую колонку, но вопрос не в этом. При заполнении данными и попытке редактировать первую колонку по окончании ввода данных приложение валится с ошибкой "acсess violation 0x00000000 ...". Однако достаточно сделать обработчик события OnEndEditLVItem (можно туда ничего не вписывать, или что бы не пропал во время компиляции вписать коментарии), как приложение начинает работать как положено без всяких ошибок.
P.S. Delphi 7, Windows XP, версия библиотеки скачена 21.06.2011
-
-
Замечен глюк с Toolbar, при разделении кнопок на группы("-" в Caption свойствах кнопки). После сохранения проекта, закрытия и открытия его повторно, группы востанавливаются неверно, "-" располагается в напротив совсем других кнопок.
-
В Toolbar в свойство Caption надо вставить хотя бы пробелы, что бы после открытия "-" (separator) востановились правильно.
-
При FormCompact=true и наличии на форме ListView, вызов формы валит приложение.
-
Free_And_Nil работает некоректно, не освобождает объекты по крайней мере связанные с интерфейсами (TInterfacedComponent) метод free с последующим := nil норм
-
> Free_And_Nil работает некоректно, не освобождает объектыпо > крайней мере связанные с интерфейсами (TInterfacedComponent)метод > free с последующим := nil норм
Ага, тоже уже довольно давно заметил.
|