Gå til innhold

flere parameter i mousedown - hvordan


Anbefalte innlegg

er det noen som husker hvordan man lager et eget event i en komponet ?

jeg ønsker å endre endel på det evenet som kommer når musknappen trykes ned

...mousedow.

Bl.a. vil jeg legge til en ekstra parameter

slik at når jeg klikker på knappen (komponeten) så kommer parametrene min egen parameter i tillegg til

- Sender: TObject;

- Button: TMouseButton;

- Shift: TShiftState;

- X,

- Y: Integer

 

alternativt å bruket noen av de parametrene som er standard.

 

det jeg ønsker å få overfør via disse parametrene er

- posisjonen på markøren : x og y

og om markøren var i et transparangt punk ( jeg bruker svart farge til å bestemme hvor det skal vere gjenomsiktig )

 

hvis dere synes dette var vanskelig å for stå hva jeg mente så ver snill å be om en bdere forklaring

 

se også her

https://www.diskusjon.no/index.php?showtopic=494993&hl=

 

 

jeg bruker delphi 7 personal

 

 

og fortsat god jul til alle programererne der ute

nå ønsker jeg dere godt nytt år

Endret av elg-elg123
Lenke til kommentar
Videoannonse
Annonse

MouseDown har følgende definisjon:

 

   procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
     X, Y: Integer); dynamic;

...

procedure TControl.MouseDown(Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if Assigned(FOnMouseDown) then FOnMouseDown(Self, Button, Shift, X, Y);
end;

 

Det betyr at du kan overstyre MouseDown og legge inn kall til din egen event i tillegg.

 

   procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
     X, Y: Integer); override;

...

procedure TMinKnapp.MouseDown(Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var
 Param1, Param2: Integer;
begin
 inherited; //sørger for at vanlig OnMouseDown blir kjørt
//setter opp param1, param2 osv.
{...}
//...og kaller den nye eventen
 if Assigned(FOnNyMouseDown) then FOnNyMouseDown(Self, Button, Shift, X, Y, Param1, Param2);
end;

Lenke til kommentar

takk skal du ha.

skal se om dette virker for meg

jeg skriver det nå ut på papir

 

EDIT:

Det må vere noe som mangler

her er minne procedurer :

type
 tpredefuserdefbutton = class(TGraphicControl)
 private
.
.
.
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
     X, Y: Integer); override;
.
.
.
.
.
.
procedure tpredefuserdefbutton.MouseDown(Button: TMouseButton; Shift: TShiftState;
 X, Y: Integer);
 var
 c:tcolor;
 param1,param2:integer;
 begin

inherited;
param1:=2;
param2:=5;

if assigned(fonnymousedown) then fonnymousedown(self,button,shift,x,y,param1,param2);
   repaint;
 end;


 

 

når jeg kompliererså blir det feil.

kompilatoren finner ikke noen referans( eller hva nå det heter) til fonnymousedown

må det også legges inn propertyer til dette eller er det bare lage en ny procedure som som blir kalet opp fra denne

Endret av elg-elg123
Lenke til kommentar

Ja, du må definere hvordan din nye event kommer til å bli definert.

 

Vanlig MouseEvent er definert på denne måten:

TMouseEvent = procedure(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer) of object;

 

En utvidet MouseEvent kan, for eksempel, defineres slik:

 

TNyMouseEvent = procedure(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y, Param1, Param2: Integer) of object;

 

Her er Param1 og Param2 bare et eksempel, selvfølgelig er det deg som bestemmer hva du egentlig trenger der.

 

Neste ting du må skjønne er at Event er egentlig bare en Property. Forskjellen er at Event tar prosedyre som verdi. Og prosedyren må være av spesifisert type - nettopp den typen som er spesifisert i definisjonen, da får du også automatisk parameterliste osv.

 

Så du definerer en ny event på denne måten:

private
 FOnNyMouseDown:TNyMouseEvent;
{...}
published
 OnNyMouseDown:TNyMouseEvent read FOnNyMouseDown write FOnNyMouseDown;

Variabelen FOnNyMouseDown skal da inneholde en peker til event-prosedyren dersom den er definert og resten av koden kan da brukes akkurat som jeg skrev tidligere.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...