TImage - 2 gleiche Bilder anzeigen in 2 Forms
-
Hallo,
ich habe auf meiner Form ein Timage plaziert. Im Objektinspektor habe ich ein Bild gesetz.Jetzt habe ich noch eine zweite Form. Auf dieser ist ebenfalls ein TImgae platziert. Jetzt will ich, dass das Timage auf der zweiten Form das gleiche Bild wie das Timage auf der ersten anzeigt.
Ich habe versucht den Pfad des bildes zu ermittel. Doch leider bringe ich es nicht hin.
Dann wollte ich in Form1 eine Methode bereitsstellen die zurückgibt welches Image angezeigt wird.
So ungefähr:TPicture TForm1::hole_image (int ix, int iy) { return Bild[ix][iy]->Picture; //[C++ Fehler] Unit1.cpp(1087): E2034 Konvertierung von 'TPicture * const' // nach 'TPicture' nicht möglich }Meine Fragen:
1. WIe kann man den Pfad des Bilder ermitteln ?
2. Wie muss ich mein Code Beispiel verändern, damit es funzt ?
3. Wie würdet ihr das [sauber] Problem lösen ?
-
neuko schrieb:
1. WIe kann man den Pfad des Bilder ermitteln ?
Welchen Pfad? Den Dateipfad auf der Festplatte? Wenn du es im Objektinspektor zugewiesen hast, gar nicht. Ansonsten kannst du es zur Laufzeit mit LoadFromFile (siehe BCB-Hilfe) laden - dann kennst du den Dateinamen.
neuko schrieb:
2. Wie muss ich mein Code Beispiel verändern, damit es funzt ?
Was willst du mit den Arrays? Wenn du das Bild doppelt auf zwei verschiedenen Forms hast, kannst du es a) zweimal im Objektinspektor festlgen (unelegant) oder b) einmal festlegen und dann beim Programmstart mittels Assign in das andere kopieren.
neuko schrieb:
3. Wie würdet ihr das [sauber] Problem lösen ?
Dazu musst du dein Problem nochmal genauer beschreiben...
-
@neuko: Einen Stern ('*') kann man schonmal vergessen... *mit dem Zaunpfahl wink*

-
Sorry konnte erst jetzt eure Antworten lesen.
Aber leider hilft mir das auch nicht weiter.Einen Stern ('*') kann man schonmal vergessen
Wenn du meinst ich hätte einen Stern vergessen, dann sag doch wo.
Ich habe schon alles versucht.1. Wie soll das mit Assign den funktionieren ?
PS.: Image wechselt während der Programmlaufzeit.Ich will in meiner ersten Form eine Methode bereit stellen hole_Bild und auf diese Methode soll dann das zweite Formular zugreifen und das richtige Bild holen und bei sich anzeigen. -> ich hoffe es ist verständlich was ich meine
Wie muss diese Methode aussehen ? Was ist an meiner Methode aus dem 1 Post falsch.
-
TPicture *TForm1::hole_image (int ix, int iy)Meine Fragen:
1. WIe kann man den Pfad des Bilder ermitteln ?
2. Wie muss ich mein Code Beispiel verändern, damit es funzt ?
3. Wie würdet ihr das [sauber] Problem lösen ?[/quote]1. Die TImage Komponente hat nur ein Bitmap im speicher, keine Datei, also auch kein Pfad
2. siehe oben
Bild1->Picture->LoadFromFile("blah"); Bild2->Picture->Assign(Bild1->Picture);
-
Leider funktioniert es immer noch nicht.
Kann mir mal jemand den Unterschied zwischen TImage und TPicture erklären ?
Also so habe ich es versucht: (beide Versuche funktionieren nicht)
1. Versuch mit TPicture
//In Form1 TPicture * TForm1::hole_bild (int ix, int iy) { return Bild[ix][iy]->Picture; } //In Form2 __fastcall TfrstDrucken::TfrstDrucken(TComponent* Owner) : TForm(Owner) { frstDrucken->img00->Picture = Form1->hole_bild(0,0); //tut gar nichts //zeigt Bild nicht an }2. Versuch mit TImage
//IN Form I TImage * TForm1::hole_bild (int ix, int iy) { return Bild[ix][iy]; } __fastcall TfrstDrucken::TfrstDrucken(TComponent* Owner) : TForm(Owner) { //frstDrucken->img00->Assign(Form1->hole_bild(0,0)); //Während der laufzeit kommt immer die Fehlermeldung //TImgae kann nicht Timage zugerordnet werden frstDrucken->img00 = Form1->hole_bild(0,0); //tut ebenfalls gar nichts //zeigt Bild nicht an -> es kommt aber keine Fehlermeldung }Woran leigt es das beide Versuche nicht gehen und das Bild nicht auf der anderen Form angezeigt wird ?
Selbst wenn ich es direkt Versuche ohne Methode wird das Bild nicht angezeigt:
frstDrucken->img00->Picture->Assign(Form1->img00->Picture);Aber es kommt keine Fehlermeldung. Es zeigt das Bild nur nicht an. Das Image bleibt leer.
Danke
-
Woher, um alles in der Welt, nimmst du das Array? Wo und wie ist es deklariert, was hat es zu bedeuten?
-
//in der Header-Datei der Form1 public: // Anwender-Deklarationen TImage *Bild[8][8]; //im konstruktor der Form 1 __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Bild[0][0] = img00; Bild[0][1] = img01; Bild[0][2] = img02; Bild[0][3] = img03; //besser zu arbeiten ->kann über schleifen dann ansprechen //... }Daran dürfte es normal nicht liegen.
Ich hätte auch direkt das Image ansprechen können, macht keinen Unterschied. Ich denke, dass das nicht der Fehler ist.
-
Versuch mal sowas wie:
frstDrucken->img00->Picture->Assign(Form1->img00->Picture->Bitmap);Je nachdem, welches Bildformat du nutzt. Wenn ich mich recht entsinne, habe ich immer die Bitmaps direkt assigned.
-
frstDrucken->img00->Picture->Assign(Form1->img00->Picture->Bitmap);tut leider auch nicht. Wie vorher schon erwähnt führt er auch diesen Code ohne zu meckern aus. Aber es wird kein Bild angezeigt.
Woran kann das liegen ?
-
Zeig mal was genaueres!
1. WO und WIE und WANN erzeugst Du das 'Original'- Bild (welches woanders zu zeigen ist)
2. WO und WIE und WANN holst Du das.
3. Nach Assign kannste mal 'n Refresh zusetzen.
PS: Welcher Typ Graphik ist im Original?
Falls das JPEG ist, kann Dein Code nicht gehen!
-
Also ich verwende Bitmaps.
Ich setze sie im Objektinspektor und Refresh bringt gar nichts.
Die Bilder können sie aber verschieben. Also von z.B.
Bild[0][1]->Picture = Bild[0][2]->Picture;ich habe gerade herausgefunden, wenn ich auf die zweite Form einen Button setze und dann den Quellcode dort hineinkopiere funktioniert es und das Bitmap wird angezeigt.
void __fastcall TfrstDrucken::Button1Click(TObject *Sender) { frstDrucken->img00->Picture->Assign(Form1->img00->Picture); //geht }__fastcall TfrstDrucken::TfrstDrucken(TComponent* Owner) : TForm(Owner) { frstDrucken->img00->Picture->Assign(Form1->img00->Picture); frstDrucken->Refresh(); //tut nicht }Was macht denn das für einen Unterschied ob der Code im Konstruktor ist oder in einer Methode. Wieso funktioniert es beim einen und beim anderen nicht ? Wieso funktionieren die anderen Versuche von mir nicht, sieht dort jemand einen Fehler ? oder hat eine Vermutung.
-
Hi,
mach mal deinen Aufruf zum holen in OnShow oder so...
Der Konstruktor wird aufgerufen, wenn das Forumlar erzeugt wird! Es könnte sein, dass es dann dein Bild noch garnicht gibt....MfG
Alexander Sulfrian
-
Erstmal danke soweit. Ich habe jetzt den Code in die Methode onActivate gepackt und er tut auch.
Aber trotzdem würde mich interresieren warum die anderen Versuche von mir nicht funktionieren. Diese Funktionieren auch nicht wenn ich sie in OnActivate packe.
z. B. bei diesem Versuch kommt immer eine Fehlermeldung "TImage kann nicht TImage" zugerordnet werden. Was ist denn das für eine sinnlose Fehlermeldung ?
Hier der Quellcode:
{ frstDrucken->img00->Assign(Form1->hole_bild(0,0)); //Während der laufzeit kommt immer die Fehlermeldung //TImgae kann nicht Timage zugerordnet werden }Die Methode hole_bild habe ich ja schon gepostet.
Wo liegt hier der Fehler ?
-
Hallo
vermutlich heist die Fehlermeldung
"TImage * kann nicht TImage" zugerordnet werden.
MfG
Klaus