[ FranjoZG @ 02.05.2016. 13:26 ] @
Moja kontrola je nasljednik tCustomButton-a
Na nju je stavljena tImage

Prosljedio sam OnClick i OnMouseDown sa tImage na tPanel, to radi, okinu se oba eventa gumba nakon pritiska na sliku isto kao da je pritisnuto na gumb.

Zanima me:
kako dobiti da se nakon pritiska miša na tImage sam gumb ponaša kao da je pritisnum miš na njemu, tj, da se promjeni slika kao kod Click-a na njega (dojam da je fizički gumb pritisnut te da je "upao")?
[ Aleksandar Đokić @ 02.05.2016. 15:10 ] @
Okini OnClick na tCustomButton na OnClick tImage -a.
[ FranjoZG @ 03.05.2016. 07:38 ] @
OnClick je prosljeđen na tCustomButton i on se okine, ali vizualno se button ne "spusti" kad se na tImage pritisne mišem (onako kako se "spusti" kad se pritisne lijevom tipkum miša ba button i ostane "dolje" tako dugo dok se ne pusti tipka miša)

Znači, nije problem event. On se okine i obavi što treba, već izgled gumba pri pritisku na Image koji je na gumbu.
[ savkic @ 03.05.2016. 13:49 ] @
Dakle ti imas, sliku koja stoji u buttonu ali iznad njega?
Onda je najlakse da slika "propusti" klik do kontrole ispod (buttona). Umesto TImage, napravi i koristi novu kontrolu izvedenu iz nje, koja će samo handlovati WM_NCHITTEST poruku i vratiti HTTRANSPARENT kao rezultat.
[ savkic @ 03.05.2016. 13:55 ] @
Updejt, umesto WM_NCHITTEST možda ćeš morati da hendluješ CM_HITTEST poruku (isprobaj već koju dobijaš).
Alternativa za pravljenje izvedene image kontrole je da handluješ subclasuješ WindowProc i onda tako hendluješ te poruke.
[ FranjoZG @ 04.05.2016. 20:04 ] @
savkic, ovo nisam potpuno razumio.

Pokušaso sam sa prosljeđivanjem, na formi - lakše nego u kontroli na način:

- na formi su 2 gumba
- na gumbu Button1 koristim OnMouseDown i OnMouseUp

Code:

procedure TForm2.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
   SendMessage(Button2.Handle, WM_LBUTTONDOWN, 10, 10);
end;

procedure TForm2.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
   SendMessage(Button2.Handle, WM_LBUTTONUP, 10, 10);
end;


Kada prisnem lijevu tipku miša na Button1:
- Button2 dobije fokus
- okine se Button2.OnMouseDown

Button2 vizualno ne simulira MouseDown, tj. ne dobije izgled kao da je prisnut.


[ FranjoZG @ 04.05.2016. 20:19 ] @
Riješeno... možda nekome pomogne:

U kontrolu slike sam dodao:
Code:

..
     procedure CMHitTest(var Message: TCMHitTest); message CM_HITTEST;
..

procedure tMyImage.CMHitTest(var Message: TCMHitTest);
begin
   Message.Result := HTNOWHERE;
end;



Iskušao sam - radi. Pritisak na Image, simulira pritisak na button.

Jel OK ili treba drugačije?
[ savkic @ 04.05.2016. 20:41 ] @
> Iskušao sam - radi. Pritisak na Image, simulira pritisak na button.
> Jel OK ili treba drugačije?

To sam i imao na umu, s tim što bih ja stavio da vraća HTTRANSPARENT jer je tako prema dokumentaciji.