[Andorra2d] Vollbild in Andorra 2D unter Delphi XE2
spacer
Autor Nachricht
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 724
Erhaltene Danke: 53

Win XP professional, Win 7 Professional x64, Ubuntu
Delphi 5, Delphi 2005 Personal, Delphi 2006, Delphi XE, C++ Builder 5, PHP, SAP R/3
BeitragVerfasst: Di 25.10.11 21:10 
Betrifft: Andorra2d
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:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
    with AdDraw.Display do
begin
Width := 800;
Height := 600;
BitDepth := ad32Bit; //Die Farbtiefe. Hierbei sind die Werte "ad16Bit" und "ad32Bit" erlaubt.
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:

ausblenden Delphi-Quelltext markieren
1:
2:
    {The display settings.}
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?

_________________
Delphi: XE - OS: Windows 7 Professional x64
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 25.10.11 21:32 

_________________
Das Problem liegt üblicherweise zwischen den Ohren
DRY DRY KISS
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Horschdware Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 724
Erhaltene Danke: 53

Win XP professional, Win 7 Professional x64, Ubuntu
Delphi 5, Delphi 2005 Personal, Delphi 2006, Delphi XE, C++ Builder 5, PHP, SAP R/3
BeitragVerfasst: 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 delphi.about.com/od/.../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.

_________________
Delphi: XE - OS: Windows 7 Professional x64
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator
Beiträge: 3722
Erhaltene Danke: 133

Arch Linux, Win 7
F#, C# (VS2010)
BeitragVerfasst: Di 25.10.11 22:23 
Das ist keine Verhaltensänderung, das ist ein Bugfix ;) .

_________________
>λ=

Für diesen Beitrag haben gedankt: Horschdware
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 452
Erhaltene Danke: 10

Win XP, Debian GNU/Linux
Delphi 2007 Enterprise, Java, C#
BeitragVerfasst: 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.

ausblenden Delphi-Quelltext markieren
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:

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
with testB.InnerRecord do //or "testC"
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...
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home