Jeg har lavet en klasse som nedarver fra TGraphicControl. Hvordan kan jeg inde i klassen , reagere på events, f.eks onMousedown , og OnMouseMove. I mit tilfælde skal jeg skifte billede når der bliver trykket på mit objekt, og jeg skal bruge x & y positionerne. (men det skal altså være inde i klassen coden skal skrives)
hvis du kigger i koden for TControl (som du jo indirekte arver fra), har du følgende procedurer i PROTECTED delen.
procedure TControl.WMRButtonDown(var Message: TWMRButtonDown); begin inherited; DoMouseDown(Message, mbRight, []); end;
procedure TControl.WMRButtonDblClk(var Message: TWMRButtonDblClk); begin inherited; DoMouseDown(Message, mbRight, [ssDouble]); end;
procedure TControl.WMMButtonDown(var Message: TWMMButtonDown); begin inherited; DoMouseDown(Message, mbMiddle, []); end;
procedure TControl.WMMButtonDblClk(var Message: TWMMButtonDblClk); begin inherited; DoMouseDown(Message, mbMiddle, [ssDouble]); end;
procedure TControl.MouseMove(Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnMouseMove) then FOnMouseMove(Self, Shift, X, Y); end;
procedure TControl.WMMouseMove(var Message: TWMMouseMove); begin inherited; if not (csNoStdEvents in ControlStyle) then with Message do MouseMove(KeysToShiftState(Keys), XPos, YPos); end;
procedure TControl.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnMouseUp) then FOnMouseUp(Self, Button, Shift, X, Y); end;
procedure TControl.DoMouseUp(var Message: TWMMouse; Button: TMouseButton); begin if not (csNoStdEvents in ControlStyle) then with Message do MouseUp(Button, KeysToShiftState(Keys), XPos, YPos); end;
procedure TControl.WMLButtonUp(var Message: TWMLButtonUp); begin inherited; if csCaptureMouse in ControlStyle then MouseCapture := False; if csClicked in ControlState then begin Exclude(FControlState, csClicked); if PtInRect(ClientRect, SmallPointToPoint(Message.Pos)) then Click; end; DoMouseUp(Message, mbLeft); end;
procedure TControl.WMRButtonUp(var Message: TWMRButtonUp); begin inherited; DoMouseUp(Message, mbRight); end;
procedure TControl.WMMButtonUp(var Message: TWMMButtonUp); begin inherited; DoMouseUp(Message, mbMiddle); end;
for hver af de procedurer du vil ændrer i skal du declarer proceduren koorekt, og tilføje koden (med din klasses navn i stedet for TControl) i din klasse. Nu kan du ændre og bruge hvad du vil
Husk at kalde inherited da dette både er god skik og det kan være at denne gør noget som stadig er vigtigt at få udført.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.