-
Выложена на kolmck.net и sourceforge.net/projects/keyobjectslibrary
Небольшие изменения в KOL и MCK для лучшей поддержки XE, 2010. Обратите внимание на новое свойство TKOLProject.AutoCreateForms: здесь надо писать список форм, которые будут создаваться пристарте приложения. Через точку-с-запятой. Если оставить пустым, работает (должно работать) как раньше, т.е. брать из списка форм в dpr-файле.
Процедуру первоначального создания проекта и формы сделать совсем чисто чтобы работало, не очень получается - в XE2 (возможно, в XE и 2010 - тоже). Вопрос типа "а на диске проект поменялся, перезагрузить?" правильно должен быть отвечен ДА. Но тогда последует серия сообщений об ошибках от IDE, которые надо прожать, прежде чем закрыть проект и открыть сгенерированный в соответствии с TKOLProject.projectDest. При создании новой формы в проект надо сохранить юнит в папку, положить TKOLForm, удалить, и снова положить. Вот тогда модуль генерирует новый код. Если начинается автоматическое использование одного юнита из другого, uses может вставляться внутрь ifdef'а. Переносить пока ручками в позицию после implementation. Ну а так вроде работает, новые контролы на форме появляются в проекте сразу, свойства меняются. Дальше не пробовал.
-
AutoCreateForms пока не проверял (да и возможности на ХЕ проверить нету). Есть несколько др. дополнений NewReadWriteFileStream (асм версия сейчас отключена и не пробовал менять ее.. хотя вполне, можно), а вот пас версию:
function NewReadWriteFileStream( const FileName: KOLString ): PStream;
var Creation: DWORD;
begin
Result := _NewStream( BaseFileMethods );
Result.fMethods.fRead := ReadFileStreamProc;
Result.fMethods.fWrite := WriteFileStream;
Result.fMethods.fSetSiz := SetSizeFileStream;
Creation := ofCreateAlways;
if FileExists( FileName ) then Creation := ofOpenExisting;
Result.fData.fHandle := FileCreate( FileName,
ofOpenReadWrite or Creation or ofShareDenyWrite );
end;
можно короче сделать:
function NewReadWriteFileStream( const FileName: KOLString ): PStream;
begin
Result := _NewStream( BaseFileMethods );
Result.fMethods.fRead := ReadFileStreamProc;
Result.fMethods.fWrite := WriteFileStream;
Result.fMethods.fSetSiz := SetSizeFileStream;
Result.fData.fHandle := FileCreate(FileName, ofOpenReadWrite or ofOpenAlways or ofShareDenyWrite);
end;
TStrList.LoadFromStream, TStrList.MergeFromFile пришлось отключить асм версии т.к иногда бывают рандум падения, но так и не разобрался почему..
-
Спасибо. И не надо бояться асма.
function NewReadWriteFileStream( const FileName: AnsiString ): PStream;
asm
PUSH EBX
XCHG EBX, EAX MOV EAX, offset[BaseFileMethods]
CALL _NewStream MOV EDX, [ReadFileStreamProc]
MOV [EAX].TStream.fMethods.fRead, EDX
MOV [EAX].TStream.fMethods.fWrite, offset[WriteFileStream]
MOV [EAX].TStream.fMethods.fSetSiz, offset[SetSizeFileStream]
XCHG EBX, EAX MOV EDX, ofOpenReadWrite or ofOpenAlways or ofShareDenyWrite
CALL FileCreate
MOV [EBX].TStream.fData.fHandle, EAX
XCHG EAX, EBX POP EBX
end;
-
> И не надо бояться асма.
ага, а как насчет перевести весь этот асм в х64 ?
-
В x64 не надо. Embarcadero сам не переводит system.pas в x64 в ассемблер. Смотрите его код, для x64 - чистый Паскаль.
-
проблема с флагами если стоит USE_FLAGS совместно с ASM_VERSION то не работает корректно установка фокуса контролов такой конструкцией
procedure TForm1.MouseEnter(Sender: PObj);
begin
if Form.Focused then Pcontrol(Sender).Perform(WM_SETFOCUS,0,0);
end;
если ставить USE_OLD_FLAGS совместно с ASM_VERSION то компилятор не находит определения fKeyPreview в асамблерном участке
TEST [EAX].TControl.fFlagsG6, 1 shl G6_KeyPreview
CMP [EAX].fKeyPreview, 0
JZ @@ret0
если включить PAS_VERSION то фокус нормально ставится и с USE_FLAGS и с USE_OLD_FLAGS !!! кароче походу косяки с ассемблерными вариантами в KOL_ASM.inc
-
в догонку , остальные дефы в проекте MSWINDOWS KOL_MCK KEY_PREVIEW NOT_USE_RICHEDIT версия делфи 7
-
Версия 3.22 Пока только на kolmck.net Небольшие исправления KOL для версии условия PAS_ONLY Небольшое исправление для работы TTrayIcon в Aston Shell
Просто критические исправления.
-
какой смысл существования пар функций WAnsiLowerCase-WLowerCase WAnsiUpperCase-WUpperCase если в итоге вызывается одна и тажа winapi функция?
-
> Vladimir Kladov © (15.04.14 18:00) [7] > > Версия 3.22
Изменилась WStrRScan. Из-за этого сломались некоторые функции - ExtractFilePath, например.
-
При объявленном USE_FLAGS и NEW_ALIGN некорректно работают TControl.SetVisible/TControl.GetVisible. А точнее, в Set_Visible устанавливается один флаг, а в Get_Visible проверяется совсем другой. Один из эффектов - TControl.StatusCtl.Visible всегда False. Самое простое решение - в Set_Visible в строке 38129 сделать
Include(fStyle.f3_Style, F3_Visible);
Но, поскольку в той процедуре после {$ELSE NEW_ALIGN} творится что-то непонятное, рассмотреть такой вариант:
if Value then
Include(fStyle.f3_Style, F3_Visible)
else
Exclude(fStyle.f3_Style, F3_Visible);
fVisible := Value;
if Value then
fStyle.Value := fStyle.Value or WS_VISIBLE
else
fStyle.Value := fStyle.Value and not WS_VISIBLE;
if fHandle = 0 then Exit;
-
Точнее, вот так:
fStyle.Value := fStyle.Value and not WS_VISIBLE;
if Value then
fStyle.Value := fStyle.Value or WS_VISIBLE;
if Value then
Include(fStyle.f3_Style, F3_Visible)
else
Exclude(fStyle.f3_Style, F3_Visible);
fVisible := Value;
if fHandle = 0 then Exit;
-
в дельфи 3 проблемы с UNICODE_CTRLS, начинают сыпать ошибки pChar несовместим с Pkolchar и тд возможно не подключается KOL_unicode.inc в дефинах в дельфи 4 при установке просит модуль которого давно не существует и не нужен
|