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, 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
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 1. Jun 2017, 10: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 15:47 Uhr)
  Mit Zitat antworten Zitat
Ghostwalker

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

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

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

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

  Alt 1. Jun 2017, 13: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 13:07 Uhr)
  Mit Zitat antworten Zitat
Ghostwalker

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

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

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

AW: WM_MOUSEMOVE in mehr als einem TControl verarbeiten.

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