Fenster schliessen ?

Hab ma wieder ein Riesen-Problem.
Nun bin ich fix und fertig mit den Nerven.

Also ich habe ein Button der sitzt im Form1.
Wenn man nun den Button betätigt öffnet sich ein 2tes Fenster,
in diesem 2ten Fenster befindet sich wiederum ein Button,
dieser soll das Fenster wieder schliessen.

Und genau da weiß ich nix weiter.
Wäre schön wenn jemand weiß wie man das 2te über den Button "Close" wieder schliest, und man dann ganz normal weiterarbeiten kann.

Hier ma der Code:

Code:
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
        TButton* Button;
             Button=new TButton(this);
             Button->Parent=(this);
             Button->Caption=AnsiString("OPEN");
             Button->Name= "BTN";
             Button->Top= 15;
             Button->Left=20;
             Button->Width=50;
             Button->OnClick = Zeige_Fenster2;
}

void __fastcall TForm1::Zeige_Fenster2(TObject *Sender)    //Declaration in der Klasse TForm1
{
        TForm *Fenster;
             Fenster = new TForm(this);
             Fenster->Caption = "sss";
             Fenster->Name = "MEIN_FESNTER";
             Fenster->Width = 345;
             Fenster->Position = poMainFormCenter;
             Fenster->BorderStyle =  bsNone;
             Fenster->Color = clRed;

        TButton* Button;
             Button=new TButton(this);
             Button->Parent=Fenster;
             Button->Caption=AnsiString("Close");
             Button->Name= "BTN_2";
             Button->Top= 10;
             Button->Left=10;
             Button->Width=50;

             Fenster->ShowModal();

             ShowMessage("Alles Pallett");

             delete Button;
             delete Fenster;
}
 
Ok, So gehts !

Code:
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{

        TButton* Button;
             Button=new TButton(this);
             Button->Parent=(this);
             Button->Caption=AnsiString("OPEN");
             Button->Name= "BTN";
             Button->Top= 15;
             Button->Left=20;
             Button->Width=50;
             Button->OnClick = Zeige_Fenster2;
}

void __fastcall TForm1::Zeige_Fenster2(TObject *Sender)    //Declaration in der Klasse TForm1
{
        TForm *Fenster;
             Fenster = new TForm(this);
             Fenster->Caption = "Info";
             Fenster->Name = "MEIN_FESNTER";
             Fenster->Width = 345;
             Fenster->Position = poMainFormCenter;
             Fenster->BorderStyle =  bsNone;
             Fenster->Color = clRed;

        TButton* Button;
             Button=new TButton(this);
             Button->Parent=Fenster;
             Button->Caption=AnsiString("Close");
             Button->Name= "BTN_2";
             Button->Top= 10;
             Button->Left=10;
             Button->Width=50;
             Button->OnClick = ENDE;

             Fenster->ShowModal();

             delete Button;
             delete Fenster;
}

void __fastcall TForm1::ENDE(TObject *Sender)
{
     HWND W;
     W = GetActiveWindow();
     PostMessage(W, WM_CLOSE, 0,0);
}
Bin natürlich noch an weiteren Lösungen interessiert.
 
Hallo,

Wäre es nicht einfacher beide Forms gleich zu Beginn zu erstellen und nicht während der Laufzeit?
Da kannst du auf Form2 auch Buttons und Edit-Felder plazieren ohne alles mit new erstellen zu müssen.
Ist meiner Meinung nach geringerer Aufwand.

Während der Laufzeit schaltest du nur die Sichtbarkeiten um...
Dein Schliessen Button im Form2 sieht dann einfach so aus.
Code:
Form2->Visible = false;
Hat meiner meinung nach den selben Effekt, ist aber einfacher.

MfG Turri
 
Wichtig war mit das ich zur Laufzeit das Fenster erstelle und auch in dem Fenster der Button zur Laufzeit erstellt wird. Dieses dann irgendwie über diesen Button wieder schliesse.

