Ein MDIChild in den Vordergrund bringen
-
Wie kann ich ein bestimmtes MDIChild per Knopfdruck in den Vordergrund bringen?
Gibt es so etwas wie SetFocus? (Mit SetFocus() bekomme ich die Fehlermeldung: SetFocus ist kein Element von TMenuItem)
Und mit ShowWindow(ChildForm->Handle, SW_SHOW) klappt auch leider nichtKann jemenad helfen?
Danke
BCBuilder Anfänger
-
BringToFront();
-
Xqgene schrieb:
BringToFront();
Danke Xqgene.
Damit hatte ich aber auch schon versucht.
Ich bekomme beim Complieren die Fehlermeldung:
'BringToFront' is not a member of 'Menus::TMenuItem'.Wieso eigentlich? Was ist da faul? Ich weiß nicht weiter.
Danke
BCBuilder Anfänger
-
ehh..
du muss BringToFront() nicht auf den MenuItem anwenden, sonder auf das Child-Fenster.so in der Art:
this->MDIChildren[ind]->BringToFront();
wobei this ist dein MDIForm
und ind Index des gewünschten MDIChild Fensters
-
Nun habe ich alles gelöscht und folgendes ausprobiert:
Ich habe folgende Funktion im Header der MDIChild deklariert:void __fastcall Test(AnsiString s);
Diese Funktion habe ich in der cpp-Datei der entsp. MDIChild implementiert:
void __fastcall TForm1::Test(AnsiString s) { ShowMessage(s); }
Nachdem ich die .h-Datei der Child im MainForm.cpp includiert habe, rufe ich die Funktion dann auf:
this->Form1->Test("Nachricht von Form1");
Wobei "Form1" mein MDIChild ist.
Nun compliere ich und kriege die Fehlermeldung:
'Test' is not a member of 'Menus::TMenuItem'.Da stimmt irgendwas nicht, oder?
-
es kling so, als ob in der Header Datei irgendein zeichen fehlt. ',' ';' ')' oder was anderes. prüfe die header datei.
-
Xqgene schrieb:
es kling so, als ob in der Header Datei irgendein zeichen fehlt. ',' ';' ')' oder was anderes. prüfe die header datei.
Nein, da fehlt wirklich nichts.
Unit1.h:void __fastcall Test(AnsiString s);
Unit1.cpp:
void __fastcall TForm1::Test(AnsiString s) { ShowMessage(s); }
Main.cpp:
#include "Unit1.h" . . this->Form1->Test("Nachricht von Form1");
Compile-Fehler:
[C++Fehler] Main.cpp(25): 'Test' is not a member of 'Menus::TMenuItem'.
Andere Idee?
Danke!
-
erstelle ein neues leeres Project. und teste, ob du dort auch den gleichen Fehler bekommst.
-
BCBuilder Anfänger schrieb:
Main.cpp:
#include "Unit1.h" . . this->Form1->Test("Nachricht von Form1");
Compile-Fehler:
[C++Fehler] Main.cpp(25): 'Test' is not a member of 'Menus::TMenuItem'.
Wenn man von der Unfehlbarkeit des BCB ausgeht, kann das eigentlich nur
bedeuten, daß this->Form1 vom Typ TMenuItem ist.
Also wenn ich Dich richtig verstehe, dann enthält die Unit main Deine MainForm.
Dann schau mal im Objektinspektor, ob es einen Eintrag für Form1 gibt.
Wenn man Menüs anlegt und keinen eigenen Namen vergibt, aber die Caption
ändert, wird automatisch die Caption auch zum Namen.Gruß,
Alexander
-
Alexander Kempf schrieb:
Dann schau mal im Objektinspektor, ob es einen Eintrag für Form1 gibt.
Wenn man Menüs anlegt und keinen eigenen Namen vergibt, aber die Caption
ändert, wird automatisch die Caption auch zum Namen.Das war's! Vielen vielen Dank!
Ich hatte im Main-Formular einen PopupMenu mit einem Item mit dem Caption "Form1". Wenn man auf dieses Item klickt, sollte dann das MDIChild in den Vordergrund gebracht werden. (Oder im letzten Beispiel die Funktion "Test()" aufgerufen werden) Dieses Item hatte den Namen, wie Caption, "Form1".
Mein MDIChild hatte ebenfalls den Namen "Form1". Wenn nun folgende Zeile compliert wird,Form1->BringToFront(); //oder Form1->Test("Text");
dann wird unter "Form1" nicht das MDIChild "Form1" sondern das MenuItem "Form1" verstanden.
Nun habe ich das MenuItem "Form1" umbenannt und alles geht wieder.Danke euch allen nochmal für die Hilfe
BCBuilder Anfänger
-
Mir fehlen die Worte
-
BCBuilder Anfänger schrieb:
Ich hatte im Main-Formular einen PopupMenu mit einem Item mit dem Caption "Form1".
Ein perfektes Beispiel für die Vorteile von Variablennamen, die den Variablentyp mit angeben oder andeuten. Mit z.B. 'miForm1' (mi für MenuItem) wäre das nicht passiert.
-
Xqgene schrieb:
Mir fehlen die Worte
Tut mir leid, bin noch Anfänger!