Autor Beitrag
Kay E.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 118



BeitragVerfasst: So 21.11.10 16:21 
Hallo!

Und mal wieder brauch ich eure Hilfe:
Ich hab ein neues Objekt erstellt, das von TImage abgeleitet ist. Dieses Objekt hat die Eigenschaft, dass es 3 Darstellungszustände hat. Im Grundzustand wird Bild a angezeigt, wenn ich links klicke Bild b und wenn ich rechts klicke Bild c.
Bis jetzt lese ich die Bilder aus dem Verzeichnis aus, in dem die Exe liegt. Ich würde aber lieber die Bilder in der Komponente selbst (bzw wenn das nicht geht zumindest in der Exe) kapseln, so dass ich die Bilder nicht immer "lose" mit dem Programm rumschleppen muss.

Wie stell ich das an?

Danke für eure Antworten!
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: So 21.11.10 16:32 

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 21.11.10 16:34 
Lade Dir den XNResource Editor aus dem Web.
3 * Addresource
das ganze Speichern unter Egalwie.res
Egalwie.res in dem Projektordner kopieren
In Deine Komponente einbinden über {$res Egalwie.res}
im Code
ausblenden Delphi-Quelltext
1:
bmp.LoadFromResourceName(HInstance, 'NAMEBILD1')					

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS


Zuletzt bearbeitet von bummi am So 21.11.10 18:06, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 21.11.10 17:11 
Und das Einbinden mit {$R xy.res} kannst du natürlich auch in der Unit der Komponente machen. ;-)
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 21.11.10 18:06 
@jaenicke

sorry, da habe ich wohl gepennt :(

@Kay E.

natürlich gehört die res in die Komponente
ich habe es korrigiert...

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Kay E. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 118



BeitragVerfasst: So 21.11.10 19:31 
Hey, dankeschön für die Antworten!

Ich bin die Liste durchgegangen und es hat auch alles funktioniert, nur steh ich jetzt bei dem Problem, die Resourcen im Quellcode anzusprechen. Die Bilder sind JPEG's und wenn ich den aufruf von bummi versuch (LoadFromResourceName), dann stell ich fest, dass JPEG's sowas nicht haben. Ich find da nur LoadFromStream, LoadFromClipboardFormat und in TImage.picture noch das LoadFromFile.
Wie bring ich die Daten aus der Res-Datei denn nun auf das TImage?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 21.11.10 19:45 
Benutze einfach TResourceStream, den kannst du dann an ein TJpegImage füttern. ;-)
Kay E. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 118



BeitragVerfasst: So 21.11.10 20:09 
Also irgendwie bekomm ichs nicht gebacken.
So sieht das Resource-File aus:
user defined image

und so die Implementierung:
ausblenden volle Höhe 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:
implementation

{$R ImagesTWiesenfeld.res}

//...

procedure TWiesenfeld.LoadPictureFromJpgResource(picture : TPicture;const AResName: string);
var
   rs: TResourceStream;
   jpg: TJPEGImage;
begin
   rs := TResourceStream.Create(HInstance,AResName,RT_RCDATA);
   jpg := TJPEGImage.Create;
   try
      jpg.LoadFromStream(rs);
      picture.Assign(jpg);
   finally
      jpg.Free;
      rs.Free;
   end;
end;


procedure TWiesenfeld.SetPicture(Fieldstate: TFieldState);
begin
  case Fieldstate of
    fsEmpty: LoadPictureFromJpgResource(Picture,'RESEMPTY');
    fsCrystal: LoadPictureFromJpgResource(Picture,'RESCRYSTAL');
    fsBottle: LoadPictureFromJpgResource(Picture,'RESBOTTLE');
  end;
end;


Es compiliert, aber beim Start des Programms kommt dann die Fehlermeldung:
user defined image

Was mach ich denn falsch?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 21.11.10 20:33 
user profile iconKay E. hat folgendes geschrieben Zum zitierten Posting springen:
So sieht das Resource-File aus:
Also ich kenne diesen Editor jetzt nicht (ich mache das lieber manuell), aber ich denke der Knackpunkt ist der:
user profile iconKay E. hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
   rs := TResourceStream.Create(HInstance,AResName,RT_RCDATA);					
Du gibst hier als Typ RCDATA an, wenn ich den Screenshot des Resourceneditors aber richtig interpretiere, benutzt du dort den Typ JPEG. ;-)

Ich vermute also richtig wäre es so:
ausblenden Delphi-Quelltext
1:
   rs := TResourceStream.Create(HInstance, AResName, 'JPEG');					
Kay E. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 118



BeitragVerfasst: So 21.11.10 20:44 
Ahhhh, perfekt!

Um ehrlich zu sein, hatte ich nicht genau verstanden, was der letzte Parameter von mir will *g* In das RCData hab ich in dem Zusammenhang dann iwo im Netz gefunden. Vielen Dank für die Hilf, so klappt alles!