Конференция "KOL" » Версия 3.21 [Delphi, Windows]
 
  • Vladimir Kladov © (23.11.13 14:50) [0]
    Выложена на kolmck.net и sourceforge.net/projects/keyobjectslibrary

    Небольшие изменения в KOL и MCK для лучшей поддержки XE, 2010.
    Обратите внимание на новое свойство TKOLProject.AutoCreateForms:
    здесь надо писать список форм, которые будут создаваться пристарте приложения. Через точку-с-запятой. Если оставить пустым, работает (должно работать) как раньше, т.е. брать из списка форм в dpr-файле.

    Процедуру первоначального создания проекта и формы сделать совсем чисто чтобы работало, не очень получается - в XE2 (возможно, в XE и 2010 - тоже). Вопрос типа "а на диске проект поменялся, перезагрузить?" правильно должен быть отвечен ДА. Но тогда последует серия сообщений об ошибках от IDE, которые надо прожать, прежде чем закрыть проект и открыть сгенерированный в соответствии с TKOLProject.projectDest. При создании новой формы в проект надо сохранить юнит в папку, положить TKOLForm, удалить, и снова положить. Вот тогда модуль генерирует новый код. Если начинается автоматическое использование одного юнита из другого, uses может вставляться внутрь ifdef'а. Переносить пока ручками в позицию после implementation. Ну а так вроде работает, новые контролы на форме появляются в проекте сразу, свойства меняются. Дальше не пробовал.
  • Duufa (24.11.13 20:43) [1]
    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 пришлось отключить асм версии т.к иногда бывают рандум падения, но так и не разобрался почему..
  • Vladimir Kladov © (28.11.13 22:08) [2]
    Спасибо. И не надо бояться асма.

    function NewReadWriteFileStream( const FileName: AnsiString ): PStream;
    asm
           PUSH     EBX
           XCHG     EBX, EAX   //EBX=Filename
           MOV      EAX, offset[BaseFileMethods]
           CALL     _NewStream //EAX=Result
           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  //EBX=Result, EAX=Filename
           MOV      EDX, ofOpenReadWrite or ofOpenAlways or ofShareDenyWrite

           CALL     FileCreate
           MOV      [EBX].TStream.fData.fHandle, EAX
           XCHG     EAX, EBX  //EAX=Result
           POP      EBX
    end;


  • robt5 (29.11.13 22:14) [3]

    > И не надо бояться асма.

    ага, а как насчет перевести весь этот асм в х64 ?
  • Vladimir Kladov © (01.12.13 10:10) [4]
    В x64 не надо. Embarcadero сам не переводит system.pas в x64 в ассемблер. Смотрите его код, для x64 - чистый Паскаль.
  • robt5 (05.04.14 22:38) [5]
    проблема с флагами
    если стоит 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 в асамблерном участке

                   {$IFDEF  USE_FLAGS}
                   TEST     [EAX].TControl.fFlagsG6, 1 shl G6_KeyPreview
                   {$ELSE}
                   CMP      [EAX].fKeyPreview, 0
                   {$ENDIF}
                   JZ       @@ret0


    если включить PAS_VERSION то фокус нормально ставится и с USE_FLAGS и с USE_OLD_FLAGS !!!

    кароче походу косяки с ассемблерными вариантами  в KOL_ASM.inc
  • robt5 (06.04.14 11:26) [6]
    в догонку , остальные дефы в проекте
    MSWINDOWS
    KOL_MCK
    KEY_PREVIEW
    NOT_USE_RICHEDIT
    версия делфи 7
  • Vladimir Kladov © (15.04.14 18:00) [7]
    Версия 3.22 Пока только на kolmck.net
    Небольшие исправления KOL для версии условия PAS_ONLY
    Небольшое исправление для работы TTrayIcon в Aston Shell

    Просто критические исправления.
  • QAZ (30.04.14 11:59) [8]
    какой смысл существования пар функций
    WAnsiLowerCase-WLowerCase
    WAnsiUpperCase-WUpperCase
    если в итоге вызывается одна и тажа winapi функция?
  • Дмитрий К © (01.05.14 18:42) [9]

    > Vladimir Kladov ©   (15.04.14 18:00) [7]
    >
    > Версия 3.22

    Изменилась WStrRScan. Из-за этого сломались некоторые функции -  ExtractFilePath, например.
  • Netspirit (23.06.14 13:51) [10]
    При объявленном USE_FLAGS и NEW_ALIGN некорректно работают TControl.SetVisible/TControl.GetVisible.
    А точнее, в Set_Visible устанавливается один флаг, а в Get_Visible проверяется совсем другой. Один из эффектов - TControl.StatusCtl.Visible всегда False.
    Самое простое решение - в Set_Visible в строке 38129 сделать
    {$IFDEF USE_FLAGS}
    Include(fStyle.f3_Style, F3_Visible);
    {$ELSE}



    Но, поскольку в той процедуре после {$ELSE NEW_ALIGN} творится что-то непонятное, рассмотреть такой вариант:
    {$ELSE NEW_ALIGN}
     {$IFDEF USE_FLAGS}
       if Value then
         Include(fStyle.f3_Style, F3_Visible)
       else
         Exclude(fStyle.f3_Style, F3_Visible);
     {$ELSE}
       fVisible := Value;
       if Value then
         fStyle.Value := fStyle.Value or WS_VISIBLE
       else
         fStyle.Value := fStyle.Value and not WS_VISIBLE;
     {$ENDIF}
     if  fHandle = 0 then Exit; // И т.д.

  • Netspirit (24.06.14 13:17) [11]
    Точнее, вот так:
    {$ELSE NEW_ALIGN}
     fStyle.Value := fStyle.Value and not WS_VISIBLE;
     if Value then
         fStyle.Value := fStyle.Value or WS_VISIBLE;
     {$IFDEF USE_FLAGS}
       if Value then
         Include(fStyle.f3_Style, F3_Visible)
       else
         Exclude(fStyle.f3_Style, F3_Visible);
     {$ELSE}
       fVisible := Value;
     {$ENDIF}
     if  fHandle = 0 then Exit;

  • QAZ (08.08.14 17:08) [12]
    в дельфи 3 проблемы с UNICODE_CTRLS, начинают сыпать ошибки pChar несовместим с Pkolchar и тд возможно не подключается KOL_unicode.inc в дефинах
    в дельфи 4 при установке просит модуль которого давно не существует и не нужен
 
Конференция "KOL" » Версия 3.21 [Delphi, Windows]
Есть новые Нет новых   [118666   +35][b:0][p:0.003]