Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   "Der linken Seite kann nichts zugwiesen werden." (https://www.delphipraxis.net/146600-der-linken-seite-kann-nichts-zugwiesen-werden.html)

Webo 23. Jan 2010 13:56


"Der linken Seite kann nichts zugwiesen werden."
 
Schönen guten Nachmittag,

ich wollte mich mal ein wenig mit Grafik und Andorra 2D beschäftigen. Um mal einen allgemeinen Einblick zu erhalten, wollte ich erstmal die Beispielprojekte durchgehen, aber leider scheitert es da beim Compilieren. Soweit sind alle benötigten Units vorhanden (davon gehe ich zumindestens aus).

Bei folgendem Punkt erscheint die Fehlermeldung (siehe Topic-Name) (ich habe die Bounce-Demo grade gehabt, ist aber auch bei anderen der Demos so)
Delphi-Quellcode:
with FDraw.Display do
        DisplayMode := dmWindowed;
Die Fehlermeldung besagt ja eigentlich, dass die linke Seite überhaupt gar nicht dafür gedacht ist, ihr etwas zuzuweisen, wie etwa
Delphi-Quellcode:
(9 div 10) := b;
.
Nur verstehe ich nicht, warum er jetzt meckert, es sind ja nicht meine Codezeilen und eigentlich laufen sie (sonst würde es ja die Demo nicht als .exe geben) ?! Der Fehler tritt in der AdSetupDlg auf ...
Ich nutze im Moment Delphi 2010 Pro, welches ich grade noch mal auf den neusten Stand gepatcht habe. Mit einem anderen Delphi kann ich es grade nicht testen, weil ich zur Zeit keinen Zugriff auf meinen Desktop-PC habe.

Wäre schön, wenn mir jemand weiterhelfen könnte.


MfG

Webo

Edit: CP

Uwe Raabe 23. Jan 2010 16:29

Re: "Der linken Seite kann nichts zugwiesen werden.&
 
Unter D2010 kann man den Feldern eines Record-Properties nichts mehr zuweisen. Man muss dazu eine temporäre Record-Variable bemühen.

Webo 23. Jan 2010 17:11

Re: "Der linken Seite kann nichts zugwiesen werden.&
 
Könntest du mir dazu vllt ein kleines Beispiel geben, wie du das meinst ?

wicht 23. Jan 2010 17:44

Re: "Der linken Seite kann nichts zugwiesen werden.&
 
Ich schätze, das müsste nach Uwe so sein, mein Source ist absolut ungetestet:

Delphi-Quellcode:
var
  TempDisplay: TAdDisplay; // kA ob der Name des Typs so TAdDisplay ist und ob es wirklich ein Record ist
begin
  TempDisplay := FDraw.Display;
  TempDisplay.DisplayMode := dmWindowed;
  // alles andere setzen
  FDraw.Display := TempDisplay;
end;
HTH

Neutral General 23. Jan 2010 17:51

Re: "Der linken Seite kann nichts zugwiesen werden.&
 
Würde überlegen ob du nicht ggf. besser eine Klasse benutzt.
Und noch eine Anmerkung: Das ist nicht erst seit Delphi2010 so. Das war schon immer so ;)

SirThornberry 23. Jan 2010 17:52

Re: "Der linken Seite kann nichts zugwiesen werden.&
 
das ganze ist nicht erst seit Delphi6 so. Auch im BDS2006 war das schon so und ich meine mich erinnern zu können das es auch unter Delphi7 bereits so war.
[Edit]
Ich würde sogar behaupten das es in allen zukünftigen Versionen so sein wird da es gar keine andere Vernünftige Variante gibt sobald eine Get- und Set-Methode für das Property existiert.
Denn wenn man Object.RecordProperty.Value setzt wird ja indirekt folgendes aufgerufen
Delphi-Quellcode:
Object.GetRecordProperty().value = neue Wert
Und das macht einfach keinen Sinn weil der neu gesetzte Wert nicht verwendet werden würde.

Webo 23. Jan 2010 17:53

Re: "Der linken Seite kann nichts zugwiesen werden.&
 
Mmh, jetzt habe auch ich verstanden, was grade gemeint war ...
Nur versteh ich nich, warum man erst wieder den Umweg über was temporäres machen muss, wenn man es doch auch direkt machen könnte (?)

@ wicht : Funktioniert leider nicht ganz so, wie es soll, zum Schluss bei
Delphi-Quellcode:
FDraw.Display := TempDisplay;
kommt :
Zitat:

[DCC Fehler] AdSetupDlg.pas(796): E2129 Einer Nur-Lesen Eigenschaft kann kein Wert zugewiesen werden

himitsu 23. Jan 2010 18:23

Re: "Der linken Seite kann nichts zugwiesen werden.&
 
für .Display gibt es wohl einfach keinen Setter und somit geht es nicht, da es eben nur ein READONLY-Property ist.

Webo 25. Jan 2010 16:29

Re: "Der linken Seite kann nichts zugwiesen werden.&
 
Und, kann man da jetzt irgendwas machen, um das so ans Laufen zu bringen (außer den entsprechenden Teil auszuklammern, denn dann funktioniert es, man kann halt nur nich mehr einstellen, wie sich das Fenster verhalten soll) ?

himitsu 25. Jan 2010 16:49

Re: "Der linken Seite kann nichts zugwiesen werden.&
 
Ja, indem man diesem Property innerhalb der Klasse oder einem Nachfahren einen Setter verpaßt.
Code:
property DisplayMode ... [b]write ...[/b];

uligerhardt 25. Jan 2010 18:11

Re: "Der linken Seite kann nichts zugwiesen werden.&
 
Das ist tatsächlich neu in D2010 - siehe hier. Dass es vorher ging, wenn man mit "with" rumgetrickst hat, war ein Fehler des Compilers.

Uli.

Webo 11. Feb 2010 13:55

Re: "Der linken Seite kann nichts zugwiesen werden.&
 
Also, das Problem hab ich wohl verstanden, aber ich stehe vor dem Problem, dass ich nicht weiss, wo genau ich denn einen Setter setzen muss ?!

Zu meiner Vorgehensweise: Ich bin an der Stelle, wo der Fehler kommt, also
Delphi-Quellcode:
with FDraw.Display do
        DisplayMode := dmWindowed;
zu DisplayMode "gesprungen", also Strg+LinkeMaustaste drauf. Dann bin ich bei
Delphi-Quellcode:
DisplayMode: TAdWindowDisplayMode
gelandet. Das ist ja direkt in TAdDisplay, was aber ein Record ist. Aus DisplayMode habe ich dann
Delphi-Quellcode:
FDisplayMode : TAdWindowDisplayMode;
    property DisplayMode: TAdWindowDisplayMode read FDisplayMode write FDisplayMode;
gemacht. Das ändert aber am Ganzen nix. Da ich mit properties und read write noch nicht allzu viel am Hut hatte, mich aber ein wenig eingelesen hab, verstehe ich nicht richtig, wo genau denn dieser Setter hin muss.
Wenn mir das einer von Euch noch einmal erklären könnte (muss nicht direkt an diesem Beispiel sein, ich will ja nicht unbedingt alles nur abtippen, sondern es kapieren), das wäre lieb.


MfG

Webo

DeddyH 11. Feb 2010 14:00

Re: "Der linken Seite kann nichts zugwiesen werden.&
 
Delphi-Quellcode:
type
  TWuppdi = class
  private
    FFeld: TDatentyp;
    procedure Setter(const value: TDatentyp);
    function Getter: TDatentyp;
  public
    property Feld: TDatentyp read Getter write Setter;
  end;

procedure TWuppdi.Setter(const value: TDatentyp);
begin
  FFeld := value;
end;

function TWuppdi.Getter: TDatentyp;
begin
  Result := FFeld;
end;

Webo 11. Feb 2010 14:41

Re: "Der linken Seite kann nichts zugwiesen werden.&
 
*DeddyH symbolisch umarm* ;-)

Gelesen, verstanden und erfolgreich angewendet !


Vielen Dank an alle, die mir geholfen haben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 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