Конференция "KOL" » Версия 2.84 [Delphi, KOL/MCK, Windows]
 
  • Vladimir Kladov © (28.10.07 17:54) [0]
                Новости от 28 октября 2007 (KOL & MCK v2.84)

    [+] Важно: благодаря D[u]fa, MCK теперь работает и на BDS2005-BDS2007,
    а  так  же  на  Turbo  Delphi.  Генерируемый код несколько отличается,
    поэтому предусмотрена автоматическая конверсия при переходе от прежних
    версий  Delphi  к  новым  и  наоборот,  при  загрузке  проекта  в IDE.
    Изменения  начинают  работать начиная с Delphi6 и Delphi7 (хотя в этих
    версиях  MCK работает и без нового кода). Для восстановления генерации
    прежнего кода MCK следует пересобрать с опцией NO_NEWIF.

    [*] TLIST_FAST:

    -  добавлено  свойство  UseBlocks  в  секцию  public, чтобы легче было
    изменять  его  при  создании  списков,  для  которых  эта  возможность
    индивидуально не используется, даже при наличии TLIST_FAST в опциях;

    - для ряда функций (методов), асм-версия которых не работает корректно
    с TLIST_FAST, асм-код отключён;

    -  для  многих  функций  и методов в Паскаль-версии обращение к fItems
    заменено либо на Items безусловно, либо по условию TLIST_FAST.

    [+] Добавлена возможность работать с потоками и файлами размером более
    4Гбайт.  Для  этого  следует  в опции проекта включить символ условной
    компиляции  STREAM_LARGE64.  В  любом случае объявления многих функций
    потоков  несколько  изменились  и  это может вызвать несовместимость с
    какими-либо  старыми  компонентами,  поэтому предусмотрена возможность
    устранения  такой  несовместимости,  включив  символ STREAM_COMPAT. На
    данный   момент  совместимость  обеспечена  для  пакета  KOLZlib,  при
    необходимости  будут  выполнены  изменения  и  в  других  зависимых от
    потоков пакетах.

    Так же, изменена функция FileSeek и удалена функция FileFarSeek.

    [+]   Добавлена   возможность   конкатенации   двух  потоков  (функция
    NewConcatStream)  произвольной  природы и размера в один объект, делее
    рассматриваемый программой как обычный поток данных.

    [+]  Добавлен  метод  TIcon.SetHandleEx, позволяющий присвоить объекту
    пиктограммы  дескриптор  иконки  без  извлечения  из неё битмапов и их
    анализа  для  установки  размера  (размер  должен  быть предварительно
    установлен  вашим  программным  кодом  тем  не  менее). Данный вариант
    быстрее,  и  всегда  работает  в Windows9x (где извлечение битмапов по
    дескриптору иконки может не работать).

    [-] Для UNICODE_CTRLS:
    - Str2DateTimeShort:Тип параметра изменён (String->KOLString);
    - и исправлен порядок вычисления формата (строки).

    [*]  Внутреннее  изменение:  во  избежание путаницы список подчинённых
    элементов меню теперь называется FMenuItems вместо прежнего FItems.

    [-]  В  обработчик  сообщений комбо-бокса добавлена проверка видимости
    контрола  перед  обработкой  WM_COMMAND  (иначе  система  обеспечивала
    выпадание  списка  для  невидимого  в  настоящий момент комбо-бокса по
    кнопке  F4,  если  до  сокрытия  родительской панели комбо-бокс был (и
    остался) в фокусе ввода.

    [-]  В  обработчике  WndProcTransparent выполнены изменения (by homm),
    которые  исправляют  прозрачность  для соседних контролов (учитывая не
    только прозрачных родителей, но и DoubleBuffered).

    [-]  MCK:  Для TKOLScrollox свойство OverrideScrollbars добавлено, для
    TKOLScrollbar удалено.



    Будете собирать общий пакет, обратите внимание: mckToolbarEditor.inc больше не нужен.

    Эх, под Delphi2/3 не адаптировал. Но ничего, до следующего раза доживёт а там поправлю.
  • D[u]fa © (28.10.07 18:46) [1]
    Владимир, небольшая поправочка:

    здесь нужно оставить по старому:
    {$IFDef KOL_MCK}///<-
    uses Windows, Messages, KOL {$IF Defined(KOL_MCK)}{$ELSE}, mirror, Classes,
    mckObjs, Controls, mckCtrls, SysUtils {$IFEND (place your units here->)};
    {$ELSE}
    {$I uses.inc}
     Windows, Messages, Classes, Controls, Forms, mirror;
    {$ENDif}//<---

    а на данный момент МСК конвертит в:

    {$IF Defined(KOL_MCK)}<<<
    uses Windows, Messages, KOL {$IF Defined(KOL_MCK)}{$ELSE}, mirror, Classes,
    mckObjs, Controls, mckCtrls, SysUtils {$IFEND (place your units here->)};
    {$ELSE}
    {$I uses.inc}
     Windows, Messages, Classes, Controls, Forms, mirror;
    {$ifend}<<<

    иначе в 2007 наблюдается глюк, код генерится форму вроде видно, но назначить события нельзя...
  • Vladimir Kladov © (28.10.07 20:19) [2]
    А в Delphi6-7 наоборот глюк получается. С IF Defined событие назначал на кнопку для теста, работало.

    Сейчас погляжу, там кажется немного поправить можно чтобы и так было и эдак.
  • Vladimir Kladov © (28.10.07 20:32) [3]

    Сейчас погляжу, там кажется немного поправить можно чтобы и так было и эдак.


    Всё проще. Строка в mirror.pas 11931б раскомментарить в фигурных скобках чтобы стало:
         if (Trim( Source[ i ] ) = '{$IFDEF KOL_MCK}') and
            ((Source[ I ][1] = ' ')) then



    Если руками испралять везде долго, то:
    1. Открываем пакадж, ставим опцию NO_NEWIF, Build.
    2. Закрывае пакадж, открываем проект, пробегаем по формам (всё вертается на IFDEF/ENDIF
    3. Закрываем проект, открываем пакадж, убираем опцию NO_NEWIF, Build.
    4. Закрывает пакадж, открываем проект, пробегаем по юнитам с формами, (теперь IF где надо, где не надо - IFDEF), Build. Теперь всё как надо. Сейчас в D6 проверил - всё тоже работает. Это я какой-то глюк словил и с испугу закомментарил :)
  • Vladimir Kladov © (28.10.07 20:36) [4]
    11931 (б вместо ',' набил)
  • mdw © (29.10.07 11:36) [5]
    Доступно на http://www.kolnmck.ru/files1.shtml

    KOL v.2.84 (28.10.2007)
    KOL&MCK v.2.84 (28.10.2007)
    KOLnMCK-CE v.2.80-Rev.219 (23.10.2007)
  • Vladimir Kladov © (29.10.07 15:50) [6]
    Я сегодня смотрел на bds2006, вроде работает. Но как там всё криво, однако. И на закрытии оболочки падает.
  • SergeR © (29.10.07 15:56) [7]
    Огромный респек
    > Генерируемый код несколько отличается,
    > поэтому предусмотрена автоматическая конверсия при переходе
    > от прежних
    > версий  Delphi  к  новым  и  наоборот,  при  загрузке  проекта
    >  в IDE.

    т D[u]fa и Владимиру.
    Поставил на BDS2006. Работает
    > Генерируемый код несколько отличается,
    > поэтому предусмотрена автоматическая конверсия при переходе
    > от прежних версий  Delphi  к  новым  и  наоборот,  при  загрузке  проекта
    >  в IDE.

    А вот тут чего то не работает у меня, всё остается по старому.
  • D[u]fa © (29.10.07 16:10) [8]
    Vladimir Kladov, криво в каком смысле?

    кстати насчет автоконверта) не много не продумали, если запустить проект сделанный в 7ке на 2007 то автоконверт не сработает =) потому к форме доступа нету и мск не может генерить код =) зато запустив в 7ой срабатывает конверт и после этого мона на 2007 запускать.

    падений у меня лично не наблюдалось. мб не из-за мск падает 2006 ?
  • D[u]fa © (29.10.07 16:32) [9]
    >А вот тут чего то не работает у меня, всё остается по старому.

    старая иде это ниже 6ой =)
  • Vladimir Kladov © (29.10.07 18:22) [10]
    Да, старая, это ниде 6-й. Если надо обратный конверт, я уже писал: пока что символом NO_NEWIF в пакете. В принципе, наверное, стоит добавить в TKOLProject типа дезайнтайм свойство NewIf, чтобы попроще конвертить.

    Мне не понравилось что в BDS сразу изменения не отображаются, а если переключиться куда-нибудь в чужое окно и обратно, только тогда он спохватывается, и спрашивает, что раз файл загруженный в IDE изменился извне, то не перезагрузить ли его.

    Вообще в нем code insight глючит не по детски. Хочет тултип всплыть, но только дрожит пустое белое окно. При ребилде пакета, он его сносит, и приходится еще раз Install делать.

    Мне вообще не по нутру пришлась идея нового дизайнера содранная из MS VC + .NET. Почему на гигантском экране в 22" я не могу одновременно писать код и видеть форму. Я так привык и мне так удобней - как было раньше. Не, не буду переходить. К тому же под bds тянуть fast type не получится (кажется). А я уже привык по-своему текст набирать :)
  • D[u]fa © (29.10.07 19:29) [11]
    насчет свойства NewIf поддерживаю. 2007 по лучше 2006 буит, хоть и не сильно. А вот к фаст тип я тоже привык, надо какой то порт под 2007, хотя эту версию еще не пробовал туда вставить
  • Jon © (29.10.07 19:59) [12]

    > A capability added to work easy with streams and files larger
    > then 4Gbytes. To do so, a symbol STREAM_LARGE64 must be
    > included to the project options.


    Bu report: The size cannot be set greater than MaxInt.


    begin
     with NewWriteFileStream('test')^ do
     try
       Size := Int64(MaxInt) + 1;
     finally
       Free;
     end;
    end.



    A file of 0 bytes is created :-(

    The following VCL code works correctly:


    begin
     with TFileStream.Create('test', fmCreate) do
     try
       Size := Int64(MaxInt) +1;
     finally
       Free;
     end;
    end;



    Conditional STREAM_LARGE64 is defined.
  • Jon © (30.10.07 03:52) [13]
    I have a fix for the stream size bug:

    function FileSeek


    Line 20780
        Result := SetFilePointer(Handle, DWORD( MoveTo ), nil, Ord( MoveMethod ) )


    Change to:
        Result := SetFilePointer(Handle, I64(MoveTo).Lo , @I64(MoveTo).Hi , Ord( MoveMethod ) )



    Also may need this:

    procedure SetSizeFileStream


    Line 25020
     P: DWORD;


    Change to:
     P: TStrmSize;



    Hope that it helps.
  • homm © (30.10.07 07:21) [14]
    > [5] mdw ©   (29.10.07 11:36)
    > Доступно на http://www.kolnmck.ru/files1.shtml

    Не плохо было бы включить туда пакеты для старших версий…

    Сделал пакет для КОЛ, добавил файлы, поставилось.
    Сделал пакет для Грашей, добавил файлов, он автоматически в requires добавил MirrorKOLPackageD2007, но при установке выдает:
    [DCC Error] GRushControls_D2007.dpk(30): E1026 File not found: 'MirrorKOLPackageD2007.drf'



    Название пакета верное… Файла такого действительно нигде на жестком нет…
  • homm © (30.10.07 07:36) [15]
    > [0] Vladimir Kladov ©   (28.10.07 17:54)
    > Генерируемый код несколько отличается,
    > поэтому предусмотрена автоматическая конверсия при переходе
    > от прежних
    > версий  Delphi  к  новым  и  наоборот,  при  загрузке  проекта
    > в IDE.
    > Изменения  начинают  работать начиная с Delphi6 и Delphi7
    > (хотя в этих
    > версиях  MCK работает и без нового кода).

    Вот тут поподробнее. Т.е. что-бы конвернуть старый проект, нужно открыть его на новом коле в дельфи 6 или 7 ?

    Я открыл старый проект сразу в 2007, она его не распознает как VCL, считает его Вин32 проектом.
  • homm © (30.10.07 07:42) [16]
    > [15] homm ©   (30.10.07 07:36)
    > Т.е. что-бы конвернуть старый проект, нужно открыть его
    > на новом коле в дельфи 6 или 7 ?

    Так и сделал, ИФДЕФЫ сменились, но 2007 все равно не считает проект VCL-ным.
  • D[u]fa © (30.10.07 08:44) [17]
    homm

    а тут так?

    {$IFDef KOL_MCK}///<-
    uses Windows, Messages, KOL {$IF Defined(KOL_MCK)}{$ELSE}, mirror, Classes,
    mckObjs, Controls, mckCtrls, SysUtils {$IFEND (place your units here->)};
    {$ELSE}
    {$I uses.inc}
    Windows, Messages, Classes, Controls, Forms, mirror;
    {$ENDif}//<---
  • homm © (30.10.07 09:02) [18]
    > [17] D[u]fa ©   (30.10.07 08:44)
    > а тут так?

    {IF Define(KOL_MCK)}



    В самом файле проекта не сменились, остались {$IFDef}, поменял в ручную, эффект тот-же.
  • SergeR © (30.10.07 10:00) [19]
    {IF Define(KOL_MCK)}///<-
    uses Windows,.....надо поменять на
    {$IFDef KOL_MCK}, а то не работает.
 
Конференция "KOL" » Версия 2.84 [Delphi, KOL/MCK, Windows]
Есть новые Нет новых   [134431   +10][b:0][p:0.004]