Tapeman Geschrieben 1. März 2004 Geschrieben 1. März 2004 Hallo, ich wollte ein Editfeld in einer Schleife füllen, jedoch wird nichts angezeigt. Erst wenn ich bspw. eine MessageBox in die Schleife einfüge, aktualisiert er das Editfeld. Gruß Tapeman.
Tapeman Geschrieben 1. März 2004 Autor Geschrieben 1. März 2004 void MeineKlasse::OnOK() { char aa[10]; sprintf(aa,"%i %i %i",mprz1.IsWindowEnabled(),mprz1.IsWindowVisible(),1==1); int i; char A[100]; for(i=0;i<101;i++) { sprintf(A,"%i%%",i); mprz=A; UpdateData(false); Sleep(10); // Wenn ich hier MessageBox(...) machen würde dann wird es mprz aktualisiert. }; CDialog::OnOK(); }
bigpoint Geschrieben 1. März 2004 Geschrieben 1. März 2004 du wolltes doch ein Editfeld in einer Schleife füllen, oder ?? diesen cod sieht nicht danach aus. Was verstehst du eigentlich über "Editfeld" ???
Tapeman Geschrieben 1. März 2004 Autor Geschrieben 1. März 2004 Unter Editfeld verstehe ich eigentlich das/ein Eingabefeld. Ist doch eigentlich in der Schleife drinne.
bigpoint Geschrieben 1. März 2004 Geschrieben 1. März 2004 Original geschrieben von Tapeman Unter Editfeld verstehe ich eigentlich das/ein Eingabefeld. Ist doch eigentlich in der Schleife drinne. willst du im Eingabefeld das "100%" steht oder 0% 1% 2% .... 100%
Guybrush Threepwood Geschrieben 1. März 2004 Geschrieben 1. März 2004 Original geschrieben von Tapeman Unter Editfeld verstehe ich eigentlich das/ein Eingabefeld. Ist doch eigentlich in der Schleife drinne. Ja von daher sollten keine Probleme kommen. Wenn es funktioniert sobald du die MessageBox reinmachst, liegt es wohl daran das der Inhalt der Editbox nicht aktualisiert wird. Aber das hast du ja anscheinend schon selber erkannt (wegen UpdateData...). Was ist denn mprz? Ist das eine Instanz einer Klasse für das editfeld? Wenn ja dann versuch mal mprz.UpdateData() aufzurufen.
Klotzkopp Geschrieben 1. März 2004 Geschrieben 1. März 2004 mprz ist anscheinend eine CString-Membervariable, die mit dem Eingabefeld verknüpft ist. Das Problem ist hier nicht, dass mprz oder die Information im Eingabefeld nicht aktualisiert wird, sondern dass zwischen den Aktualisierungen das Fenster nicht neu gezeichnet wird. Das liegt daran, dass OnOK letztendlich aus derselben Nachrichtenschleife heraus aufgerufen wird, die auch für die Bearbeitung der "Neu Zeichnen"-Nachricht verantwortlich ist. Dadurch wird erst neu gezeichnet, wenn OnOK zurückkehrt. Da ist aber die Schleife schon durchgelaufen und der Dialog geschlossen. Es gibt Wege, ein Neuzeichnen unter Umgehung der Nachrichtenschleife zu erzwingen, allerdings sehe ich hier den Sinn nicht. Was soll es bringen, ein Eingabefeld im Dialog von 0 auf 100 % hochzuzählen, um dann anschließend den Dialog zu schließen? Willst du so tun, also würde da tatsächlich eine Verarbeitung stattfinden?
Tapeman Geschrieben 2. März 2004 Autor Geschrieben 2. März 2004 Ja, es soll eine Datei geladen und angezeigt werden wieviel Prozent bereits geladen sind. Ich hatte es vorher mit einem extra Dialog probiert und eine ProgressBar benutzt, jedoch funktionierte es da nicht und ich kam auf den Gedanken, es gleich auf einen Anmeldedialog zu legen. Ich habe mich dann aber etwas vertan, da ich es nicht unsichtbar bekommen konnte/wollte. So wollte ich dann einfach nur ein Editfeld benutzen. Und das konnte ich eben nicht aktualisieren. Aber egal, ich habe es jetzt geschaft, damit es professioneller aussieht bin ich jetzt auf die ProgressBar zurückgekommen. Trotzdem Danke.
Guybrush Threepwood Geschrieben 2. März 2004 Geschrieben 2. März 2004 Um solche Probleme zu vermeiden solltest du das Laden der Datei in einen extra Thread auslagern. Dann hast du keine Probleme das die Benutzeroberfläche nicht aktualisiert wird oder wegen Auslastung nicht reagiert.
Tapeman Geschrieben 3. März 2004 Autor Geschrieben 3. März 2004 Der Anwender soll ja nicht einfach so weiter arbeiten, er soll ja sehen, das er mit großen komplizierten Sachen arbeitet und nichts kaputt machen soll. :-) Naja, so lange programmiere ich auch noch nicht, um so was hinzubekommen.
Guybrush Threepwood Geschrieben 3. März 2004 Geschrieben 3. März 2004 Dann solltest du denn Dialog der den Fortschritt anzeigt lieber Modal öffnen, dann kann der User auch nichts mehr im Hauptfenster machen. Das ist auf jeden Fall besser als den Hauptprozess zu überlasten. Wenn du hier im Forum nach Thread suchst bekommst du bestimmt ein paar nützliche Tipps.
Tapeman Geschrieben 3. März 2004 Autor Geschrieben 3. März 2004 Bisher sind so und so alle meine Dialog(aufrufe) modal. Hoffe ich auch.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden