Multumesc de idee, dar am o banuiala ca nu ar merge (spun asta in perspectiva ultimelor lucruri care le stiu, nu am testat si nu cred ca voi testa).
StringGrid-ul este o componenta care nu e facuta sa includa alte componente (cum ar fi Panel-ul), in concluzie el nu trimite mai departe "copiilor lui" mesajul WM_COMMAND.
Pentru eventualitatea ca sunt interesati despre cum se poate pune un button intr-un StringGrid, iar acest button sa fie si functional, mai departe e modul de lucru.
Exista 2 solutii ... prima implica modificarea VCL-ului (mai exact grids.pas) - se va modifica eventul asignat mesajul WM_COMMAND ... nu mi se pare recomandat, dar ar putea face viata mai usoara fata de a doua metoda.
Aceasta implica crearea la runtime a StringGrid-ului si manipularea eventului de WM_COMMAND al acestuia in felul urmator:
StrGrid = class(TStringGrid)
...
private
procedure WMCommand(var Message: TWMCommand); message WM_COMMAND;
...
end;
...
procedure StrGrid.WMCommand(var Message: TWMCommand);
function DoControlMsg(ControlHandle: HWnd; var Message): Boolean;
var
Control: TWinControl;
begin
DoControlMsg := False;
Control := FindControl(ControlHandle);
if Control <> nil then
with TMessage(Message) do
begin
Result := Control.Perform(Msg + CN_BASE, WParam, LParam);
DoControlMsg := True;
end;
end;
begin
DoControlMsg(Message.Ctl, Message);
inherited;
end;
Functia DoControlMsg e copiata din VCL si e functia apelata de Panel in la manipularea acestui mesaj.
inherited e instructiunea care anunta compilatorul sa faca ce ar fi trebuit sa faca, in mod standard, acest event (evident, in acest caz, dupa ce am trimis noi mesajul mai departe, componentelor-copii)
Merci de intentie oricum, AdyX si Shocker.
L.E. imi cer scuze, aparent merge OnMouseDown.