[ Milan Milosevic @ 15.01.2003. 13:39 ] @
Kako da presretnem poruku koje je poslata mom prozoru .Da proverim da nije stetna za moj program i onda da odlucim dali da je propustim ili ne.
Konkretan primer zelim da moj sakriveni prozor ostane sakriven bez obzira dali mu neko salje poruku da postane vidljiv.
[ Rapaic Rajko @ 16.01.2003. 09:15 ] @
Vrlo lako. Pogledaj u helpu WindowProc i WndProc (ako se ne varam, klasa TControl). Imas potpunu kontrolu nad svim porukama koje dobijas od sistema.

Rajko
[ Milan Milosevic @ 16.01.2003. 12:07 ] @
Probao sam sa WinProc i to radi ali samo za Formu dok dugmad i drugi objekti postaju vidljivi.Sto znaci da bi trebao da pravim procedru za svaku komponentu.Meni treba neki laksi nacin koji ce preko jedne funkcije kontroklisati ceo prozor i sve njene komponente.
[ Rapaic Rajko @ 17.01.2003. 19:46 ] @
Vidis, zaboravio sam da to tako radi sa porukama. Znaci, sub-kontrole ce primiti nezavisno svoje poruke i odreagovati na njih. Ali, mozda ima resenje i za to...

Evo ideje. Napravio si svoju WndProc proceduru za formu, OK. Sada stupa na scenu WindowProc. WindowProc je POINTER koji gadja na WndProc. Vec naslucujes; sa WindowProc mozes da podmetnes svoju 'WndProc-like' proceduru koja ce da radi kako ti hoces, ali moze i da poziva default WndProc gde treba.
Dakle, smisli nacin da proceduru WndProc tvoje forme podmetnes (preko pointera WindowProc) svim njenim sub-kontrolama (a takodje i sub-kontrolama tih kontrola), i resio si problem. Ne bi trebalo da je tesko: mala rekurzivna metodica i to je to.
Pozdrav

Rajko
[ Milan Milosevic @ 21.01.2003. 11:29 ] @
Probao sam i tu varijantu ali mi prijavljuje gresku ' Stack Overflow' .
[ Rapaic Rajko @ 22.01.2003. 21:47 ] @
'Stack overflow' znaci da si se zeznuo u rekurziji. Prekontrolisi ponovo metod za dodeljivanje svog handler-a sub-kontrolama, pa ako ne resis, baci kod na grupu da ga razbijemo.
Pozdrav

Rajko
[ Rapaic Rajko @ 24.01.2003. 18:30 ] @
Ok, malo sam pogledao po kodu u vezi ovog problema; ima zez. Evo o cemu se radi: jednim handler-om ne mozes pozivati default handler-e vise razlicitih kontrola. Ali, i tu ima leka; evo ti jedan predlog:

1) na tvojoj formi napravis jedan property CurControl tipa TControl;
2) prepravis tvoju WndProc proceduru od forme tako da izgleda kao nesto ovako:

procedure TMyForm.WndProc(var Message: TMessage);
begin
GetParentForm(self).CurControl := self;
DoWndProc(Message);
end;

procedure TMyForm.DoWndProc(var Message: TMessage);
begin
if .... then // neki tvoj uslov oko message-a
else
CurControl.WndProc(Message); // default handler doticne kontrole
end;

function GetParentForm(acontrol: TControl): TMyForm;
begin
if acontrol is TMyForm then
result := acontrol
else
result := GetParentForm(acontrol);
end;

3) ovo je pisano iz glave (na brzinu), ali moze da se osposobi da radi. Probaj, pa javi sta si uradio.

Pozdrav

Rajko
[ Rapaic Rajko @ 24.01.2003. 18:33 ] @
Ne, ni ovaj primer ne valja; batali moju gornju poruku. Uh, nemam dovoljno vremena da se ozbiljno posvetim tvom problemu, jer radim od jutra do sutra.
Kad nadjem vremena, smislicu ti resenje.
Poz,

Rajko