Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Dynamisches Einbinden mehrerer Bilder in einem Image


compiler93 - Sa 11.02.12 15:09
Titel: Dynamisches Einbinden mehrerer Bilder in einem Image
Hey,
ich will ein Programm erstellen, das mehrere Bilder in ein Image lädt, ungefähr wie ein Dia-Projektor, aber ich weiß nicht mehr wie genau ich die Bilder ins Image reinlade. Laut meinen Lehrer warens drei Schritte, mir fallen aber nur die ersten beiden ein, und den Lehrer kann ich nicht fragen, da er länger Krank ist und die Datei mit den Anweisungen nicht hochgeladen hat.
Die ersten beiden Schritte müssten die hier gewesen sein (ich kann mich auch irren!):


Delphi-Quelltext
1:
2:
Image1.Canvas.Create;
Image1.Picture.LoadFromFile('1.png');


Schonmal vielen Dank :wink:


Moderiert von user profile iconMartok: Quote- durch Delphi-Tags ersetzt


Delete - Sa 11.02.12 15:12

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Was passiert denn, wenn du diesen Code ausführst?


compiler93 - Sa 11.02.12 15:16

es kommt nur ne Fehlermeldung: "unbekannte Bilderweiterung"...

egal welche erweiterung ich einbinde, *.bmb, *.gif, *.png, ... nichts wird angenommen


FinnO - Sa 11.02.12 15:57

user profile iconcompiler93 hat folgendes geschrieben Zum zitierten Posting springen:
egal welche erweiterung ich einbinde, *.bmb[...] nichts wird angenommen


versuch doch mal bmp.


compiler93 - Sa 11.02.12 16:02

user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconcompiler93 hat folgendes geschrieben Zum zitierten Posting springen:
egal welche erweiterung ich einbinde, *.bmb[...] nichts wird angenommen


versuch doch mal bmp.
sry hatte mich vertippt, wie blöd muss man sein :oops: :oops: :oops:

DANKE :wink: :wink: :wink:


Delete - So 12.02.12 01:07

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Ursprünglich wolltest du doch auch noch die Formate *.jpg, *.png und *.gif einbinden. Hast du diese Absicht inzwischen aufgegeben?


compiler93 - So 12.02.12 18:03

am besten wärs wenn ich auch noch *.JPG's einbinden könnte, aber so funktionierst immerhin schonmal mit einer Dateiart
auf jedenfall wäre es toll, wenn du noch was hast, aber außer nem Image fällt mir nichts ein

gif und png hatte ich nur als alternative Probiert, weil jpg nicht funktioniert hatte, nehme aber auch gern noch weitere Vorschläge an

außerdem hab ich noch das Problem, das meine Dateien im Moment immer einen speziellen namen haben müssen, weil ich nicht weiß wie ich andere Dateinamen einbinde, ohne diese vorher zu kennen. im moment müssen die Dateien alle 1.bmp, 2.bmp, ... heißen.

hier der Quelltext:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
procedure p_image;
begin
with form1 do
begin
v_d:= inttostr(v_x)+'.bmp';
Image1.Canvas.Create;
Image1.Picture.LoadFromFile(v_d);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
v_z:= strtoint(Edit1.Text);
if v_z<1 then showmessage('Bitte eine positive Anzahl eingeben!')
else
begin
v_y:=v_z;
Edit1.Enabled:=False;
BitBtn3.Enabled:=True;
Button1.Enabled:=False;
v_x:=1;
p_image;
end;
end;


procedure TForm1.BitBtn2Click(Sender: TObject);
begin
BitBtn3.Enabled:=true;
v_x:= v_x-1;
p_image;
if v_x=1 then BitBtn2.Enabled:=false;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
if v_x=v_y then BitBtn3.Enabled:=false
else
begin
BitBtn2.Enabled:=true;
v_x:= v_x+1;
p_image;
if v_x=v_y then BitBtn3.Enabled:=false;
end;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = VK_LEFT then if BitBtn2.Enabled=true then  BitBtn2.Click
else begin end else
if Key = VK_RIGHT then if BitBtn3.Enabled=true then BitBtn3.Click;
end;


Bedienoberfläche

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Narses - So 12.02.12 18:35

Moin!

