Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Alte Komponente und Delphi 12 (https://www.delphipraxis.net/217375-alte-komponente-und-delphi-12-a.html)

Willie1 19. Jun 2025 10:15

Alte Komponente und Delphi 12
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Community,

diese uralte Komponente scheint mit Delphi 12 inkompatibel. Es crasht überall mit ERangeError. Die Funktionalität der Komponente ist sehr klein. Könnt ihr euch sie mal ansehen. Vielleicht kann ich sie rauswerfen. Leider benutze ich sie in meinem Projekt intensiv.

Schade bis Delphi 10 gab es keine Probleme. Delphi 6,7,2005,2006, Delphi 10. Jetzt geht es nicht mehr!

Gruß Willie.

dummzeuch 19. Jun 2025 11:19

AW: Alte Komponente und Delphi 12
 
Range checking abschalten und testen, ob sie dann funktioniert (Range checking war per default aus in älteren Delphi-Versionen). Wenn ja, kannst du das Ausschalten per {$R-} bzw. {$RANGECHECKS OFF} Compiler Switch auf die Unit(s) der Komponente beschränken.

Hm, wo ich gerade die OLH lese:

Code:
Default
For release: {$R+} {$RANGECHECKS ON}
For debug: {$R-} {$RANGECHECKS OFF}
Das ist doch eher umgekehrt, oder?

himitsu 19. Jun 2025 11:31

AW: Alte Komponente und Delphi 12
 
Die Doku ist da leider nicht ganz korrekt,
aber im Grunde stimmt sie schon, irgendwie. :stupid:

In Bezug auf den Compiler ist das per Default ausgeschaltet,
aber in Bezug auf die Projektoptionen (DPROJ), da war es bis vor Kurzem aus, aber nun ist es in der DEBUG-Config per Default aktiv.

Also, wenn man mit dem DCC eine PAS oder die DPR kompiliert, dann ist es aus,
aber via MSBuild oder im InlineCompiler die Debug-Config der DPROJ kompiliert, da ist das nun aktiv. :angle:


[edit] OHHH, hat da etwa jemand meinen Bugreport nach Ewigkeiten mal bearbeitet
und die Hilfe dann falsch berichtigt? :freak:



$RANGECHECKS und $OVERFLOWCHECKS

Uwe Raabe 19. Jun 2025 12:42

AW: Alte Komponente und Delphi 12
 
Angesichts des doch recht überschaubaren Codes der Komponente stellt sich die Frage, wo genau die Fehler auftauchen.

dummzeuch 19. Jun 2025 14:18

AW: Alte Komponente und Delphi 12
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1549540)
Angesichts des doch recht überschaubaren Codes der Komponente stellt sich die Frage, wo genau die Fehler auftauchen.

Gute Frage. Ich hatte mir den Sourcecode gar nicht angeschaut. Das sind ja gerade mal 100 Zeilen und davon sind auch noch 60 Zeilen Kommentare.

Zumindest, wenn man die Komponente zur Laufzeit erzeugt, funktioniert sie:

Leeres Formular plus folgender Code:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows,
  Winapi.Messages,
  System.SysUtils,
  System.Variants,
  System.Classes,
  Vcl.Graphics,
  Vcl.Controls,
  Vcl.Forms,
  Vcl.Dialogs,
  Vcl.Grids,
  clrgrid;

type
  TForm1 = class(TForm)
  private
    sg_Main: TColorStringGrid;
    procedure HandleOnGetCellColor(Sender: TObject; ARow, ACol: Longint;
      AState: TGridDrawState;
      ABrush: TBrush; AFont: TFont);
  public
    constructor Create(_Owner: TComponent); override;

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

constructor TForm1.Create(_Owner: TComponent);
begin
  inherited;

  sg_Main := TColorStringGrid.Create(Self);
  sg_Main.Name := 'sg_Main';
  sg_Main.Parent := Self;
  sg_Main.Left := 72;
  sg_Main.Top := 64;
  sg_Main.Width := 320;
  sg_Main.Height := 120;
  sg_Main.TabOrder := 0;
  sg_Main.OnGetCellColor := HandleOnGetCellColor;
end;

procedure TForm1.HandleOnGetCellColor(Sender: TObject; ARow, ACol: Longint; AState: TGridDrawState;
  ABrush: TBrush; AFont: TFont);
begin
  if ARow mod 2 = 0 then
    ABrush.Color := clred
  else
    ABrush.Color := clblue;
end;

end.

dummzeuch 19. Jun 2025 14:27

AW: Alte Komponente und Delphi 12
 
Komisch. Ich habe die Komponente gerade in ein neues Package gepackt, dieses compiliert und registriert, dann ein neues VCL Projekt erzeugt und auf das Form dann eine Instanz dieser Komponente gedropt. Dann den OnGridGetCellColor Event zugewiesen, compiliert und dann gestartet. Kein Problem.

Vermutlich ist gar nicht die Komponente das Problem sondern die neue Voreinstellung von Delphi 12 für Range Checks, mit denen die existierenden Projekte nicht klar kommen.

Willie1 19. Jun 2025 16:10

AW: Alte Komponente und Delphi 12
 
Delphi-Quellcode:
            DrawCell(CurCol, CurRow, AWhere, DrawState);// --->
            if DefaultDrawing and (gdFixed in DrawState) and Ctl3D and
              ((FrameFlags1 or FrameFlags2) <> 0) and
              (FInternalDrawingStyle = gdsClassic) and not (gdPressed in DrawState) then
hier landet der Editor, wenn ich auf Anhalten (ERangeError) klicke Gris.pas CustomGid.Paint


Ich habe die Komponente an zwei Stellen verbaut und nachdem ich im Quelltext der Units {$R-} eingetragen habe, läuft es. Wie gesagt, der Fehler ist mir nie aufgefallen. Ich habe auch ein Testprogramm für mein Package geschrieben und da kam der Fehler nicht vor. Ich habe im Projekt aber viele Felder programmgesteuert eingefärbt. >100 mal.

Willie.

jaenicke 19. Jun 2025 16:55

AW: Alte Komponente und Delphi 12
 
Wie sieht denn der Stacktrace im Fehlerfall aus?

Willie1 21. Jun 2025 17:54

AW: Alte Komponente und Delphi 12
 
Hallo,

ich habe durch eure Hilfe eine Lösung gefunden. Es hat 17 Jahre funktioniert. Mein Programm ist ein Fußball-Statistik Programm und keine Software zum Steuern eines Flugzeugs. Bei letzterem würde ich diesen Fehler nicht akzeptieren.

Willie.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz