Fehler bei MDI-Programm
-
Ich habe den das Originale BCB 5 MDI-Programm bei dem auf jedes neue Form ein Memo gelegt wird als Grundlage für ein Programm genommen, bei dem nun anstelle des Memos ein Image auf dem Form erscheinen soll. Nun habe ich das Problem, das ich eine Fehlermeldung bekomme: "Field-->MDI Child Image1 does not have a corresponding component. Remove the declaration". Frage: Hängt dies damit zusammen, daß die Componente nicht zur Laufzeit erstellt wird?
Ich habe in der Klasse das Image hinzugefügt:
class TMDIChild : public TForm { __published: TImage *Image1; //TMemo *Memo1; void __fastcall FormClose(TObject *Sender, TCloseAction &Action); private: public: virtual __fastcall TMDIChild(TComponent *Owner); };und dann an der Stelle Image verwendet, wo vorher Memo1 verwendet wurde.
void __fastcall TMainForm::CreateMDIChild(String Name) { TMDIChild *Child; //--- create a new MDI child window ---- Child = new TMDIChild(Application); Child->Caption = Name; if (FileExists (Name)) { Child->Image1->Picture->LoadFromFile(Name); } }Kann mir jemand weiterhelfen? Vielen Dank!!!
-
-
Daran habe ich schon gedacht und es ausprobiert:
void __fastcall TMainForm::CreateMDIChild(String Name) { TMDIChild *Child; Child = new TMDIChild(this); Child->Caption = Name; TImage *Image1; Image1 = new TImage; Image1->Parent = Child; if (FileExists (Name)) { Child->Image1->Picture->LoadFromFile(Name); } }Es bleibt diesselbe Fehlermeldung. Mich wundert es auch, daß im Original mit dem TMemo das Memo1 nur in der Klasse einmal auftaucht und sonst nirgendwo.
-
Wenn ich ein leeres Projekt mache und mir ein Bild in ein neues Form lade funktioniert es:
void __fastcall TForm1::Bildladen1Click(TObject *Sender) { TForm *Child = new TForm(this); Child->Parent = Form1; Child->Show(); TImage *Image = new TImage(this); Image->Parent = Child; if(OpenPictureDialog1->Execute()) { Image->Picture->LoadFromFile(OpenPictureDialog1->FileName); } }Nur ist es mir noch schleierhaft warum es oben nicht funktioniert?
-
keine ahnung was du fuer ein TImage hast, aber bei mir benoetigt der konstruktor den eigentuemer der komponente (dein child-window) als parameter!
das TImage raus aus dem __published teil, der ist nur relevant, wenn du das formular zur designzeit bearbeitest und dein image auf formular ziehst. da du aber dynamisch ein image erzeugen willst, gehoert das entweder nach protected oder private.
void __fastcall TForm1::Bildladen1Click(TObject *Sender) { TMDIChild *Child = new TMDIChild(this); Child->Caption = Name; Image1 = new TImage(Child); Image1->Parent = Child; // ... }
-
Hallo Sunday,
vielen Dank für deine Hilfe! Gut das es ein Forum gibt, alleine kommt man nicht sehr gut voran. Ich habe jetzt nur noch das Problem, daß er das Image noch nicht zeigt, weil das Memo darüberliegt. Allerdings kann ich das Memo nicht aus der Klasse entfernen, weil ich dann eine Fehlermeldung bekomme.
-
wie nicht entfernen? was fuer ne fehlermeldung? ist das zur laufzeit erzeugt oder zu designtime?
Memo1->Visible = false;
-
Jetzt funktioniert alles, was habe ich gesucht!!! Man sollte den Objektinspektor mal früher aufmachen. Es gab schon ein MDI-Child-Form mit TMemo! Hätte ich das Memo durch ein Image ersetzt wäre ich in weniger als 1 Minute fertig gewesen.
Noch mal Dank an alle!!!