-
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 с полнофункциональным поиском, но даже еще не протестировал все комбинации параметров (их много).
|