Form2->Close(); funktioniert nicht



  • Das Ereignis OnActivate kann nicht der Grund sein. Eventuell hast Du weiteren Code in OnClose/OnCloseQuery, der das Schließen des Fensters verhindert?



  • Also ich denke es liegt daran, daß 'Form2->Close();' in 'TForm2::FormActivate' ist.



  • Ausser in OnActivate und OnPaint ist sonst nirgendswo was drin. Und das in OnPaint hab ich grad mal schnell auskommentiert ohne Erfolg

    Ich poste mal den ganzen Block:

    void __fastcall TForm2::FormActivate(TObject *Sender)
    {
    
         char found[1000];
         AnsiString lpOutput;
         AnsiString gaense = "\"";
         lpOutput = "find.bat " + gaense + (AnsiString)dir + gaense + " > find.txt";
    
         STARTUPINFO si1;
         PROCESS_INFORMATION pi1;
    
         ZeroMemory( &si1, sizeof(si1) );
         ZeroMemory( &pi1, sizeof(pi1) );
    
         si1.cb = sizeof(si1);
         si1.dwFlags = STARTF_USESHOWWINDOW;
         si1.wShowWindow = SW_HIDE;
    
         //Starten des externen Suchprogramms
         CreateProcess(NULL,lpOutput.c_str(),NULL,NULL,false,NULL,NULL,NULL,&si1,&pi1);
         SetThreadPriority(pi1.hThread,-2);
         WaitForSingleObject( pi1.hProcess, INFINITE);
    
         //find.txt öffnen zum Einlesen der gefundenen Dateien
         fstream Datei;
         Datei.open ("find.txt");
    
         //Zeile für Zeile auslesen und in Datenbank überprüfen ob vorhanden
         while (Datei.getline(found, 1000))
            {
    
            string stringfound = found;
    
            //Backslashs für Datenbank-Abfrage verdoppeln
            while ((pos = stringfound.find ("\\", pos+1)) != string::npos)
                    {
                    stringfound.insert (pos, "\\");
                    pos = pos + 2 ;
                    }
            pos = 0;
    
            //Hochkommas für Datenbank-Abfrage verdoppeln
            while ((pos = stringfound.find ("'", pos+1)) != string::npos)
                    {
                    stringfound.insert (pos, "'");
                    pos = pos + 1 ;
                    }
    
            AnsiString Fund = stringfound.c_str();
            Form1->ADOQuery1->Close();
    	    Form1->ADOQuery1->SQL->Clear();
            Form1->ADOQuery1->SQL->Add("SELECT * FROM musik WHERE Pfad = '"+Fund+"' ");
            Form1->ADOQuery1->Open();
    
            //Abfragen ob Treffer für den Pfad vorhanden sind
            if(Form1->ADOQuery1->IsEmpty() )
            	ListBox2->AddItem(found,NULL);    //Wenn kein Treffer vorhanden Pfad in der ListBox eintragen
            }
         Datei.clear();
         Datei.close();
    
         if(ListBox2->Count == 0)   //Wenn keine neuen Dateien gefunden -> MessageBox anzeigen und Fenster schließen
            {
            Form2->Close();
            Application->MessageBox("Keine neuen Dateien gefunden!", "Nothing found",  MB_RETRYCANCEL);
            }
         else
            {
            Label2->Caption = "Suche abgeschlossen"; //Meldung das Suche abgeschlossen
            Label4->Caption = ListBox2->Count;  //Anzahl der gefundenen Dateien anzeigen
            }
    
    }
    


  • ^^ Dann teste es dochmal. Bei mir funktioniert das problemlos.

    //Edit:
    Kommentier mal alles vor der letzten If-Abfrage aus. Dann sollte es eigentlich funktionieren. Will heißen, das Problem liegt vorher. Du schließt die Datenbank z.B. nicht mit Close...



  • Ich hab das ganze jetzt mal bei OnPaint reingeworfen. Jetzt ist es zumindest schon mal so das wenn ich die MessageBox schliesse das Fenster auch zugeht. Das war bei OnActivate nicht so.

    Zumindest schon mal eine Verbesserung 🙂



  • Rostfrei[] schrieb:

    Kommentier mal alles vor der letzten If-Abfrage aus. Dann sollte es eigentlich funktionieren. Will heißen, das Problem liegt vorher. Du schließt die Datenbank z.B. nicht mit Close...

    Dann funktioniert es auch nicht 😞 Hab alles bis zum if auskommentiert.



  • Also bei meinem BCB 6 Enterpr wird das Fenster in OnActivate geschlossen.

    void __fastcall TForm1::FormActivate(TObject *Sender)
    {
         Application->MessageBox("Keine neuen Dateien gefunden!", "Nothing found",  MB_RETRYCANCEL);
         Form1->Close();
    }
    


  • Ich hab jetzt alles was zu Form2 gehört auskommentiert bis auf:

    Application->MessageBox("Keine neuen Dateien gefunden!", "Nothing found",  MB_RETRYCANCEL);
    Form2->Close();
    

    Aber es funktioniert einfach nicht. Benutze BCB 6 Professional.

    Werd mal morgen meinen Lehrer fragen. Vielleicht weis der was 😕



  • Vielleicht könnten das mal Andere mit anderen BCB-Versionen testen.



  • Rostfrei[] schrieb:

    Also bei meinem BCB 6 Enterpr wird das Fenster in OnActivate geschlossen.

    Du benutzt Form1 ! da funktioniert es bei mir auch. Versuchmal in Form2.
    bei mir funktioniert es nicht in 'TForm2::FormActivate' bcb6 enterprise.
    wohlgemerkt Form2 ! In Form1 schon.



  • Mach nach dem Close() einfach mal ein return;



  • Funktioniert leider auch nicht 😞



  • Versuche es damit hier:

    PostMessage(Form2->Handle,WM_CLOSE,0,0);
    


  • das funktioniert bei mir. 👍



  • Bei mir auch! Vielen Dank!


Anmelden zum Antworten