Fensterinhalt erst zu Laufzeitende sichtbar
-
Hallo,
folgendes Problem:
Ein kleines Tool schaut in einen Ordner und kopieret alle Dateien und Unterordner, die dort liegen, in ein lokales Verzeichnis. Quasi eine Art Updater. Während dieses Vorganges soll in einem Fenster die jeweilige Datei angezeigt werden, die gerade kopiert wird.
Das ganze Kopiegedöns klappt EINWANDFREI!
Nur das Fenster will nicht so wie ich
Also beim Programmstart wird das Fenster geladen. Aber obwohl es Text enthält (sowohl bei Form1 als auch bei den ganzen Labels ist die Eigenschaft Visible auf true gesetzt) wird kein Text angezeigt.
Ist das Programm durchgelaufen, zeigt es mir die letzte kopierte Datei an (also die Weitergabe des Dateinamens an das Label klappt).
Die ganze Zwischenzeit, während der Kopiervorgang läuft, seh ich nix außer dem Hintergrund.Ich poste einmal den kompletten Quellcode, vielleicht ist da ja für Euch was ersichtlich, aber das Problem ist nur das Hauptfenster, von dem ich während der gesamten Laupfzeit nur den Hintergrund sehe und erst nach dem letzten Kopiervorgang der ganze Text mit der letzten kopierten Datei angezeigt wird.
DANKE für Eure Hilfe und Unterstützung
//--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { char path[255] = {0}; int laenge = 0; Form1->Show(); strcpy(path,"U:\\Update"); laenge = strlen(path); scan_for_all_files(path, laenge); } //--------------------------------------------------------------------------- void scan_for_all_files (char folder[], int laenge) { HANDLE fHandle; WIN32_FIND_DATA Datei; char startfolder[255] = {0}; char nextfolder[255] = {0}; char dateiname[255] = {0}; // kann auch Pfad zu einem Ordner sein AnsiString tempstring; strcpy(startfolder,folder); strcat(startfolder,"\\*"); fHandle = FindFirstFile(startfolder,&Datei); do { // Dateiname darf nicht "." oder ".." sein if(!( (Datei.cFileName[0]=='.') && ( (Datei.cFileName[1]=='.' && Datei.cFileName[2]==0) || Datei.cFileName[1]==0 ) )) { // vollständigen Serverpfad in "nextfolder" schreiben strcpy(nextfolder,folder); strcat(nextfolder,"\\"); strcat(nextfolder,Datei.cFileName); // vollständigen lokalen Pfad in "dateiname" schreiben strcpy(dateiname,"C:\\Programme\\AccCon"); tempstring = MidStr(nextfolder, laenge+1, strlen(nextfolder)); strcat(dateiname, tempstring.c_str()); if (Datei.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // Keine Datei sondern ein Ordner // Ordner erstellen || Fails if directory exits Form1->Dateiname->Caption = dateiname; CreateDirectory(dateiname, NULL); scan_for_all_files(nextfolder, laenge); } else { // Datei kopieren Form1->Dateiname->Caption = dateiname; CopyFile(nextfolder, dateiname, 0); } } }while (FindNextFile(fHandle,&Datei)); FindClose(fHandle); } //---------------------------------------------------------------------------
-
Hei,
Form1->Dateiname->Caption = dateiname; Application->ProcessMessages();So sollte es gehen. Du musst bei solchen Schleifen
auch mal Zeit zum Verarbeiten geben
Gruss Stefan
-
SUPI, vielen lieben Dank.
Klappt jetzt astrein dank Deiner Antwort.Hatte ja schon Befürchtungen, dass ich eine Antwort nicht verstehen würde, aber noch verständlicher ging es ja echt nicht.
Habe gerade noch eine Protokollierung eingebaut, also ein Logfile für das Update und aus CopyFile ein CopyFileEx mit ProgressBar gemacht.
Langsam macht es Spaß, sich das Ergebnis anzusehen.
Danke nochmal.

(Hier gibt es leider kein sich verneigendes Smiliy, aber ich hätte es gepostet, wenn es das gegeben hätte)