Конференция "KOL" » Test кода в других версиях delphi. [Delphi, Windows]
 
  • RusSun © (15.10.18 20:29) [0]
    Доброе время суток.
    Нужен тест кода в других версиях delphi.

    {$DEFINE _D2006orHigher}
    {$DEFINE _D2007orHigher}
    {$DEFINE _D2009orHigher}
    {$DEFINE _D2010orHigher}
    {$DEFINE _DXE}
    {$DEFINE _DXEorHigher}
    {$DEFINE _DXE2orHigher}
     orHigher


    Вопрос:
    "Хотел бы узнать на практике встречается еще у кого вариант №2?"

    У меня только D7 и Dlite - Borland® Delphi® for Microsoft® Windows™ Version 10.0.2166.28377
    Update 1 Copyright © 2005 Borland® Software Corporation. All Rights
    Reserved.

    В D7 работает нормально.
    Выглядит так
    Вариант №1
    https://yadi.sk/i/LxWIqIRENV1PFg

    Второй откомпилирован в Dlite
    Вариант №2
    https://yadi.sk/i/yzsC23LgKOPeGA
    Не рабочий.

    Код немного изменен Msg: tagMSG -> Msg: KOL.TMsg;
    На явное указание иначе будет из Windows tagMSG тянуть.

    В обоих случаях компиляции код один и тот же.
    Только вот результат разный.

    Спасибо.


    program Test;

    uses
    KOL,
     Unit1 in 'Unit1.pas' {Form1};
    begin
    NewForm1(Form1, nil);
    Run(Form1.Form);
    end.



    { KOL MCK } // Do not remove this line!
    {$DEFINE KOL_MCK}
    unit Unit1;

    interface

    uses KOL, Messages,Windows;
    //type  TOnEvent = procedure( Sender: PObj )of object;
    type
     PForm1 = ^TForm1;
     TForm1 = object(TObj)
       Form: PControl;
       ListView1:PControl;
       Button1:PControl;
       //KOLProject1: TKOLProject;
       //KOLForm1: TKOLForm;
       //ListView1: TKOLListView;
       //Button1: TKOLButton;
       procedure KOLForm1FormCreate(Sender: PObj);
       function ListView1LVCustomDraw(Sender: PControl; DC: HDC;
         Stage: Cardinal; ItemIdx, SubItemIdx: Integer; const Rect: TRect;
         ItemState: TDrawState; var TextColor, BackColor: Integer): Cardinal;
       function KOLForm1Message(var Msg: KOL.TMsg; var Rslt: Integer): Boolean;
       function ListView1Message(var Msg: KOL.TMsg; var Rslt: Integer): Boolean;
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     Form1: PForm1;

    {$IFDEF KOL_MCK}
    procedure NewForm1( var Result: PForm1; AParent: PControl );
    {$ENDIF}

    implementation

    procedure NewForm1( var Result: PForm1; AParent: PControl );
    begin
    {$IFDEF KOLCLASSES}
     Result := PForm1.Create;
     {$ELSE OBJECTS}
     New( Result, Create );
     {$ENDIF KOL CLASSES/OBJECTS}
     Result.Form := NewForm( AParent, 'Form1' );
     Applet :=  Result.Form;
     Result.Form.Add2AutoFree( Result );
    {$IFDEF UNICODE_CTRLS}
        Result.Form.SetUnicode(TRUE);
    {$ENDIF UNICODE_CTRLS}
      {$IFDEF USE_NAMES}
       Result.Form.SetName( Applet, 'Form1' );
      {$ENDIF}
       Result.Form.Border := 8;
         //Result.Form.OnMessage := TonMessage(MakeMethod(nil,@KOLForm1Message));
         Result.Form.OnMessage := Result.KOLForm1Message;
       // Result.ListView1.TabOrder = 0
       Result.ListView1 := NewListView( Result.Form, lvsDetail, [ lvoMultiselect, lvoRowSelect, lvoOwnerData, lvoOwnerDrawFixed ], nil, nil, nil ).SetAlign ( caClient );
      {$IFDEF USE_NAMES}
       Result.ListView1.SetName( Result.Form, 'ListView1' );
      {$ENDIF}
      {$IFDEF UNICODE_CTRLS}
       Result.ListView1.SetUnicode(TRUE);
      {$ENDIF UNICODE_CTRLS}
       Result.ListView1.Color := clWindow;
       Result.ListView1.LVColAdd( 'Column0', taLeft, 150);
       Result.ListView1.LVColAdd( 'Column1', taLeft, 150);
       Result.ListView1.LVColAdd( 'Column2', taLeft, 150);
       // Result.Button1.TabOrder = 1
       Result.Button1 := NewButton( Result.Form, 'Button1' ).SetAlign ( caBottom );
      {$IFDEF USE_NAMES}
       Result.Button1.SetName( Result.Form, 'Button1' );
      {$ENDIF}
      {$IFDEF UNICODE_CTRLS}
       Result.Button1.SetUnicode(TRUE);
      {$ENDIF UNICODE_CTRLS}
         Result.ListView1.OnMessage := Result.ListView1Message;
         Result.ListView1.OnLVCustomDraw := Result.ListView1LVCustomDraw;
       Result.KOLForm1FormCreate( Result );

    end;

    procedure TForm1.KOLForm1FormCreate(Sender: PObj);
    begin

     ListView1.LVItemAdd( 'Item0.0' );
     ListView1.LVItems[0,1]:='Item0.1';
     ListView1.LVItems[0,2]:='Item0.2';

     ListView1.LVItemAdd( 'Item1.0' );
     ListView1.LVItems[1,1]:='Item1.1';
     ListView1.LVItems[1,2]:='Item1.2';

     ListView1.LVCount := 2;
    end;

    function TForm1.ListView1LVCustomDraw(Sender: PControl; DC: HDC;
     Stage: Cardinal; ItemIdx, SubItemIdx: Integer; const Rect: TRect;
     ItemState: TDrawState; var TextColor, BackColor: Integer): Cardinal;
    var Txt: String;
       R, R1: TRect;

       procedure ProvideColors;
       begin
         if odsSelected in ItemState then
         begin
           if Sender.Focused then
           begin
             Sender.Canvas.Brush.Color := clNavy;
             Sender.Canvas.Font.Color := clYellow;
           end
             else
           begin
             Sender.Canvas.Brush.Color := Color2RGB( clBtnFace );
             Sender.Canvas.Font.Color := clRed;
           end;
         end
           else
         begin
           Sender.Canvas.Brush.Color := clWindow;
           Sender.Canvas.Font.Color := clBlue;
         end;
         Sender.Canvas.DeselectHandles;
       end;

    var i, j: Integer;
    begin
     if LongBool(Stage = (CDDS_PREPAINT or CDDS_SUBITEM)) and (ItemIdx >= 0) then
     begin
         Result := CDRF_SKIPDEFAULT;
         R := Sender.LVItemRect( ItemIdx, lvipBounds );
         if R.Bottom < 0 then Exit;
         for i := 0 to ListView1.LVColCount-1 do
         begin
           R1 := R;
           for j := 0 to i-1 do
             inc( R1.Left, Sender.LVColWidth[ j ] );
           R1.Right := R1.Left + Sender.LVColWidth[ i ];
           Txt := 'Item' + Int2Str( ItemIdx ) + '.' + Int2Str( i );
           ProvideColors;
           Sender.Canvas.TextRect( R1, R1.Left, R1.Top, Txt );
         end;
         Sender.Canvas.Brush.Color := clWindow;
         Sender.Canvas.Font.Color := clWindowText;
     end
       else
       Result := CDRF_NOTIFYITEMDRAW;
    end;

    function TForm1.KOLForm1Message(var Msg: KOL.TMsg; var Rslt: Integer): Boolean;
    begin
     Result := FALSE;
      if (Msg.message = WM_LBUTTONDOWN) and (Msg.hwnd = Form.Handle) then begin
        form.Perform(WM_NCLBUTTONDOWN, HTCAPTION, Msg.lParam);
        Result:= True;
      end;
    end;

    function TForm1.ListView1Message(var Msg: KOL.TMsg;
     var Rslt: Integer): Boolean;
    var NMHdr: PNMHdr;
    begin
     Result := FALSE;
     CASE Msg.message OF
     WM_NOTIFY:
       begin
         NMHdr := Pointer( Msg.lParam );
         if NMHdr.code = NM_CUSTOMDRAW then
         begin
           Rslt := CDRF_DODEFAULT;
           Result := TRUE;
         end;
       end;
     END;
    end;

    end.

  • QAZ © (16.10.18 19:40) [1]
    проект то с формой скинь емое
  • QAZ © (16.10.18 19:41) [2]
    и кол свой
  • RusSun © (16.10.18 20:49) [3]
    Test D7.exe
    Test Dlite.exe
    +Code
    https://yadi.sk/d/sywkGywFqL7KPw

    QAZ ©   (16.10.18 19:41) [2]
    -> брал эдесь
    KOL с офф. сайта
    http://kolmck.000webhostapp.com/kol323.zip
    Архив то, что у меня
    https://yadi.sk/d/EdKqC7FQFLx2tA
  • QAZ © (16.10.18 21:02) [4]
    ну у тебя в принципе сам проект не по ГОСТу кола сделан
    под дебагом еще и рунтайм при закрытии
    остальное завтра
  • QAZ © (17.10.18 09:29) [5]
    2007 не пашет
    2009 не пашет
    ХЕ2  не пашет
    под токио кол вообще не заточен, куча несростов
  • RusSun © (19.10.18 18:28) [6]
    to QAZ Спасибо, подтвердил подозрения)
    Проверил в D5 работает.
  • DKOL (20.10.18 08:58) [7]
    Странно, что этот код работает на D5.. Если внести такую правку
    if LongBool(Stage = {(CDDS_PREPAINT or CDDS_SUBITEM)}CDDS_ITEMPREPAINT) and (ItemIdx >= 0) then



    то вместе с kol.svn в 2006 работает, да и на версиях выше думаю отработает нормально.
  • QAZ © (20.10.18 09:42) [8]

    > DKOL   (20.10.18 08:58) [7]

    2007 пашет
    2009 пашет
    ХЕ2  пашет
  • QAZ © (20.10.18 09:50) [9]

    > QAZ ©   (20.10.18 09:42) [8]

    а в 7ке уже не пашет :)
  • QAZ © (20.10.18 10:15) [10]
    кстати увидел косяк МСК
    в радстудиях не генерируются инки модулей типа unit1_1.inc приходится делать интерфейс в 7ке а потом только юзать большие версии
  • RusSun © (24.10.18 05:56) [11]
    Т.вВер.д. Тест в версиях дельфи
    при условии: “Что это - необходимо”.

    Р.К. рабочий код, до тестов может быть только в пределах данной ОС, обновлений ОС, среды разработки, KOL – версии библиотеки, актуальной на момент написания кода и других плюшек, например: использование манифеста.
    Т.Р.К. тест работоспособного кода.
    Почему –“ работоспособного?” Так как не давно нашелся случай когда рабочий код (без правки) переставал корректно исполняться в следующих версиях дельфи.
    К.Р.Д.(…) – Код рабочего диапазона (D..D5, D7, D10..2007, 2009, ХЕ2 и так далее) список можно расширить/исключить.
    М.П.К (количество строк). – (мин/мах) правка кода до возвращения в рабочее состояние рабочего кода.
  • DKOL (26.10.18 13:18) [12]

    > в радстудиях не генерируются инки модулей типа unit1_1.inc
    > приходится делать интерфейс в 7ке а потом только юзать большие
    > версии


    Если есть исправление - добавлю на свн


    > RusSun


    Лучше разобраться с кодом, почему такое странное поведение в разных версиях компилятора, какое то объяснение должно быть
  • QAZ © (27.10.18 17:23) [13]

    > Если есть исправление - добавлю на свн

    не, с компонентами и прочими тулсапи вообще не дружу, походу МСК в отличии от КОЛа вообще не обновлялось, там еще косяк есть когда в разных формах есть главное меню
 
Конференция "KOL" » Test кода в других версиях delphi. [Delphi, Windows]
Есть новые Нет новых   [134427   +26][b:0][p:0.006]