Problem mit Open und SaveDialog
-
Hallo. Ich habe ein maximiertes Fenster mit einem TImage drin worauf ich rumzeichne und möchte dieses natürlich auch speicher bzw einladen. Das soweit alles fertig und funktioniert, nur wenn ich im Dialog einen Doppelklick auf die Datei ausführe und sich dann der Dialog schliesst, dann hat er mir auch in meine Grafik an der Doppelklickstelle etwas gemalt. Das natürlich sehr unfein! Datei markieren und über den Öffnen bzw Speichern Button macht nicht dieses Problem.
void __fastcall TForm2::OpenClick(TObject *Sender) { Image1->Enabled = false; if (OpenDialog1->Execute()) { //.... } Image1->Enabled = true; }
Das brachte leider keinen Erfolg, da scheinbar der "Klick" nach der OpenClick gesendet wird. Hat vielleicht jemand eine brauchbare Idee, damit er mit bei Doppelklick nicht mehr ins Image zeichnet? Danke!
-
Hallo
Probier mal :
Image1->Enabled = false; if (OpenDialog1->Execute()) { //.... } Application->ProcessMessages(); // Zwingt VCL alle Messages genau jetzt zuverarbeiten Image1->Enabled = true;
bis bald
akari
-
Leider bringt das nicht das erhoffte Ergebnis.
Mit der zusätzlichen Zeile habe ich jetzt 3 mögliche Ergebnisse (ca. 10 mal ausprobiert).
1. Der Doppelklick wird scheinbar abgefangen und erzeugt kein zeichnen mehr auf dem Image1 (so soll es ja sein, aber...)
2. Der Doppelklick zeichnet weiterhin auf dem Image1 an der Position, auf der die Maus stand
3. Rechts neben dem Dialog wird plötzlich nach dem Doppelklick etwas gezeichnet, anstatt dort wo die Maus steht
Schade, hatte mich schon gefreut.
btw ich habe CBuilder5 .. ist das eventuell ein Bug? Weil der Doppelklick wird ja vom Dialog ausgewertet, wieso geht dieser weiter an die TForm?
-
wie ist's damit:
void __fastcall TForm2::OpenClick(TObject *Sender) { Image1->Enabled = false; if (OpenDialog1->Execute()) { //.... } Image1->Enabled = true; Image1->Update(); //oder: evtl Image1->Invalidate(); }
grüssle
-
Leider hat Update() und Invalidate() keinerlei Auswirkung.
Ist ja fies das Problem.
-
Achja, falls es eventuell weiterhilft. Das Problem liegt in der Image1MouseUp().
Jemand hatte schon eine gute Idee die weiterhilft. In Image1MouseDown() eine Variable setzen und in Image1MouseUp() darauf abfragen.