AGB  ·  Datenschutz  ·  Impressum  







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

Warnung ModalResult und Delphi-Update

Ein Thema von Rainer Wolff · begonnen am 25. Mai 2018 · letzter Beitrag vom 25. Mai 2018
Antwort Antwort
Seite 1 von 2  1 2      
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#1

Warnung ModalResult und Delphi-Update

  Alt 25. Mai 2018, 13:56
Oder Modal-Result und auf die Schnauze fallen.

Zur Warnung an alle unbedarften:

Irgendwo zwischen XE und Berlin wurden die ModalResult-Konstanten teilweise geändert.

In der dfm werden aber keine Konstanten, sondern absolute Zahlen gespeichert. Somit bekommt ein Button, in einer neueren Version geöffnet, plötzlich eine andere Konstante als ModalResult.
Und bei einer Abfrage:

if Form.ShowModal = mrYesToAll then ...

trifft plötzlich die Bedingung nicht mehr zu, da ShowModal immer noch den alten Zahlenwert (hier 10) zurückgibt, mrYesToAll aber mit 14 neu definiert ist.

  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Warnung ModalResult und Delphi-Update

  Alt 25. Mai 2018, 13:57
Bist Du sicher, dass die Quelle der Konstanten identisch ist oder hast Du eine Unit eingebunden, die diese Konstanten ihrerseits auch - und eben anders - definiert?
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Warnung ModalResult und Delphi-Update

  Alt 25. Mai 2018, 14:11
Bist Du sicher, dass die Quelle der Konstanten identisch ist oder hast Du eine Unit eingebunden, die diese Konstanten ihrerseits auch - und eben anders - definiert?
Eigentlich schon. Die Konstanten waren früher in der controls.pas definiert.

Code:
mrOk    = idOk;
mrCancel = idCancel;
etc.
Heute in Controls.pas:

Code:
mrOk    = System.UITypes.mrOk;
etc.
Und in der System.UITypes wurden dann einige Konstanten dazwischengeschoben, so daß z.B. mrYesToAll einen neuen Wert bekommen hat.
Die "simplen" Konstanten, die häufig verwendet werden, haben ihren Wert behalten (mrOk, mrCancel...)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Warnung ModalResult und Delphi-Update

  Alt 25. Mai 2018, 14:18
In dem Fall wäre ein Enum besser, anstatt dem Integer mit den vielen Konstanten, nur das geht nicht, wegen der nutzerdefinierten Buttons, z.B. im TaskDialog.


Aber ein Mapper (IdentToStr/StrToIdent) für die DFM würde Abhilfe schaffen, wie z.B. bei TColor (vor allem in den Property-Editoren), wo der Name und nicht die Zahlen gespeichert werden, falls der Name bekannt ist.

Sowas knallt dann aber auch wieder, wie man wunderschön an den Color-Werten im FMX sah, als dort plötzlich überall der Präfix entfernt wurde und dann die Namen nicht mehr bekannt waren.
(wenn man vergisst für StrToIdent die alten Namen als Alias drin zu lassen)



Oder man macht keine Breaking-Changes und hängt die neuen Werte immer nur hinten an.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (25. Mai 2018 um 14:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Warnung ModalResult und Delphi-Update

  Alt 25. Mai 2018, 14:26
Vcl.StdCtrls.TCustomButton.ModalResult besagt
Zitat:
Changes to ModalResult Values at XE2 Release
The XE2 release introduced three new ModalResult values: mrContinue, mrHelp, and mrTryAgain.

In addition, four of the existing ModalResult values changed at XE2. If your applications use any of the following four ModalResult values for TButton, you need to make code changes: mrClose, mrAll, mrNoToAll and mrYesToAll. Since these values are stored as numbers in .dfm files, the values change when you migrate a project to XE2. The values have changed as follows:

Before XE2:
mrClose=11
mrAll=8
mrNoToAll=9
mrYesToAll=10
In XE2:
mrClose=8
mrAll=12
mrNoToAll=13
mrYesToAll=14
The following table lists the constants of type TModalResult that are defined for the ModalResult property, along with their values in the XE2 release and XE release (that is, any release before XE2):
Ausführlicher gehts im Link weiter.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Warnung ModalResult und Delphi-Update

  Alt 25. Mai 2018, 15:04
Autsch, das
Zitat:
In addition, four of the existing ModalResult values changed at XE2.
ist aber böse. Wer rechnet denn mit so was?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Warnung ModalResult und Delphi-Update

  Alt 25. Mai 2018, 15:13
Der, welcher immer die What's New komplett durchliest?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Warnung ModalResult und Delphi-Update

  Alt 25. Mai 2018, 15:29
Ich habe da eben mal ein Paar Varianten durchgespielt.

Ausgangsquelle ein Delphi 2009 Source mit alten Button-Codes.

Normal-Fall: 1x dpr, 1x pas, 1x form = Tokyo wandelt alles brav um
Steigerungs-Fall: 1x dpr, Xx pas, Xx form (stehen in .dpr) = Tokyo wandelt alles brav um
Fehler-Fall: 1x dpr, Xx pas, Xx form (per runtime) = Tokyo wandelt nur Hauptformulare um = Buttons sind nicht mehr gut drauf.
Genereller Fehler: Alte dll die auf neuen Code hören soll, da hilft nur dll recompilieren.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Warnung ModalResult und Delphi-Update

  Alt 25. Mai 2018, 15:31
Wie viel hundert Bildschirmseiten müsste ich mir denn dann durchlesen, wenn ich jetzt von meinem aktuelle BDS2006 auf ein aktuelles Delphi umsteige? Alte Zöpfe abschneiden, kann durchaus sinnvoll sein, aber das? Konstanten heißen ja nicht umsonst Konstanten.

Zitat:
Normal-Fall: 1x dpr, 1x pas, 1x form = Tokyo wandelt alles brav um
Aaaaah. Jetzt erscheint es in einem etwas anderen Licht. Scheint nur nicht ganz fehlerfrei zu funktionieren.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Warnung ModalResult und Delphi-Update

  Alt 25. Mai 2018, 16:11
Hallo Luckie!
Es geht nicht um Deine Units und deren Code, es sei denn der ist Hardcoded.
Es geht um die .frm Dateien die einen Dezimalwert für Buttons nutzen.
Ich testete wie gut Tokyo die alten Nummern umwandelt.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz