Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Test кода в других версиях delphi. [Delphi, Windows]


RusSun ©   (15.10.18 20:29

Доброе время суток.
Нужен тест кода в других версиях 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]


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

не, с компонентами и прочими тулсапи вообще не дружу, походу МСК в отличии от КОЛа вообще не обновлялось, там еще косяк есть когда в разных формах есть главное меню


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо