Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Der Linken seiten kann nichts zugewisen werden warum ? (https://www.delphipraxis.net/72939-der-linken-seiten-kann-nichts-zugewisen-werden-warum.html)

mimi 9. Jul 2006 16:02


Der Linken seiten kann nichts zugewisen werden warum ?
 
Hallo,
ich habe da an meinem projekt einen seltsammen fehler den ich nicht ganz verstehe geschweige denn weg machen könnte und zwar bekomme ich immer
"[Fehler] uPaint.pas(93): Der linken Seite kann nichts zugewiesen werden"

hier ist meine qullcode
Delphi-Quellcode:
  tStyle = class

  public
    procedure LoadStyle(FileName:String);
    procedure SaveStyle(FileName:String);
    procedure SetDefault;

  private
    fSize,fFirstPos:TPoint;
    fPen:TPen;
    fBrush:TBrush;
    fObjectTyp:Integer;
    fName:String;
    fVisible:Boolean;

    function GetSize:Tpoint;
    procedure SetSize(Size:Tpoint);
    function GetFirstPos:TPoint;
    procedure SetFirstPos(FirstPos:TPoint);
    procedure SetPen(Pen:TPen);
    function GetPen:TPen;
    function GetBrush:TBrush;
    procedure SetBrush(Brush:TBrush);
    procedure SetObjectTyp(NewTyp:Integer);
    function GetOjectTyp:Integer;
    procedure SetName(NewName:String);
    function GetName:String;
    procedure SetVisible(Visible:Boolean);
    function GetVisible:Boolean;
  published
    property Size:TPoint read GetSize write SetSize;
    property Position:TPoint read GetFirstPos write SetFirstPos;
    property Pen:TPen read GetPen write SetPen;
    property Brush:TBrush read GetBrush write SetBrush;
    property ObjectTyp:Integer read GetOjectTyp write SetObjectTyp;
    property Name:String read GetName write SetName;
    property Visible:Boolean read GetVisible write SetVisible;

  private
  end;
und so nutze ich ihn:
Delphi-Quellcode:
...
  style:=tStyle.Create;
  style.Size.x:=20;style.Size.y:=20;
was mache ich falsch ???
ich hab hier im forum unter der fehlermeldung gesucht aber leider nichts gefunden... und die hilfe ist auch nicht sehr hilfreich für mich.
währe toll wenn jemmand den fehler finden und mir sagen kann was ich falsch gemacht habe.

3_of_8 9. Jul 2006 16:05

Re: Der Linken seiten kann nichts zugewisen werden warum ?
 
Ganz einfach: Das geht nicht. :mrgreen:

Allerdings geht es so:
Delphi-Quellcode:
style:=TStyle.create;
with style.size do
begin
  x=20;
  y=20;
end;
Oder so:
Delphi-Quellcode:
style:=TStyle.create;
style.size:=Point(20, 20);
[edit=SirThornberry]Delphi-Tags ergänzt - Mfg, SirThornberry[/edit]

mimi 9. Jul 2006 16:08

Re: Der Linken seiten kann nichts zugewisen werden warum ?
 
vielen dank für deine schnelle retung, aber warum geht das nicht auf die andere art und weise ???
das verstehe ich nicht...

Christian Seehase 9. Jul 2006 16:10

Re: Der Linken seiten kann nichts zugewisen werden warum ?
 
Moin Michael,

weil die Set-Methode nur eine Wert vom Typ TPoint übergeben kann.
Sprichst Du jetzt nur einen Teil an, so wäre der jeweils andere unbestimmt.

mimi 9. Jul 2006 16:28

Re: Der Linken seiten kann nichts zugewisen werden warum ?
 
naja, wenn das so ist muss ich mich damit zufrieden geben, weil ich habe es immer noch nicht so ganz verstanden....

monta 9. Jul 2006 17:58

Re: Der Linken seiten kann nichts zugewisen werden warum ?
 
Das Problem ist, wie Michael schon geschrieben hat, das der Typ TPoint ja aus zwei Werten, x und y besteht. Wenn du diesem nun nur einen Wert zuweisen willst, ist der zweite Wert nicht belegt und dies verursacht den Fehler. Es werden hat für einen Punkt immer zwei Werte benötigt. :wink:

Hawkeye219 9. Jul 2006 18:17

Re: Der Linken seiten kann nichts zugewisen werden warum ?
 
Zitat:

Zitat von 3_of_8
Allerdings geht es so:
Delphi-Quellcode:
style:=TStyle.create;
with style.size do
begin
  x=20;
  y=20;
end;

Wenn size durch eine Getter-Methode geliefert wird (wie in Michaels Beispiel), dann funktioniert dieser Code nicht! In diesem Fall wird nur eine temporäre TPoint-Variable auf dem Stack verändert.

Gruß Hawkeye

3_of_8 9. Jul 2006 18:20

Re: Der Linken seiten kann nichts zugewisen werden warum ?
 
Ein bisschen unlogisch ist es imho schon.

style.size gibt einen TPoint zurück. (Also genauer gesagt: Einen Pointer auf die Daten eines TPoint)

Wenn ich den Pointer hab, kann ich ihn ja dereferenzieren, die Offsets für die Felder hinzuaddieren und dann einfach mein Wort reinschreiben, oder?

Hawkeye219 9. Jul 2006 18:30

Re: Der Linken seiten kann nichts zugewisen werden warum ?
 
Zitat:

Zitat von 3_of_8
style.size gibt einen TPoint zurück. (Also genauer gesagt: Einen Pointer auf die Daten eines TPoint)

Nicht ganz. Der Pointer wird vom Aufrufer von GetSize bereitgestellt. Die Methode beschreibt nur den Speicherbereich, auf den dieser Zeiger verweist. Und das ist in unserem Fall der lokale Stack...

Gruß Hawkeye

3_of_8 9. Jul 2006 18:33

Re: Der Linken seiten kann nichts zugewisen werden warum ?
 
Ich kenne mich nicht damit aus, wie Delphi records verwaltet. Aber mit Klassen sollte es auf jeden Fall gehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:25 Uhr.
Seite 1 von 2  1 2      

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