Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Selbst Gelöst: Übergabe eines TPictures an class funzt nicht (https://www.delphipraxis.net/151067-selbst-geloest-uebergabe-eines-tpictures-class-funzt-nicht.html)

SimonRap 4. Mai 2010 19:28


Selbst Gelöst: Übergabe eines TPictures an class funzt nicht
 
Hi Leute,
ich hab mir den Kopf zerbrochen, aber ich finde einfach keine Lösung...
Ich habe eine Class:
(alles gekürzt und umbenannt)
Delphi-Quellcode:
type
 Tclass=CLASS
    Img1,Img2,Img3:TPicture;
    Obj:TObject;
    procedure state(n:INTEGER);
    end;
//und die procedure
procedure TClass.state(n:INTEGER);
begin
  case n of
    1:(obj as TImage).Picture:=IMG1;
    2:(obj as TImage).Picture:=IMG2;
    3:(obj as TImage).Picture:=IMG3;
  end;
end;
//und
var xxx:TClass
Ich hab noch 3 TImages, wo win Picture schon drin ist (alle verschiedene bilder) mit den namen z.B. IMG_1,IMG_2,IMG_3...
Und dazu ein leeres TImage: image1 (also leer im sinne von kein image1.picture geladen)
An einer Stelle meines Programmes soll er folgendes tun:
Delphi-Quellcode:
xxx:=TClass.Create;//also das ist eigentlich beim form.create, aber damit ihr wisst, dass es das auch gibt^^
xxx.Img1:=img_1.Picture;
xxx.Img2:=img_2.Picture;
xxx.Img3:=img_3.Picture;
xxx.state(strtoint(edit1.text));
//und noch paar weitere Sachen, aber dazu kommt es eh nicht...
Also:
Als Ergebnis krieg ich immer, dass Image1 kein Bild enthält...
Beim Debuggen merkte ich, dass das Übergeben von img_1 zu xxx.IMG1 schon nicht funktioniert...
Ich finde aber einfach kein Fehler...

kann mir jemand nen Tipp geben, woran das liegen könnte??
MfG Simon

Medium 4. Mai 2010 20:06

Re: Übergabe eines TPictures an class funzt nicht
 
Änderst du an den "img_X" irgendetwas nachdem du deren "Picture" an die "xxx.ImgX" zugewiesen hast? Du übergibst hier nämlich nur Referenzen. Für eine richtige Kopie, die sich nicht mit der Quelle mit ändert, versuche mal:
xxx.Img1.Assign(img_1.Picture);
Ich hoffe TPicture implementiert Assign() :)

SimonRap 4. Mai 2010 21:25

Re: Übergabe eines TPictures an class funzt nicht
 
Aua... Fehler...
http://simonrap.square7.ch/delphi/aua.JPG
Delphi-Quellcode:
type
Tclass=CLASS
    Img1,Img2,Img3:TPicture;
    Obj:TObject;
    procedure state(n:INTEGER);
    end;
...
var
  Form1: TForm1;
var xxx:TClass;
...
procedure TClass.state(n:INTEGER);
begin
  case n of
    1:(obj as TImage).Picture:=IMG1;
    2:(obj as TImage).Picture:=IMG2;
    3:(obj as TImage).Picture:=IMG3;
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
xxx:=TClass.Create;//also das ist eigentlich beim form.create, aber damit ihr wisst, dass es das auch gibt^^
xxx.Img1.Assign(img_1.Picture);//hier meckert er
xxx.Img2.Assign(img_2.Picture);
xxx.Img3.Assign(img_3.Picture);
xxx.state(1);
//und noch paar weitere Sachen, aber dazu kommt es eh nicht...
end;
An img_1 sollte sich was ändern, is aber noch nicht eingebaut^^... also ne
geht das sonst noch irgwndwie anders?

mfg simonrap

[edit] "aua", weil ich die boxen voll aufgedreht hatte... daasss war laut^^[edith]

Flips 4. Mai 2010 21:34

Re: Übergabe eines TPictures an class funzt nicht
 
Also meiner Meinung nach müsstest du erst im constructor von TClass mal die Img's instanzieren.

Delphi-Quellcode:
type
 Tclass=CLASS
    ...
    public
    constructor Create;
    ...
    end;

var
  Form1: TForm1;
var xxx:TClass;
...

constructor TClass.Create;
begin
Img1 := TPicture.Create;
Img2 := TPicture.Create;
Img3 := TPicture.Create;
end;

SimonRap 4. Mai 2010 21:40

Re: Übergabe eines TPictures an class funzt nicht
 
mist mist mist mist...
ne das war es nicht...
ich sollte ihm vielleicht auch sagen, welches TObject denn xxx.Obj ist..
und die erste fehlermeldung hab ich auch falsch interpretiert.
mist, und mir is das nicht aufgefallen grrrrrr :wall: :wall: :wall:
naja danke an alle für die hilfe^^

mfg simon

Flips 4. Mai 2010 21:50

Re: Selbst Gelöst: Übergabe eines TPictures an class funzt n
 
Hmm naja ist ja schön, wenn das Problem gelöst ist, aber wenn ich deinen Code 1:1 kopiere (in der Annahme, dass img_1 - img_3 auf dem Form platzierte TImage-Komponenten sind) bekomme ich genau an der Stelle den Fehler, wo du ihn bekommst.

Wenn ich dann meinen Konstruktor einbaue kommt der Fehler erst beim Aufruf der State-Methode ;-)

[Edit] Wobei die State-Methode auch scheitern müsste, weil du ja auch Obj benutzt obwohl du es nirgendwo erstellst[/Edit]

SimonRap 4. Mai 2010 21:54

Re: Selbst Gelöst: Übergabe eines TPictures an class funzt n
 
ok dann ham wir 2 verschiedene compilierer^^
Ich hab den Code 1:1 (klar, is ja auch meiner^^) übernommen, und es funzt wunderbar
[edit jetzt] sogar ohne mediums vorschlag mit dem assign^^[edit aus]

Flips 4. Mai 2010 21:59

Re: Selbst Gelöst: Übergabe eines TPictures an class funzt n
 
Ich habs mit Delphi 7 gemacht. Und es wundert mich echt.
Ich meine deine Fehlermeldung war eine Zugriffsverletzung die ensteht, wenn man auf ein Objekt zugreift, dass noch nicht erstellt wurde...Komisch.
Naja hauptsache dein Code funktioniert jetzt.

[Edit]
Klar, so wie dus jetzt machst (mit Zuweisung über := statt mit Assign) gehts natürlich. Das steht aber so nicht oben ;-)
[/Edit]


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