AGB  ·  Datenschutz  ·  Impressum  







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

Property's "stored" bug...

Ein Thema von BigAl · begonnen am 8. Mär 2021 · letzter Beitrag vom 8. Mär 2021
Antwort Antwort
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
114 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Property's "stored" bug...

  Alt 8. Mär 2021, 14:50
Geht es hier um float-properties? Der bug ist bekannt seit Delphi 1, wurde angemahnt, und kam zurück mit "as designed". Ray Lischner hat eine Lösung gefunden, ich poste hier mal den Teil einer Komponente für Delphi 1, der die Lösung beinhaltet und erklärt. Falls das nicht das Problem ist, nevermind.

Delphi-Quellcode:
...
  protected
  procedure ReadD2WorldXw(Reader: TReader);
  procedure WriteD2WorldXW(Writer: TWriter);
  procedure DefineProperties(Filer: TFiler); override;
 
  published
  property D2WorldXW: extended read xwd2 write setxwd2 stored false;
  {Don't worry about the stored false in all of these. They get stored:
    see override of DefineProperties. The default storing process never
    writes a value 0 of a float property to the dfm-file and the default
    value set in the constructor is used instead. So if that default is
    <>0, a value 0 can never be set. Overriding DefineProperties fixes it
    (workaround by Ray Lischner).
    Stored false is used, so the property is not stored twice. (Thanks to
    Joe Herb for the tip)}


...

procedure TMathImage.ReadD2WorldXW(Reader: TReader);
begin
  xwd2 := Reader.ReadFloat;
end;

procedure TMathImage.WriteD2WorldXW(Writer:TWriter);
begin
  Writer.WriteFloat(xwd2);
end;

procedure TMathImage.DefineProperties(Filer: TFiler);
begin
  inherited DefineProperties(Filer);
  with Filer do
  begin
    DefineProperty('D2WorldXW', ReadD2WorldXW, WriteD2WorldXW, true);
  end;
end;
Renate
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Property's "stored" bug...

  Alt 8. Mär 2021, 15:16
Zitat:
Delphi 1
Damals gab es noch keine Attribute, somit war es standtardmäßig garnicht möglich für Floats einen Default zu definieren.
Seit 12 Jahren ist es aber möglich, womit es keinen Grund mehr gibt, für so einen Bug.

Zitat:
Wenn da "stored False" ist, darf überhaupt nichts gespeichert werden.
Jupp, und auch andersrum, wenn es Stored True ist, dann muß gespeichert werden. (in diesem Fall darf so ein Default niemals diese Angabe überschreiben, was man auch schon seit Delphi 1 hätte reparieren können)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 8. Mär 2021 um 15:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: Property's "stored" bug...

  Alt 8. Mär 2021, 16:04
Seit 12 Jahren ist es aber möglich, womit es keinen Grund mehr gibt, für so einen Bug.
Das ist kein Bug, das ist "Abwärtskompatibilität"
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Property's "stored" bug...

  Alt 8. Mär 2021, 16:23
Jupp, und auch andersrum, wenn es Stored True ist, dann muß gespeichert werden. (in diesem Fall darf so ein Default niemals diese Angabe überschreiben, was man auch schon seit Delphi 1 hätte reparieren können)
Es war vermutlich einfacher die Dokumentation anzupassen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#5

AW: Property's "stored" bug...

  Alt 8. Mär 2021, 19:39
Delphi tut sich ja generell schwer mit Float Properties. Beinhalten einen Property einen Float, dann wird das übergeordnet Property im Objektinspektor generell als "changed" angezeigt. Unabhängig ob tatsächlich was geändert wurde:

2021-03-08 20_27_54-fnmProject - Delphi 10.4 - Main [Built].png

In dem Beispiel ist "AutoColorFactor" ein Single. Der Standardwert ist 1. TPointStyle sollte also nicht fett dargestellt werden...

Ich habe alle Eigenschaften meines aktuellen Projekts soweit möglich als Integer definiert. Auch wenn sie eigentlich als Floats sinnvoller wären. Das Projekt hat etwa 40 spezielle Klassen die von TPersistent abgeleitet und teilweise ziemlich verschachtelt sind. Des weiteren gibt es wieder Ableitungen von den Klassen die im Wesentlichen die Standardwerte neu definieren usw.. Irgendwann hatte ich die Faxen mit den Floats dann Dicke und habe vieles umgestellt. An allen Stellen ist das leider nicht so ohne Weiteres möglich...

Weitere Suchen im Internet haben ergeben, dass es sich tatsächlich um einen sehr alten Bug handelt (und ja, es ist definitiv ein Bug). Auch wenn dieser - wie schon geschrieben - seit langem existiert, sollte man mit diesem ja nicht in alle Ewigkeit leben müssen. Es handelt sich um ein bis zwei zentrale Stellen die korrigiert werden müssten. Bestehende Programm sollten damit eigentlich klarkommen. Embarcadero hat die letzten zwei Updates echt tolles abgeliefert (meine Meinung) und Delphi ist aktuell besser denn je. Es macht wieder richtig Spaß mit der IDE zu arbeiten...

In diesem Sinne

Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)

Geändert von BigAl ( 8. Mär 2021 um 19:47 Uhr)
  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 06:46 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