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

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 31. Mai 2017, 14:25
Schade, aber wie teilt denn das Panel (oder die Form) dem Image mit, dass sich gerade die Maus darauf bewegt und kann man da nicht irgendwie eingreifen? Oder beim Bearbeiten des WM_MouseMove im TButton irgendwie zurückmelden, dass die Nachricht nicht verarbeitet worden ist, oder so? -> Message.Result... ?

//edit gut, dann werde ich wohl vermutlich auf die Variante umsteigen, alles in eine Paintbox bzw ein Image zu zeichnen...
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS

Geändert von alleinherrscher (31. Mai 2017 um 14:45 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 31. Mai 2017, 14:47
Schade, aber wie teilt denn das Panel (oder die Form) dem Image mit, dass sich gerade die Maus darauf bewegt und kann man da nicht irgendwie eingreifen? Oder beim Bearbeiten des WM_MouseMove im TButton irgendwie zurückmelden, dass die Nachricht nicht verarbeitet worden ist, oder so? -> Message.Result... ?

//edit gut, dann werde ich wohl vermutlich auf die Variante umsteigen, alles in eine Paintbox bzw ein Image zu zeichnen...
Ich versuche mal eine Alternative mit Subclassing eines STATIC Image Window.. was dann auch ein Handle hat.
Versprechen kann ich aber nichts

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 31. Mai 2017, 14:56
TImage hat weder ein eigenes Handle, noch ein eigenes Canvas und verwendet stattdessen die entsprechenden Resourcen des Parent Controls.

Entweder nimmst du eine TPaintBox und zeichnest komplett alles darauf, oder du leitest weiterhin von TGraphicControl ab und zeichnest zusätzlich manuell den Inhalt, der vorher vom Image dargestellt wurde.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 31. Mai 2017, 17:59
Dein Testprojekt zurück das soll dir zeigen warum es mit einem normalen Image nicht funktioniert.
Scheint niemand zu brauchen, hab's gelöscht.
Du benötigst also eine Alternative ein Panel mit BorderStyle None wäre eine lösung das hat ein Handle..
Darauf kannst du genauso zeichnen wie auf einem Image.

gruss

Geändert von EWeiss (31. Mai 2017 um 21:29 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
989 Beiträge
 
Delphi 6 Professional
 
#5

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 31. Mai 2017, 18:35
Hmm..

Es geht Dir, wenn ich es richtig verstanden habe, um ein formularweites MouseMove, egal über welchem Control sich dein Mousezeiger befindet, und ohne, dass Du das in jedem Control implementieren musst.

Also, da bietet sich (Quick and Dirty) folgendes an:

Delphi-Quellcode:
procedure TForm1.MyApplicationOnMessage(var Msg: tagMSG;
  var Handled: Boolean);
var
  P : TPoint;
  C : TControl;
begin
  if Msg.message = WM_MOUSEMOVE then begin

    P := ScreenToClient(Msg.pt);

    c := ControlAtPos(P,false,true);
    if Assigned(c) then Edit1.Text := c.Name else Edit1.Text := '';

    Label1.Caption := IntToStr( P.X);
    Label2.Caption := IntToStr( P.Y);
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Application.OnMessage := MyApplicationOnMessage;
end;
Somit hättest Du hier ein Formular-Hook. Eventuelle OnMouseMove auf Controls bleiben bestehen und funktionieren weiter.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 31. Mai 2017, 18:46
TImage = TGraphicControl <> TControl ?
Auch wenn es eine Ableitung von TControl ist.

Das soll gehen ?
Dann kann man ja direkt ein Handle abgeleitet von TControl für das Image erstellen wenn das so einfach ist und gut ist.

Nun gut. (Ich bin jetzt raus )

gruss

Geändert von EWeiss (31. Mai 2017 um 18:50 Uhr)
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 1. Jun 2017, 07:17
@Zacherl

Öhm....da sagt die Doku von Emba aber was anderes. Lt. derer hat TImage einen Canvas auf das es zeichnet.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 1. Jun 2017, 07:28
Hmm...also wenn ich den code in Post #9 angugg, dann ist der Parent sowohl vom Image als auch vom Selection jeweils das PANEL.

Da würd ich WM_MOUSEMOVE im Panel abfangen, und dann sowohl ans Image schicken als auch ans Selection-Control, so das beide tun, was immer sie da machen sollen (SendMessage oder PostMessage).

Das sollte eigentlich funktionieren.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 1. Jun 2017, 12:54
Öhm....da sagt die Doku von Emba aber was anderes. Lt. derer hat TImage einen Canvas auf das es zeichnet.
Klar, hat das TImage eine Canvas Eigenschaft. Diese ist allerdings nicht wie bei TWinControl an ein eigenständiges Handle gebunden, sondern intern lediglich eine TBitmap Instanz. Diese beinhaltet die Grafik, welche dann letztlich aber auf das Canvas vom Parent Control gezeichnet wird.

Da würd ich WM_MOUSEMOVE im Panel abfangen, und dann sowohl ans Image schicken als auch ans Selection-Control, so das beide tun, was immer sie da machen sollen (SendMessage oder PostMessage).
Dürfte schwierig werden eine Message an ein Control ohne WindowHandle zu schicken
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  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 12:11 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