Конференция "KOL" » KOL v 3.00 [Delphi, Windows]
 
  • Jon © (23.10.10 13:55) [180]

    dcc32.exe -b KOL.pas -dUNICODE_CTRLS

    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    KOLDEF.INC(253)
    KOLDEF.INC(253)
    delphidef.inc(48)
    delphicommctrl.inc(1569)
    KOL_unicode.inc(1185)
    KOL_unicode.inc(1185)
    KOL.pas(20549) Error: Incompatible types
    KOL_ASM.inc(14864)
    KOL.pas(65524)

  • Vladimir Kladov © (23.10.10 18:35) [181]
    3.00.R+ or change line  20549 to
    if Copy( Result, 1, 2 ) = KOLString('-') + ThsSeparator then

  • Jon © (24.10.10 19:47) [182]
    When pressing ALT+SPACE together the system menu does not appear when using PAS_VERSION with a button on the form:


    program Test;

    uses KOL;

    begin
     Applet := NewForm(nil, '');
     NewButton(Applet,'');
     Run(Applet);
    end.



    - Conditional defines: PAS_VERSION;KEY_PREVIEW;
    - build and run program
    - hold down ALT+SPACE together
    - menu does not show

    - Conditional defines: ASM_VERSION;KEY_PREVIEW;
    - build run program
    - hold down ALT+SPACE together
    - menu shows correctly
  • Vladimir Kladov © (24.10.10 20:47) [183]
    At least what I found: KEY_PREVIEW is not important, problem function is _NewControl only (but did not yet find why).
  • Vladimir Kladov © (24.10.10 20:54) [184]
    Understand now. Pascal version is correct, asm version a bit lagged: it does not set created button as a current control. If the button is current it intercepts ALT+Space as it should.

    KEY_PREVIEW does not (and should not) affect ALT+SPACE shortcut.
  • Vladimir Kladov © (24.10.10 20:59) [185]
    Version 3.00.T+ on site.
  • Jon © (24.10.10 22:55) [186]

    > KEY_PREVIEW does not (and should not) affect ALT+SPACE shortcut.


    Test with the following conditionals:

    dcc32.exe -b test.dpr -dPAS_VERSION;
    dcc32.exe -b test.dpr -dASM_VERSION;
    dcc32.exe -b test.dpr -dPAS_VERSION;KEY_PREVIEW;

    ALT+SPACE not working

    dcc32.exe -b test.dpr -dASM_VERSION;KEY_PREVIEW;

    ALT+SPACE always working
  • Jon © (25.10.10 01:44) [187]
    When compiling v3.00.T+ in the IDE, I get this message:

    [Fatal Error] KOL.pas(18249): Unterminated conditional directive
  • SPeller © (25.10.10 04:48) [188]

    > L`Autour   (22.10.10 11:24) [175]
    >
    > SPeller
    > PWideChar - просто указатель на строку с 0 на конце
    > WideString - указатель на строку + перед самой строкой хранится
    > ее длина.
    >
    > А как строка UnicodeString представлена в памяти? (Кроме
    > отзывов про него найти пока ничего не могу).
    UnicodeString - по организации идентична AnsiString. Исключение в том, что каждый символ в этой строке - двухбайтовый. Тип символов в строке - WideChar (по первой это не совсем понятно правда, до самого не сразу дошло:)). Char в Д2009 и выше по дефолту ссылается на WideChar, PChar - на PWideChar, string - на UnicodeString. Поэтому старые конструкции вызовов API вроде function(PChar(string)) будут работать нормально без правок: вызов API функции из системного юнита будет подставлен с суффиксом W, и тип указателя на строку будет правильным.
    WideString - это виндовой тип строки, известный как BSTR. Он тоже состоит из WideChar'ов. Но он не родной для Дельфи, его менеджментом занимается системная библиотека, что не есть хорошо для нас. (Хотя этот тип прекрасен не только в COM, но и для передачи строк в формате юникод из/в длл, и поддерживается если не всеми языками программирования, то многими точно :) В результате можно легко гонять строки между модулями, написанными на разных ЯП, не парясь с указателями)


    > Vladimir Kladov ©   (22.10.10 18:30) [176]
    > Т.е. Вы предлагаете заменить именно WideString на KOLWideString
    > в KOL.pas ? Это можно. А разве для KOLString не нужно в
    > D20xx переопределить его тоже как UnicodeString ?
    Да, WideString заменить на KOLWideString. KOLString тоже нужно переопределить в UnicodeString, просто в предыдущих постах акцентировал внимание на новом типе. Всё это нужно для Д2009 и выше.
  • Vladimir Kladov © (25.10.10 05:08) [189]
    procedure TGraphicTool.SetLogFontStruct(const Value: TLogFont);
    begin
     if  CompareMem(@fData.Font, @Value, SizeOf(TLogFont)) then Exit;
     Move(Value, fData.Font, SizeOF(TLogFont));
     Changed;
    end; <- this is line 18249

    function TGraphicTool.GetLogFontStruct: TLogFont;



    2 Speller: уже сделано.
  • SPeller © (25.10.10 06:50) [190]
    Еще вот думаю, может в Д2009 и выше следует по дефолту включать UNICODE_CTRLS?
  • Vladimir Kladov © (25.10.10 08:21) [191]
    Мне, честно говоря, D20XX не нужен как таковой. Уж так, для поддержания, раз уж на него народ зачем-то переходит. Наверное, кто не успел купить нормальный Delphi. Но я лучше буду пользовать нелегальную копию Delphi 3, чем ЭТО.
  • MTsv DN (25.10.10 10:01) [192]
    Версия 3.00Т+
    Использовался StrReplace для AnsiString (объявление именно AnsiString), теперь выдает несоответствие типов. Не понимаю, чем так AnsiString не угодил, он что в D2009-2010 не работает? Нафиг дублировать функи-то?
    function StrReplace( var S: KOLString; const From, ReplTo: KOLString ): Boolean;
    var I: Integer;
    begin
     I := pos( From, S );
     if I > 0 then
     begin
       S := Copy( S, 1, I - 1 ) + ReplTo + CopyEnd( S, I + Length( From ) );
       Result := TRUE;
     end
     else Result := FALSE;
    end;

    function KOLStrReplace( var S: KOLString; const From, ReplTo: KOLString ): Boolean;
    var I: Integer;
    begin
     I := pos( From, S );
     if I > 0 then
     begin
       S := Copy( S, 1, I - 1 ) + ReplTo + CopyEnd( S, I + Length( From ) );
       Result := TRUE;
     end
     else Result := FALSE;
    end;


    Идентичность же 100%.
  • MTsv DN (25.10.10 10:23) [193]
    И опять какие-то артефакты с отрисовкой элементов. На тестовом проекте получить не удалось. Суть в том что после закрытия дочерней формы некоторые элементы не отрисовываются. В версии 3.00.P все было нормально.
  • MTsv DN (25.10.10 10:48) [194]
    А в пас-версии при закрытии вообще краш приложения.
  • SPeller © (25.10.10 11:20) [195]

    > Vladimir Kladov ©   (25.10.10 08:21) [191]
    >
    > Мне, честно говоря, D20XX не нужен как таковой. Уж так,
    > для поддержания, раз уж на него народ зачем-то переходит.
    >  Наверное, кто не успел купить нормальный Delphi. Но я лучше
    > буду пользовать нелегальную копию Delphi 3, чем ЭТО.

    Ну, ХЕ (2011) уже более-менее жизнеспособна ) 2010 стала шустрее загружаться ) Юникод, хэлперы и ртти - вкусные. Поддержка хр, висты в вцл. Поэтому везде есть свои плюсы )
  • MTsv DN (25.10.10 11:30) [196]
    По поводу [193] и [194]. Баг в WndProc. А именно в 2х кусках кода:
    1.
        {$IFDEF SAFE_CODE}
        //inc( self_.fNestedMsgHandling );
        self_.RefInc;
        TRY
        {$ENDIF}
            {$IFDEF DEBUG_KEYDOWN}
            if  M.message = WM_KEYDOWN then
            asm
              nop
            end;
            {$ENDIF}
            Result := self_.WndProc( M );
        {$IFDEF SAFE_CODE}
        FINALLY
           self_.RefDec;
        {$ENDIF}
            //dec( self_.fNestedMsgHandling );
            (*if  (self_.fRefCount = 0) and (self_.fNestedMsgHandling <= 0)
            and {$IFDEF USE_FLAGS} (G2_BeginDestroying in self_.fFlagsG2)
                {$ELSE} self_.fBeginDestroying {$ENDIF}
            and (self_ <> Applet) then
              self_.Free;*)

        {$IFDEF SAFE_CODE}
        END;
        {$ENDIF}


    Вернул старый код.

    2.
    function TControl.WndProc( var Msg: TMsg ): Integer;


    RefInc и RefDec закомментировал.
  • MTsv DN (25.10.10 11:49) [197]
    В асм-версии только закомментировал RefInc/RefDec.
  • Vladimir Kladov © (25.10.10 16:08) [198]
    Это только на падения или на отрисовку тоже влияло?
    Поставил было, отлавливая свою ошибку, ошибку нашел, назад не вернул. Как бы не успел. Верну, без проблем. И еще, возвращать весь код в паскаль-версии нет особого смысла вроде бы: в реальности уже не отрабатывает этот кусок, кроме случая бага:

            (*if  (self_.fRefCount = 0) and (self_.fNestedMsgHandling <= 0)
            and {$IFDEF USE_FLAGS} (G2_BeginDestroying in self_.fFlagsG2)
                {$ELSE} self_.fBeginDestroying {$ENDIF}
            and (self_ <> Applet) then
              self_.Free;*)




    (Это WndFunc, а не WndProc, там тоже RefInc/RefDec был добавлен). Основной баг, который я нашел, когда-то багой не был, это была фича с двойным разрушением апплета в TerminateExecution. Ну и плюс в AlignChildrenProc не туда RefDec припечатал как выяснилось. После чего поспешил выложить T+.

    Не верю я, что новые Delphi когда-нибудь будут работать без тормозов в code insight. Когда при наборе кода комп регулярно замирает на несколько секунд, мне это не надо. Я вынужден либо отключать фичу, либо возвращаться к нормальному Delphi с адекватной скоростью реакции.
  • Vladimir Kladov © (25.10.10 16:20) [199]
    Версия 3.00.U на сайте. Проверьте со своим, MTsv DN.
 
Конференция "KOL" » KOL v 3.00 [Delphi, Windows]
Есть новые Нет новых   [134431   +9][b:0.001][p:0.003]