[ franjo_tahi2 @ 13.02.2014. 10:05 ] @
Kreiram kontrolu koja je nasljednik TPanela-a
Na kontroli je nekoliko TPanela (koji sadrže neke svoje kontrole), tako da je cijeli parent (kontrola) pokriven.

E, sad nastaje problem...
Kada postavime kontrolu na formu, ne mogu je fokusirati mišem, niti u runtime-u ne aktivira OnMouseDown. Što je i normalno jer je cijela ispod ostali panela...

Pokušao sam:
Code:

   self.OnMouseDown := fPaRow.OnMouseDown;


(probao sam i naopako) - ne radi.
self mi je kontrola
fPaRow je child panel koji se nalazi na osnovnom panelu

Pitanje:
kako da event child panela MouseDown aktivira parent event MouseDown?
[ reiser @ 13.02.2014. 11:22 ] @
Mozes da handlujes WM_PARENTNOTIFY. MSDN kaze:

Citat:
Sent to a window when a significant action occurs on a descendant window.


..sto je ono sto tebi treba.

Dakle, otprilike bi kod trebao ovako da ide:

Code:

interface

TMyPanel = class(TPanel)
private
protected
  procedure WMParentNotify(var AMessage: TWMParentNotify); message WM_PARENTNOTIFY;
public
end;

implementation

procedure TMyPanel.WMParentNotify(var AMessage: TWMParentNotify);
begin
  inherited;

  case AMessage.Event of
    WM_LBUTTONDOWN: begin
      // tvoj kod ovde
    end;
  end;
end;
[ franjo_tahi2 @ 13.02.2014. 11:27 ] @
Zahvaljujem, probat ću.
[ reiser @ 13.02.2014. 11:40 ] @
Druga solucija je da pozoves direktno handler iz child eventa, ovako otprilike:

Code:

procedure TChildPanel.OnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  (ChildPanel.Parent as TPanel).OnMouseDown(Sender, Button, Shift, X, Y);
end;


Prva solucija je bolja, ali opet zavisi od toga sta tebi tacno treba.
[ franjo_tahi2 @ 13.02.2014. 12:40 ] @
Ovo drugo mi miše odgovara jer mi treba samo da se OmMouseDown proslijedi parentu... ništa ne radim u svojoj klas u toj proceduri.
Ne mogu probati ovaj tren jer sam rasturio kontrolu, dodaj druke stvari pa nije u funkciji

Jednostavno...
Hvala