Autor Téma: Jak zjistím, zda je komponent na panelu  (Přečteno 206 krát)

Offline JindraHavel

  • Nováček
  • *
  • Příspěvků: 3
  • Karma: 0
    • Verze Delphi: 5
Jak zjistím, zda je komponent na panelu
« kdy: 24-01-2021, 09:46:03 »
Na panelu (TPanel) mám komponenty Edit...
Chci docílit toho, aby Panel při události OnMouseEnter, resp. OnMouseLeave změnil svoji barvu. To mi funguje :) ale >:(....
Ale potřebuji ošetřit stav, kdy myš přejede přes nějaký ten Edit, co je na tom panelu - při najetí na Edit je volána PanelOnMouseLeave - tam bych tedy potřeboval zjistit, že se jedá o Edit na Panelu a tedy barvu neměnit.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Jak zjistím, zda je komponent na panelu
« Odpověď #1 kdy: 24-01-2021, 10:00:39 »
If Edit.Parent = MyPanel then alebo
If Edit.Tag = 1 then
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3119
  • Karma: 136
    • Verze Delphi: D2007, XE3, DX10
Re:Jak zjistím, zda je komponent na panelu
« Odpověď #2 kdy: 24-01-2021, 11:01:51 »
Obecne bych to udelal pres souradnice mysi, aby to fungovalo bez ohledu na widget, ktery je na panelu, tj. neco takoveho v Panel.OnMouseLeave (pro VCL a Windows, predpoklada to vyvolavani vyjimek, pokud se neco nepovede):
Kód: Delphi [Vybrat]
  1. var
  2.   pos: TPoint;
  3.   panel: TPanel;
  4. begin
  5.   Win32Check(GetCursorPos(pos));
  6.   panel := Sender as TPanel;
  7.   pos := panel.ScreenToClient(pos);
  8.   if not PtInRect(panel.ClientRect, pos) then
  9.     Panel1.Color := clBtnFace;
  10. end;
  11.  

Offline JindraHavel

  • Nováček
  • *
  • Příspěvků: 3
  • Karma: 0
    • Verze Delphi: 5
Re:Jak zjistím, zda je komponent na panelu
« Odpověď #3 kdy: 24-01-2021, 21:06:38 »
Funguje to  :)
Děkuji!