user profile iconcompiler93 hat folgendes geschrieben Zum zitierten Posting springen:
am besten wärs wenn ich auch noch *.JPG's einbinden könnte,
Binde einfach die Unit JPEG mit ein, dann kann TImage auch JPEG-Bilder laden. :idea: ;)

user profile iconcompiler93 hat folgendes geschrieben Zum zitierten Posting springen:
außerdem hab ich noch das Problem, das meine Dateien im Moment immer einen speziellen namen haben müssen, weil ich nicht weiß wie ich andere Dateinamen einbinde, ohne diese vorher zu kennen.
Schau dir mal Luckies DriveTools [http://www.delphi-forum.de/viewtopic.php?t=33882&highlight=drivetools]an, damit kann man das relativ leicht lösen. :les: :think:

cu
Narses


compiler93 - Mo 13.02.12 08:09

ok, hab jetzt bei USES noch JPEG ergänzt, dass erste Bild lädt er auch, aber wenn ich das nächste Bild laden will kommt nur diese Fehlermeldung:

fehler

gibs eigentlich eine procedure, die die Bilder automatisch skaliert? weil mit hochauflösenden Fotos hab ich im Moment noch schwierigkeiten


jaenicke - Mo 13.02.12 08:27

user profile iconcompiler93 hat folgendes geschrieben Zum zitierten Posting springen:
ok, hab jetzt bei USES noch JPEG ergänzt, dass erste Bild lädt er auch, aber wenn ich das nächste Bild laden will kommt nur diese Fehlermeldung:
Bei welchem Code denn? Und in welcher Zeile davon?

user profile iconcompiler93 hat folgendes geschrieben Zum zitierten Posting springen:
gibs eigentlich eine procedure, die die Bilder automatisch skaliert?
Wenn du ein TImage zur Anzeige benutzt, kannst du ein fach Stretch und Proportional auf True setzen. Ansonsten kannst du z.B. mit StretchBlt oder Canvas.StretchDraw Bilder auf eine andere Größe bringen.


Narses - Mo 13.02.12 12:05

Moin!

user profile iconcompiler93 hat folgendes geschrieben Zum zitierten Posting springen:
ok, hab jetzt bei USES noch JPEG ergänzt, dass erste Bild lädt er auch, aber wenn ich das nächste Bild laden will kommt nur diese Fehlermeldung:
Lass mal dieses

Delphi-Quelltext
1:
Image1.Canvas.Create;                    
weg, das ist unnötig. :idea:

cu
Narses


compiler93 - Mo 13.02.12 17:18

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Bei welchem Code denn? Und in welcher Zeile davon?
Der Fehler ist dank Narses behoben.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconcompiler93 hat folgendes geschrieben Zum zitierten Posting springen:
gibs eigentlich eine procedure, die die Bilder automatisch skaliert?
Wenn du ein TImage zur Anzeige benutzt, kannst du ein fach Stretch und Proportional auf True setzen. Ansonsten kannst du z.B. mit StretchBlt oder Canvas.StretchDraw Bilder auf eine andere Größe bringen.
ich hab Stretch und Proportional jetzt auf True gesetzt, aber es passiert nichts, die Bilder sind weiterhin zu groß. Was muss ich hier dann in die Klammer eintragen? Das sagt mir nichts :(

Delphi-Quelltext
1:
Image1.Canvas.StretchDraw();                    
beim zweiten den Dateinamen, aber was ist dieses const Rect?

Moderiert von user profile iconNarses: Zitat repariert.
Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


jaenicke - Mo 13.02.12 17:59

user profile iconcompiler93 hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
Image1.Canvas.StretchDraw();                    
beim zweiten den Dateinamen
Äh, ja... Dateiname --> string, Parameter --> TGraphic, sieht so aus als ob die Birne gut zum Apfel-Parameter passt...

user profile iconcompiler93 hat folgendes geschrieben Zum zitierten Posting springen:
, aber was ist dieses const Rect?
Weißt du was die Hilfe ist? Da stehen oft hilfreiche Beschreibungen...
http://docwiki.embarcadero.com/VCL/de/Graphics.TCanvas.StretchDraw


compiler93 - Mo 13.02.12 18:58

ist ja schon gut, jetzt funktioniert es, trotzdem kein Grund gleich so genervt zu reagieren, ich hab halt noch nie mit const Rect gearbeitet, und auf die Idee bin ich in dem moment nicht gekommen, kann ja mal vorkommen