Was ich wirklich will ist folgendes:
- Ein TPanel in den Vordergrund bringen
- Dieses TPanel soll dann wie ein Fenster wirken
- Schwierigkeit: TPanel soll ShowModal() sein

So und genau deswegen brauche ich dafür ein Fenster.

Oder es gibt jemanden der weiß wie es ohne Fenster geht.

Nach meiner Methode:
Bei meinem Beispiel kommt also ein TPanel in das Fenster2,
Das TPanel wird vor Laufzeit komplett erstellt.
Das TPanel wird erst zur Laufzeit auf dieses Fenster2 gesetzt.
Das TPanel wirkt dabei wie ein Fenster, und das wollte ich haben.

Klar kann man das auch alles vor Laufzeit erstellen, aber genau das wollte ich nicht haben. Noch ein Formular und Noch eins und Noch eins, Neeee will ich nicht.
Sind mir dann zu viele Formulare wobei dieses ja nur den Zweck
hat alle meine TPanels anzuzeigen.

Jedenfals funktioniert es nun wunderbar habe die Halbe Nacht dran gesessen.
Es gab ja noch andere Probleme die man bewältigen musste, mit denen man ja wie immer nicht rechnen konnte.

Bis denne
 
Naja wenn du eine unbestimmte Anzahl an Formularen ist deine Variante schon besser.
Du wolltest ja nur andere Ideen wissen ;)

Darfst nur die Zeiger auf deine Formulare nicht verlieren...
Wenn du 2x oder öfter deinen Button drückst dann kommst du an die vorher erstellten Formulare nicht mehr ran, da ja
Code:
TForm *Fenster;
überschrieben wird und die anderen Fenster ja auch nicht mehr als "ActiveWindow" gelten sondern nur das aller neuste...
Aber dies nur als Anmerkung ;)

Mal ne Frage....
Das hat jetzt nicht wirklich viel mit dem Button auf dem 2ten Form zu tun oder?
Der hier sitzt ja auf dem "TForm1"... :confused:
Code:
void __fastcall TForm1::ENDE(TObject *Sender)
{
     HWND W;
     W = GetActiveWindow();
     PostMessage(W, WM_CLOSE, 0,0);
}
Deinen Zeiger zum Button auf dem 2ten Form löschst du ja gleich nach Erstellung und anzeigen des Forms wieder
Code:
delete Button;
Ist mir irgendwie etwas unklar.... aber wenn dein Kram funktioniert ;-)

MfG Turri
 
Durch ShowModal() ist nur das allerneueste Fenster Activ, soweit ich das nicht besser weiß, alle anderen Fenster sind nicht erreichbar.

Den Button zum öffnen des Formulars kann man nur jeweils einmal betätigen,
denn dann ist dieser ja nicht mehr erreichbar, weil das geöffnete Fenster im Vordergrund steht.

Erst nachdem man das Fenster wieder schliesst kann der Button wieder gedrückt werden.

Zum:
Code:
delete Button;
Eigentlich dachte ich es wird beim 2ten Aufruf des Fensters
eine Exception ausgelöst, da der Button noch vorhanden ist, deswegen delete Button.
Beim Fenster ist (ohne delete Fenster) wird eine Exception ausgelöst, da es dieses Fenster schon gibt.

Aber in meinem C++ Buch steht (für Anfänger) das ich alle Elemente die mit NEW initilisiert werden wieder aus dem Speicher gelöscht werden müssen. Dieses muss der Programmierer selber übernehmen. Also benutze auch für den Button delete.

Ob es hier noch nötig ist weiß ich leider auch nicht.
Da beim Schliessen des Fensters irgendwie alles verloren geht, was sich in dem Fenster befand.

Vielleicht hat hier ja einer ne Ahnung wie sich das verhält.
 
Achso und nix durcheinander bringen, der erste Button der als caption "OPEN" hat,
muss natürlich auch mit delete gelöscht werden, sobald das Programm beendet wird.

Der erste Button hat NIX mit dem 2ten Button zu tun, nur mal so falsch einer was falsch verstanden hat.

bis denne
 

Neue Beiträge

Zurück