Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Resource in abgeleitetes Objekt integrieren?
Kay E. - So 21.11.10 16:21
Titel: Resource in abgeleitetes Objekt integrieren?
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!
bummi - 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
Delphi-Quelltext
1:
| bmp.LoadFromResourceName(HInstance, 'NAMEBILD1') |
jaenicke - 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 - 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...
Kay E. - 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 - So 21.11.10 19:45
Benutze einfach TResourceStream, den kannst du dann an ein TJpegImage füttern. ;-)
Kay E. - So 21.11.10 20:09
Also irgendwie bekomm ichs nicht gebacken.
So sieht das Resource-File aus:
und so die Implementierung:
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:
Was mach ich denn falsch?
jaenicke - So 21.11.10 20:33
Kay E. hat folgendes geschrieben : |
| 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:
Kay E. hat folgendes geschrieben : |
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:
Delphi-Quelltext
1:
| rs := TResourceStream.Create(HInstance, AResName, 'JPEG'); |
Kay E. - 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!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!