Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Prosljeđivanje eventa

[es] :: Pascal / Delphi / Kylix :: Prosljeđivanje eventa

[ Pregleda: 1452 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

franjo_tahi2
Franjo Tahi
Zagreb

Član broj: 289851
Poruke: 43
*.adsl.net.t-com.hr.



Profil

icon Prosljeđivanje eventa13.02.2014. u 10:05 - pre 123 meseci
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?
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Prosljeđivanje eventa13.02.2014. u 11:22 - pre 123 meseci
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;
 
Odgovor na temu

franjo_tahi2
Franjo Tahi
Zagreb

Član broj: 289851
Poruke: 43
*.adsl.net.t-com.hr.



Profil

icon Re: Prosljeđivanje eventa13.02.2014. u 11:27 - pre 123 meseci
Zahvaljujem, probat ću.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Prosljeđivanje eventa13.02.2014. u 11:40 - pre 123 meseci
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.
 
Odgovor na temu

franjo_tahi2
Franjo Tahi
Zagreb

Član broj: 289851
Poruke: 43
*.adsl.net.t-com.hr.



Profil

icon Re: Prosljeđivanje eventa13.02.2014. u 12:40 - pre 123 meseci
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
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Prosljeđivanje eventa

[ Pregleda: 1452 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.