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
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, 12: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, 12: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, 13: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.342 Beiträge
 
Delphi 12 Athens
 
#4

AW: Warnung ModalResult und Delphi-Update

  Alt 25. Mai 2018, 13: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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (25. Mai 2018 um 13: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, 13: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, 14: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
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 07:14 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