AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mousemove schlägt bei Opendialog durch

Ein Thema von skoschke · begonnen am 26. Jun 2019 · letzter Beitrag vom 27. Jun 2019
Antwort Antwort
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#1

Mousemove schlägt bei Opendialog durch

  Alt 26. Jun 2019, 13:06
Hallo,

der Betreff ist Sch... aber wie soll ich das kurz beschreiben:

Auf einem Formular liegt ein TImage welches per Mousemove Zeichenoperationen ausführt.
Es gibt ein Mainmenu welches einen Opendialog öffnet um Dateien zu laden.

Nun ist es mir mehrfach vorgekommen, dass beim Öffnen einer Datei bereits etwas gezeichnet wird, und zwar wenn man den Opendialog nicht mit OK benutzt sondern auf die gewünschte Datei doppelklickt.

Nun habe ich als erstes das Image disabled, während das Laden erfolgt, ohne Erfolg, der Mousemove-Event wird abgebrochen wenn Image disabled, ohne Erfolg.

Als letztes die Openroutine erweitert:

Delphi-Quellcode:
Image.enabled := false;
if opendialog.execute then
....
end;
//damit Mausevents verarbeitet werden
Application.processmassages;
Image.enabled := true;
und
Delphi-Quellcode:
procedure TFormMain.ImageMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  if not TImage(Sender).Enabled then
    exit;
...
Kein Erfolg, die Mopusemove's kommen weiter an und zeichnen

Wie komme ich weiter?

Ciao
Stefan
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
563 Beiträge
 
Delphi XE6 Enterprise
 
#2

AW: Mousemove schlägt bei Opendialog durch

  Alt 26. Jun 2019, 14:15
Vor "OpenDialog":
OnMouseMove := nil;

Nach "OpenDialog":
OnMouseMove := FormMouseMove;
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Mousemove schlägt bei Opendialog durch

  Alt 26. Jun 2019, 14:32
Delphi-Quellcode:
{!
<summary>
Remove all mouse messages from the calling thread's message queue.</summary>
}

procedure EmptyMouseQueue;
var
  Msg: TMsg;
begin
  while PeekMessage(Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST,
    PM_REMOVE or PM_NOYIELD) do
    ;
end;
Peter Below
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Mousemove schlägt bei Opendialog durch

  Alt 27. Jun 2019, 06:14
Zitat:
Vor "OpenDialog":
OnMouseMove := nil;

Nach "OpenDialog":
OnMouseMove := FormMouseMove;
wirkt leider genau so wenig wie mein enabled...

Ciao
Stefan
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Mousemove schlägt bei Opendialog durch

  Alt 27. Jun 2019, 06:16
Delphi-Quellcode:
{!
<summary>
Remove all mouse messages from the calling thread's message queue.</summary>
}

procedure EmptyMouseQueue;
var
  Msg: TMsg;
begin
  while PeekMessage(Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST,
    PM_REMOVE or PM_NOYIELD) do
    ;
end;
Wann soll das aufgerufen werden?
Nach dem Opendialog.execute bringt es keinen Effekt!

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von newIndy
newIndy

Registriert seit: 18. Dez 2018
29 Beiträge
 
Delphi XE3 Professional
 
#6

AW: Mousemove schlägt bei Opendialog durch

  Alt 27. Jun 2019, 06:33
'...Auf einem Formular liegt ein TImage welches per Mousemove Zeichenoperationen ausführt...'

Wie sieht deine Methode zum Zeichnen aus?
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Mousemove schlägt bei Opendialog durch

  Alt 27. Jun 2019, 10:27
Delphi-Quellcode:
{!
<summary>
Remove all mouse messages from the calling thread's message queue.</summary>
}

procedure EmptyMouseQueue;
var
  Msg: TMsg;
begin
  while PeekMessage(Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST,
    PM_REMOVE or PM_NOYIELD) do
    ;
end;
Wann soll das aufgerufen werden?
Nach dem Opendialog.execute bringt es keinen Effekt!
Dann ist deine Diagnose nicht korrekt, oder deine Zeichenroutine prüft nicht, ob der Mausknopf eigentlich gedrückt ist oder nicht und zeichnet daher auch, wenn das nicht der Fall ist. Wenn Du EmptyMouseQueue aufgerufen hast kann das Problem nur von mouse messages stammen, die danach erzeugt werden.
Peter Below
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz