Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Leinwand / Bild erlaubt kein Zeichnen (https://www.delphipraxis.net/99321-leinwand-bild-erlaubt-kein-zeichnen.html)

maanton 10. Sep 2007 18:00


Leinwand / Bild erlaubt kein Zeichnen
 
Hallo !

Da haben wir mal was neues !

Fehlermeldung im Debugger : Leinwand / Bild erlaubt kein Zeichnen ...

Und das Ganze bei einer vorgefertigten MessageDlg

Source :
Delphi-Quellcode:
...
Result := not (MessageDlg('...',mtError,[mbretry],0) = idRetry);
...
Anzumerken wäre vielleicht noch, daß das "aufrufende" Fenster per self.enabled := false; disabled wurde (enable := true bringt aber auch nix)....

Was könnte das sein ?

Gruss
maanton

SirThornberry 10. Sep 2007 18:19

Re: Leinwand / Bild erlaubt kein Zeichnen
 
arbeitest du in deinem Programm irgendwo mit Threads?

maanton 10. Sep 2007 20:40

Re: Leinwand / Bild erlaubt kein Zeichnen
 
ja, nahezu die komplette Datenbearbeitung der eingegebenen Daten erfolgt innerhalb eines Threads. Nach Abschluss der
Bearbeitung (deshalb das Fenster vor Eintritt in Thread per self.enabled := false) soll das Fenster wieder durch den User manipulierbar sein.
Im Fehlerfalle soll dem User eine Meldung angezeigt werden - hier haben wir den messagedlg.
Ich habe in einem anderen thread des Forums (da gings um showmessage) etwas von TThread.synchronize gelesen. Da ging es aber darum, dass das Mutterfenster des Threads mit canvas bearbeitet wird.
Hier haben wir aber ein eigenes Fenster -eben den messagedlg?
deshalb versteh ich das nicht ganz...

SirThornberry 10. Sep 2007 20:50

Re: Leinwand / Bild erlaubt kein Zeichnen
 
MessageDlg ist intern auch nur ein TForm. Generell sollte vom Thread aus nichts visuelles geschehen. Das höchste der Gefühle sind Apifunktionen wie MessageBox welche visuelle Ausgaben machen.

alleinherrscher 10. Sep 2007 20:52

Re: Leinwand / Bild erlaubt kein Zeichnen
 
Zitat:

Ich habe in einem anderen thread des Forums (da gings um showmessage) etwas von TThread.synchronize gelesen. Da ging es aber darum, dass das Mutterfenster des Threads mit canvas bearbeitet wird.
Hier haben wir aber ein eigenes Fenster -eben den messagedlg?
deshalb versteh ich das nicht ganz...
Das ist aber egal, du musst es trotzdem synchronisieren. Rufe einfach mit Thread.synchronize eine neue Prozedur auf, aus welcher du den MessageDlg aufrufst.

Die Fehlermeldung ist sehr verwirrend und kommt auch, wenn du im Grunde nichts mit einer Leinwand/Canvas machen willst. Intern muss er wohl auch bei einer MessageBox was zeichnen, oder? ;)

Grüße

SirThornberry 10. Sep 2007 20:54

Re: Leinwand / Bild erlaubt kein Zeichnen
 
oder eben die MessageBox verwenden. Die sollte nicht viel anders aussiehen als der MessageDlg ist aber ThreadSafe.

maanton 10. Sep 2007 22:10

Re: Leinwand / Bild erlaubt kein Zeichnen
 
Hey !

Erinnert mich an meine alten Windows 3.0 Programmierzeiten. Dachte, das gibts gar nicht mehr :wall:

MessageBox(HWND,...)

und funktioniert auch ! :-D

Vielen Dank für die schnelle und präzise Hilfe ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz