Avatar billede jeppebecool Nybegynder
03. september 2000 - 17:23 Der er 4 kommentarer

Klasser Hjælp !!!

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)

hilsen Jeppe
Avatar billede delphidaner Nybegynder
04. september 2000 - 09:50 #1
Procedurerne, som skal være events, skal erklæres inde i din nye klasse, og du skal sørge for at parametrene passer til event-typen.

Events er egentlig bare metodepointere, så når du vil gøre procedurerne til events skriver du (vistnok):

Klasse.Event := @Klasse.ProcedureNavn

Prøv om det virker, jeg tror nok det er sådan man gør det.
Avatar billede hatecaps Nybegynder
04. september 2000 - 09:59 #2
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

:-)
Avatar billede jeppebecool Nybegynder
12. oktober 2000 - 12:55 #3
Jeg fandt ud af hvordan

man skal bare erklære procedurerne som

mousedown ... mousemove osv. og override dem

altså fjerne on-der plejer at stå foran.

Iøvrigt skal man ikke have \"sender\" parameteren med.

Hilsen Jeppe
Avatar billede pniels12 Nybegynder
19. oktober 2001 - 11:05 #4
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester