Bild in Komponente einbinden
-
Hallo
genau dafür nimmst du TImageList oder die Ressourcen, wobei ersteres einfacher ist.
bis bald
akari
-
hallo akari,
du hast es nicht richtig verstanden was ich meine. ich will nicht verschiedene bilder einer liste einbinden sondern nur eins.hat jemand einen codeschnipsel ?
-
Waldseeduo schrieb:
hallo akari,
du hast es nicht richtig verstanden was ich meine. ich will nicht verschiedene bilder einer liste einbinden sondern nur eins.Verschiedene Bilder koennen in ImageList sein:
a) keins
b) EINS
c) zwei
d)
...
y)
z) allerhand.
Wo ist da Dein Problem?

-
Hallo,
Danke für die Hilfe.Zwar weis ich jetzt immer noch nicht wie ich ein Bild in eine Komponente einbinden kann dass ich die Exe Datei weitergeben kann ohne das Bild mitzuliefern. Vieleicht kommt ja irgendwann die Erleuchtung.
gruss
waldseeduo
-
Die Imageliste ist eine Komponente. Diese kannste im Designer auf dein Fenster ziehen und im Objektinspektor kannst du die Imagelist mit ein,zwei,vielen Bildern füllen. Wenn du das zur Entwurfszeit machst, werden die Bildchen mit in deine Exe gepackt. Genauso ist das mit Images. Wenn du denen zur Entwurfszeit ein Bild mit dem Objektinspektor zuweist, dann wird das Bildchen auch mit in die Exe gepackt. Nur wenn du zur Laufzeit ein Bild mit LoadFromFile läds, dann muss das Bild zusammen mit der Exe weitergegeben werden.
-
Hallo
- erstell eine TImageList
- pass die Dimensions-Eigenschaften Width und Height an das aufzunehmende Bild an
- Doppelklick auf die ImageList, um in dem Dialog das Bild zu laden
- den Index des Bildes merken, in deinem Fall 0
- mitImageList->Draw(Canvas, 100, 100, 0, true);das Bild mit Index 0 in Canvas beginnend bei X100, Y100 zeichnen.
damit du Zugriff hast auf diese ImageList, brauchst du bloß noch eine Eigenschaft in deinem eigenem Control, das du auf die ImageList setzen kannst. Siehe z.B. TMenu
bis bald
akari
-
hallo akari
entweder sitz ich auf der leitung oder meine rübe ist heut überlastet.ich erstelle eine komponente arbeite also nicht auf einem formular. im formular erstelle ich nur eine instanz meiner komponente um sie gleich bei der erstellung zu testen.
entschuldige meine begriffstuzigkeit.
danke
waldseeduo
-
Hallo
dann ist mein letzter Satz für dich entscheidend.
Du gibst deiner Komponente Zugriff auf die TImageList-Komponente, indem du eine Eigenschaft darauf erstellst :// Header class TMyControl : public x { private : ... TImageList *iImageList; // interne Speicher für Imagelist und -Index int iImageIndex; // Setter void __fastcall Set_ImageList(TImageList *NewImageList); void __fastcall Set_ImageIndex(int NewImageIndex); public : __published : ... // Eigenschaften für Objektinspektor __property TImageList *ImageList = {read = Set_ImageList, write = iImageList}; __property int ImageIndex = {read = Set_ImageIndex, write = iImageIndex}; } // CPP-Datei void __fastcall TMyControl::Set_ImageList(TImageList *NewImageList) { iImageList = NewImageList; Repaint(); } void __fastcall TMyControl::Set_ImageIndex(int NewImageIndex) { iIndexIndex = NewImageIndex; Repaint(); } TMyControl::TMyControl(...) : X(...) { iImageList = NULL; iImageIndex = -1; } // Eigene Funktion zum Zeichnen void __fastcall TMyControl::Repaint() { ... // Wenn ImageList und ImageIndex vorhanden, Image in Canvas des Controls // an Position 50,100 zeichnen if ((iImageList != NULL) && (iImageIndex > -1)) iImageList->Draw(Canvas, 50, 100, iImageIndex, true); }danach kannst du du die neuen Eigenschaften der Control-Instanz auf dein ebenfalls angelegtes TImageList anpassen
bis bald
akari
-
danke akari,
das komme ich klar damit werde es gleich mal testen.nochmals danke
gruss
waldseeduo
-
aahhh jetzt hats geklingelt was ihr gemeint habt mit der eigenschaft.
klar jetzt erscheint mir das ganze logisch.danke dass ihr mich nicht dumm sterben lasst
#suppi jetzt klappt es.
waldseeduo
-
Hallo,
jetzt habe ich 3 ganze Tage versucht ein Bild in die Komponente einzubinden auf den ersten Eindruck schien es auch zu klappen doch er Schein hat getrügt.Bitte schaut euch mal den Code an. Ich bekomme immer die Fehlermeldung "E2247 Zugriff auf ... nicht möglich"
Ich habe es auch mit dem bereits geposteten Code versucht "Fatal Error!"
//header private: Graphics::TBitmap* FPic_0; __published: __property Graphics::TBitmap* Pic_0 = {write=SetPic_0 }; //-----------------------//cpp----------------------------------------- __fastcall TEFader::TEFader(TComponent* Owner) : TImage(Owner) { FPic_0=new Graphics::TBitmap(); } void __fastcall TEFader::SetPic_0(Graphics::TBitmap* value) { FPic_0->Assign(value); Repaint(); }Gibt es irgendwo eine Komponente die ich Downloaden kann bei der ein Bild wie bei der Image Komponente zur Entwurfzeit ein Bild auswählen kann.
Ich gebe normal nicht so schnell auf aber so langsam dreh ich echt am Rad.
Danke für eure Hilfe
gruss
waldseeduo
-
Hast Du wirklich die Property genauso geschrieben wie oben im Quellcode?
-
Hallo
denn so wie das aussieht ist deine __property im private Teil, obwohl die in den public sollte.
bis bald
akari
-
Hallo,
__property ist im public: (hatte vergessen das wort mit zu kopieren sorry)
ich habe den Code direkt aus der Komponente kopiert um Schreibfehler auszuschliessen.
was mach mich falsch?
gruss
waldseeduo
-
Irgendwo fehlt in deinem geposteten Code eine öffnende geschweifte Klammer und der read-Teil der Property.
-
die klammer ist drin im code
muss die read zwingend vorhanden sein. ich habe es schon probliert mit und ohne immer das gleiche ergebniss.ist die grundlegende vergehensweise so richtig?
gruss
waldseeduo
-
Wie lautet denn deine vollständige Fehlermeldung ?
Wenn sie "Zugriff auf FPic_0 nicht möglich" lautet, schau mal deinen gesamten Quellcode durch, wo überall diese Variable verwendet wird. Vielleicht greifst du irgendwo von ausserhalb zu, was eben nicht möglich ist.
-
hallo,
ja ich greife von ausen zu um das image zu füllenFader1->Pic_0->LoadFromFile("c:\\test.bmp");
dann wirft er mir die Meldung
gruss
waldseeduo
-
Hallo
dann brauchst du noch einen Getter, den du im read-Teil der Property zuweist.
bis bald
akari
-
Nun erst mal Danke an allen.
Ich habe den Getter eingefügt jetzt klappts so wie es im moment aussieht.
gruss
waldseeduo