![]() |
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. |
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 ![]()
Code:
Das ist doch eher umgekehrt, oder?
Default
For release: {$R+} {$RANGECHECKS ON} For debug: {$R-} {$RANGECHECKS OFF} |
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 |
AW: Alte Komponente und Delphi 12
Angesichts des doch recht überschaubaren Codes der Komponente stellt sich die Frage, wo genau die Fehler auftauchen.
|
AW: Alte Komponente und Delphi 12
Zitat:
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. |
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. |
AW: Alte Komponente und Delphi 12
Delphi-Quellcode:
hier landet der Editor, wenn ich auf Anhalten (ERangeError) klicke Gris.pas CustomGid.Paint
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 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. |
AW: Alte Komponente und Delphi 12
Wie sieht denn der Stacktrace im Fehlerfall aus?
|
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