AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Alte Komponente und Delphi 12

Ein Thema von Willie1 · begonnen am 19. Jun 2025 · letzter Beitrag vom 21. Jun 2025
Antwort Antwort
Willie1

Registriert seit: 28. Mai 2008
733 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Alte Komponente und Delphi 12

  Alt 19. Jun 2025, 10:15
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.
Angehängte Dateien
Dateityp: pas Clrgrid.pas (3,3 KB, 31x aufgerufen)
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.710 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Alte Komponente und Delphi 12

  Alt 19. Jun 2025, 11:19
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?
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.433 Beiträge
 
Delphi 12 Athens
 
#3

AW: Alte Komponente und Delphi 12

  Alt 19. Jun 2025, 11:31
Die Doku ist da leider nicht ganz korrekt,
aber im Grunde stimmt sie schon, irgendwie.

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.


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



$RANGECHECKS und $OVERFLOWCHECKS
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (19. Jun 2025 um 12:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.715 Beiträge
 
Delphi 12 Athens
 
#4

AW: Alte Komponente und Delphi 12

  Alt 19. Jun 2025, 12:42
Angesichts des doch recht überschaubaren Codes der Komponente stellt sich die Frage, wo genau die Fehler auftauchen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.710 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Alte Komponente und Delphi 12

  Alt 19. Jun 2025, 14:18
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.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.710 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Alte Komponente und Delphi 12

  Alt 19. Jun 2025, 14:27
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.
Thomas Mueller
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 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