Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#28

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