Autor Beitrag
Beliar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Do 04.03.04 18:10 
Hi,
Folgendes Problem: Ich lade aus einer bmp-Datei ein image:
ausblenden Delphi-Quelltext
1:
kugel[bildnummer].Picture.loadfromfile('.\GBall.bmp');					

Nun will ich diese befehlszeile in eine if-bedingung einbetten, die abfragt, ob kugel[bildnummer] nicht schon die quelle '.\GBall.bmp' benutzt. Ich hab mir das so gedacht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if kugel[bildnummer].picture<>'GBall.bmp' then 
begin
 kugel[bildnummer].Picture.loadfromfile('.\GBall.bmp');
end;

Bei meiner if-bedingung meckert aber der Compiler, dass TImage und String inkompatible Typen sind. Glaub ich gern, aber wie geht es denn dann?

Danke für eure Hilfe

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Do 04.03.04 18:31 
Beliar hat folgendes geschrieben:
Hi,
Folgendes Problem: Ich lade aus einer bmp-Datei ein image:


Wenn's nur darum geht, festzustellen, ob der Dateiname bereits für ein Image verwendet wurde, könntest du doch einfach die Eigenschaft Hint verwenden, wenn du Hint nicht anderweitig brauchst. Setzte dann einfach ".ShowHint := False":
ausblenden Delphi-Quelltext
1:
2:
kugel[bildnummer].Picture.loadfromfile('C:\GBall.bmp');
kugel[bildnummer].Hint := 'C:\GBall.bmp';


ausblenden Delphi-Quelltext
1:
2:
3:
4:
if not (kugel[bildnummer].Hint = 'C:\GBall.bmp') then 
begin
 kugel[bildnummer].Picture.loadfromfile('.\GBall.bmp');
end;


Müsste eigentlich gehen!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Beliar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Do 04.03.04 19:04 
Hmmm hatte auch schon auf hint und showhint geschielt, wusste nur nicht wozu die da sind. Deine Lösung funzt ohne Probleme - Danke :D
Aber geht das nicht auch ein bisschen... "professioneller"? 8)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 04.03.04 19:13 
Hallo!

Werden noch andere Bilder geladen oder ist GBall.bmp das einzige. Sprich: Ist die Frage, ob GBall.bmp geladen wurde oder reicht es zu wissen, ob überhaupt etwas geladen wurde?

MfG
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
catweasel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: Do 04.03.04 19:18 
Zitat:
Aber geht das nicht auch ein bisschen... "professioneller"?

Klar.
Eine Image Klasse um ein Feld mit dem Dateinamen des geladenen Bildes erweitern....


so auf die Schnelle:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
TMyImage = class(TImage);
 private
   bildname : string;
 public
   function getbildname : string;
   procedure loadfromfile(filename:TFilename):reintroduce;
end;


TMyImage.loadfromfile(filename:TFilename);
begin
inherited loadfromfile(filename);
bildname := filename;
end;



Catweasel

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Do 04.03.04 19:32 
Zitat:
Eine Image Klasse um ein Feld mit dem Dateinamen des geladenen Bildes erweitern....


Das ist zweifellos professioneller, aber auch aufwendiger. Warum eigentlich nicht mit Hint? Ich benutze Hint öfter - es ist einem Objekt eindeutig zugeordnet, jederzeit verfügbar und ich muss es nicht erst programmieren!

Ich gebe allerdings zu: Wirklich elegant ist meine Methode nur, wenn man die Eigenschaft Hint auch noch für andere Zwecke im Programm benötigt!

Ist denn meine Methode so grundsätzlich falsch?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Beliar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Do 04.03.04 21:52 
Nö ist sie nicht. Aber dabei wird halt eine Funktion von Delphi zweckentfremdet, was nicht immer toll aussieht. Catweasels Lösung muss ich erst noch verstehen. Und an Peter: GBall ist nicht die einzige Quelle.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 04.03.04 22:11 
Hallo!

Tja, eine elegante Lösung kann ich dann auch nicht anbieten. Höchstens eine Stringlist privat in der entsprechenden Form deklariert und darin für jede Bildnummer die entsprechende Datei gespeichert. Aber toll ist das auch nicht. :?

Eigentlich finde ich catweasels Lösung nicht schlecht. Nur dass man vielleicht mit einer Property arbeiten sollte.

MfG
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".