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
Ghostwalker

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

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 1. Jun 2017, 08: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
 
#2

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 1. Jun 2017, 08: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
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 1. Jun 2017, 11:15
Das sollte eigentlich funktionieren.
Nein funktioniert nicht..

Da beide Controls TImage und seine eigene Ableitung von TGraphicControl wie auch immer sie benannt wurden
über kein eigenes Fenster bzw.. Handle verfügen gibt es auch keine Parent für diese Controls.
Hier einfach das Panel als Parent zu definieren wäre also sinnlos denn beide Controls wissen doch gar nichts vom Panel.

Ohne das sie wissen was ihr Parent ist können sie auch nichts übergeben bzw. Messagen schicken.
Außerdem haben beide Controls KEIN Handle was willst du also vom Panel aus wohin schicken mit (SendMessage oder PostMessage)?

Wie soll das gehen ?
HandleZumSenden := GetParent(HabeKeinEigenesHandleUmDasParentAbzufragen);
Ich hatte ihm ein SubClassed Beispiel gepostet das nicht verwendet wurde basierend auf einem STATIC Window mit realen Handle.
Delphi-Quellcode:
    dwStyle := SS_BITMAP or SS_CENTERIMAGE or SS_NOTIFY or WS_CHILD or WS_VISIBLE;
    dwExStyle := WS_EX_STATICEDGE;
    Result := CreateWindowEx(dwExStyle, 'STATIC', '', dwStyle, 5 , 5, rc.Right - 10, rc.Bottom - 10,
      Panel1.Handle, 0, hInstance, nil);
Delphi-Quellcode:
procedure TMyButton.MouseMove(Shift: TShiftState; X, Y: Integer);
var
  p: TPoint;
begin

  self.Caption:='Button:' +inttostr(x)+','+inttostr(y);
  GetCursorPos(p);
  Windows.ScreenToClient(GetParent(Handle), p);
  // Dein vorheriges Image was kein Handle hat
  // ersetzt mit einem STATIC Window
  SendMessage(hImage, WM_MOUSEMOVE, 0, Makelong(p.x, p.y));
end;
Delphi-Quellcode:
    WM_MOUSEMOVE:
      begin
        DC := GetDC(WinHandle);
        txt := PWideChar('Image: '+inttostr(LoWord(lp))+','+inttostr(HiWord(lp)));
        SetTextColor(DC, RGB(255, 0, 0));
        TextOut(DC, 1,1,txt, Length(txt));
        ReleaseDC(WinHandle, DC);
      end;
Wenn es nicht benutzt oder verwendet wird kann ich auch nichts machen.
oops.. sehe gerade war doch schon raus aus dem Thread.

Zitat:
egal über welchem Control sich dein Mousezeiger befindet
@Holger Die Lösung ist nicht schlecht funktioniert aber nur wenn das Control unter dem Mauszeiger auch über ein Handle (eigenes Fenster)verfügt.
Siehe http://www.delphipraxis.net/attachme...iten-31.05.jpg

gruss

Geändert von EWeiss (11. Jul 2019 um 16:47 Uhr)
  Mit Zitat antworten Zitat
Ghostwalker

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

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 1. Jun 2017, 12:42
@EWeiss

Doch, die Basisklasse TGraphiControl hat bereits die eigenschaft Parent (sogar TControl). So stehts zumindest in der Doku. (siehe Anhang)
Angehängte Grafiken
Dateityp: jpg docu.jpg (168,6 KB, 4x aufgerufen)
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 1. Jun 2017, 14:01
@EWeiss

Doch, die Basisklasse TGraphiControl hat bereits die eigenschaft Parent (sogar TControl). So stehts zumindest in der Doku. (siehe Anhang)
Mag ja sein aber wie auch @Zacherl schon sagte ohne Handle bringt das alles nichts.
Und für ein TImage\TGraphiControl das Handle aus der weit entfernten Ableitung TControl zu holen dürfte schwer fallen.
Also ein Panel verwenden oder alles in TPaintBox zeichnen.
Zitat:
Diese beinhaltet die Grafik, welche dann letztlich aber auf das Canvas vom Parent Control gezeichnet wird.
Es gibt kein Parent für TImage im herkömmlichen sinne da kein Fenster vorhanden ist.

Nochmal siehe meinen Screenshot.
http://www.delphipraxis.net/attachme...iten-31.05.jpg
Wenn es ein Parent gäbe wäre das TImage in der Liste der Child Controls von TForm gelistet.

gruss

Geändert von EWeiss ( 1. Jun 2017 um 14:07 Uhr)
  Mit Zitat antworten Zitat
Ghostwalker

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

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 2. Jun 2017, 04:33
[QUOTE=EWeiss;1373225]
@EWeiss

Doch, die Basisklasse TGraphiControl hat bereits die eigenschaft Parent (sogar TControl). So stehts zumindest in der Doku. (siehe Anhang)
Mag ja sein aber wie auch @Zacherl schon sagte ohne Handle bringt das alles nichts.
Und für ein TImage\TGraphiControl das Handle aus der weit entfernten Ableitung TControl zu holen dürfte schwer fallen.
Also ein Panel verwenden oder alles in TPaintBox zeichnen.
[QUOTE]

Ich sagte das die PARENT-Eigenschaft schon in TControl vorhanden ist. Ein eigenes Fensterhandle hat TImage nicht. Wohl aber der Parent. Und auf dessen Handle kann ich via TImage.parent.handle zugreifen

In diesem Fall wärs eh einfacher, er fängt das WM_MOUSEMOVE im Panel ab und erledigt dort die entsprechenden Arbeiten. Das spart das ganze hin und her mit zwei Komponenten
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 2. Jun 2017, 09:38
Zitat:
In diesem Fall wärs eh einfacher, er fängt das WM_MOUSEMOVE im Panel ab und erledigt dort die entsprechenden Arbeiten. Das spart das ganze hin und her mit zwei Komponenten
Richtig Uwe, denke aber das es sich für ihn eh schon erledigt hat.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 1. Jun 2017, 13: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 11:07 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 by Thomas Breitkreuz