AGB  ·  Datenschutz  ·  Impressum  







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

WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

Ein Thema von alleinherrscher · begonnen am 30. Mai 2017 · letzter Beitrag vom 2. Jun 2017
Antwort Antwort
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#1

WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 30. Mai 2017, 15:45
Hi@all.

Habe vermutlich eine ziemlich einfache Frage, auf die ich aber keine schöne Lösung gefunden habe: Wie kann ich WM_MOUSEMOVE messages in mehr als einem TControl verarbeiten?

Hintergrund: Ich habe ein tImage, was bei einem OnMouseMove Event kleine Pfeile auf den dazugehörigen Linealen außerhalb des TImages bewegen soll. Das funktioniert auch. Jetzt habe ich zusätzlich ein eigenes TGraphicControl abgeleitet, mit welchem ich eine Art Selektierbox erstellen möchte, um bestimmte Bildbereiche auf dem TImage auszuwählen. Mein TGraphicControl ist somit ein Child des TImages. Sobald ich mit der Maus über das TGraphicControl fahre, werden die WM_MOUSEMOVE Messages natürlich von TImage zum TGraphicControl weitergeleitet. Damit bleiben die Pfeilchen an einen Linealen stehen, was ich aber nicht möchte.

Ich habe es schon mit WndProc(var Message: TMessage) versucht, um die WM_MOUSEMOVE messages wieder an das TImage zu leiten, aber das gibt natürlich eine Endlosschleife...

Beste Grüße und vielen Dank,
Michael
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 30. Mai 2017, 16:05
Subclass dein Control und gut ist

Oder die WM_MOUSEMOVE Message vom TImage nicht behandeln. (bzw.. dein TGraphicControl wenn es die Messagen weiterleitet und du das nicht willst)

Delphi-Quellcode:
WM_MOUSEMOVE:
  begin
    Result := 1;
    Exit;
  end;
gruss

Geändert von EWeiss (30. Mai 2017 um 16:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#3

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 30. Mai 2017, 16:29
Hey EWeiss,

vielen Dank für die schnelle Hilfe! Auf die Gefahr hin, wie ein totaler Neuling zu wirken: Was meinst du mit "Subclass dein Control" - ist es das nicht schon, wenn ich eine Klasse von TGraphicControl ableite? Und wo genau müsste ich deinen Codeschnipsel unterbringen?

Besten Gruß,
Michael
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 30. Mai 2017, 16:33
Jedes Control hat doch seine eigene message quewe..

Du hattest doch schon den Anfang gemacht so wie ich gelesen habe.
Zitat:
Ich habe es schon mit WndProc(var msg: TMessage) versucht, um die WM_MOUSEMOVE messages wieder an das TImage zu leiten
genau so und dort..
Delphi-Quellcode:
if msg.Message = WM_MOUSEMOVE then
 bla.. bla..
Du musst nur dafür sorgen das die Message dann an das TImage nicht weitergeleitet wird.
Wenn ich dich richtig verstanden habe.

gruss

Geändert von EWeiss (30. Mai 2017 um 16:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#5

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 30. Mai 2017, 16:44
Also: Momentan habe ich es so:

Delphi-Quellcode:
procedure TSelection.WndProc(var Message: TMessage);
begin
  inherited;
  if (Parent <> nil) and (Parent.HandleAllocated) then
    if Message.Msg=WM_MOUSEMOVE then
       Message.Result:=1; //oder 0 oder LongInt(False), keine Änderung
end;
In TSelection (abgeleitet von TGraphicControl) funktioniert MouseMove -> soll auch so sein
Im Parent funktioniert MouseMove nicht, wenn die Maus auf dem TSelection Control ist. -> schlecht!

//Edit: Ah, habe ich falschherum gedacht, und muss mich um WndProc des Parents kümmern?
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 30. Mai 2017, 16:49
Zitat:
Edit: Ah, habe ich falschherum gedacht, und muss mich um WndProc des Parents kümmern?
Versuchs einfach mal ist ja kein Aufwand

Das weiterleiten der WM_MOUSEMOVE Message an das Parent Fenster mache ich auf diese weise.
Delphi-Quellcode:
    WM_MOUSEMOVE:
      SendMessageW(GetParent(WinHandle), WM_MOUSEMOVE, MakeLong(GetDlgCtrlID(WinHandle), 0), 0);
gruss

Geändert von EWeiss (30. Mai 2017 um 17:19 Uhr)
  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 17:39 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