komisches verhalten eines Projektes
-
Guten Abend!
Ich habe da einen missteriösen Problem mit einem Projekt.
Ich fülle eine Fläche mit dem boundaryfill algo (eigenbau) und lasse mir jedes einzelne pixel anzeigen das geändert wird.
Nun zu dem komischen Phänomen:
Starte ich das Programm in der Borland umgebung so wird jedes einzelne Pixel der Fläche nacheinander eingefärbt bis die Fläche voll ist.
Starte ich die erzeugte exe ausserhalb der Umgebung, geht es wie geplant los nur nach einer Weile ist die Fläche komplett gefüllt ohne das man gesehen hat wie. Es ist also von einer Sekunde zur anderen schlagartig gefüllt, dies kann allerdings Programm technisch nicht ein.Was könnte das sein?
mfg polyman
-
Ich habe das auch mal gehabt. Du möchtest Einzelschritte deiner Berechnung sehen? Mach ein oder mehrere "Image Refresh" dazwischen. Sonst siehst du ein Weile nichts und dann alles auf einmal.
-
Ich mache ja nach jedem pixel eine refresh() deswegen verstehe ich das nicht.
Dies führt er aus um die Fläche zu füllen:
void Poly::boundaryfill(int x, int y,TColor colnew, TColor colbor, TImage *img) { if (x < img->Width && y < img->Height) if ((colnew != img->Canvas->Pixels[x][y]) && (img->Canvas->Pixels[x][y] != colbor )) { img->Canvas->Pixels[x][y] = colnew; img->Refresh(); boundaryfill(x + 1 , y , colnew,colbor,img); boundaryfill(x - 1 , y , colnew,colbor,img); boundaryfill(x , y + 1 , colnew,colbor,img); boundaryfill(x , y - 1 , colnew,colbor,img); } }Wie gesagt im Borland geht es einwandfrei.
Nur ausserhalb der Borlandumgebung füllt er plötzlich alles.
-
Habe keine Erklärung. Vielleicht noch ein Form1->Refresh(); ausprobieren?
-
Der Form->Refresh() hat leider auch nix gebracht aber trotzdem Danke.
-
Hallo,
Wenn du es für den Benutzer langsam aufbauen willst, kannst du ja einen Timer nehmen.
-
nur mal so:
Bei deiner Funktion kann es durch die häufige Rekursion bei grossen Flächen schnell zu einem Stapel-Überlauf kommen.
probier mal ein Application->ProcessMessages() aus...
-
Danke!
Mit Application->ProcessMessages() funktioniert es.Das der Stack überlaufen kann ist mir durchaus bewusst.
mfg polyman