Entwickler-Ecke
Multimedia / Grafik - Vollbild in Andorra 2D unter Delphi XE2
Horschdware - Di 25.10.11 21:10
Titel: Vollbild in Andorra 2D unter Delphi XE2
Hallo zusammen,
ich spiele gerade ein wenig mit Delphi XE2 herum und bin auf etwas interessantes gestoßen:
Die Andorra 2D Engine bietet ein paar Nettigkeiten, wie z.B. ein einfaches Einrichten des Vollbildmodus.
Folgendermaßen funktionierte das bisher und ist auch lt. offizieller Doku der Weg zum Ziel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| with AdDraw.Display do begin Width := 800; Height := 600; BitDepth := ad32Bit; DisplayMode := dmFullscreen; end; |
Unter Delphi XE2 bekomme ich aber beim Versuch einen der Werte in "Display" zu setzen den Fehler "Der linken Seite kann nichts zugewiesen werden".
Beim Versuch den Fehler nachzuvollziehen stoße ich in der Unit "AdDraws" auf folgende relevante Zeile:
Delphi-Quelltext
1: 2:
| property Display: TAdDisplay read FDisplay; |
Aha, für die Property "Display" ist nur ein read definiert. TAdDisplay selbst ist ein record.
Die Frage die sich mir nun stellt ist nicht "warum geht das in Delphi XE2 nicht?" sondern
"Warum geht das in anderen Delphi Versionen überhaupt?". Eine property, die nur zum Lesen definiert ist kann merkwürdigerweise in älteren Delphi Versionen auch geschrieben werden.
Kann mir das jemand erklären?
Horschdware - Di 25.10.11 21:44
Danke dir,
an so eine Lösung hatte ich bereits gedacht.
Für mich interessanter ist aber, warum das in älteren Delphi-Versionen so geht und in XE2 eben nicht mehr.
In der DP war dieser Artikel hier verlinkt
http://delphi.about.com/od/adptips2006/qt/record_property.htm.
Der kommt der Sache schon recht nahe (impliziter Aufruf impliziter Getter-Methoden), erklärt aber dennoch nicht, warum das Verhalten in XE2 nun anders ist.
Kha - Di 25.10.11 22:23
Das ist keine Verhaltensänderung, das ist ein Bugfix ;) .
baka0815 - Mi 26.10.11 11:28
Für mich wäre das Verhalten von XE2 hier falsch.
Die Property selbst kann nur gelesen, nicht jedoch neu gesetzt werden. Soweit ok und klar, aber die Eigenschaften der Property bzw. des entsprechenden Records/Objects sollten doch änderbar sein.
Ich darf kein neues Record zuweisen, die Eigenschaften des Record selbst sollten aber weiter änderbar bleiben.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var D: TDisplayRecord; begin D := Andorra.Display; D.Width := 800; D.Height := 600; D.BitDepth := ad32Bit; D.DisplayMode := dmFullscreen; end; |
Das sollte doch funktionieren, oder nicht?
--- edit ---
Habe mir mal den Link angeguckt und da steht:
Zitat: |
Interestingly, the "with" version of the code WILL compile for both the TTestClassB and the TTestClassC:
Delphi-Quelltext 1: 2: 3: 4:
| with testB.InnerRecord do begin Name := 'Delphi'; end; |
|
Das erklärt sich für mich dahingehend, dass er im
with weiß, dass er den Getter() verwenden muss und somit implizit mein Beispiel oben erzeugt. Warum das dann unter XE2 jedoch nicht mehr funktioniert...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!