/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Fange mouse events inde i en komponent...
Fra : Thomas Eg Jørgensen


Dato : 01-02-03 00:12

Hej

Jeg har lavet en grafisk komponent. Inde i denne komponent vil jeg gerne
kunne flytte rundt på de grafiske "emner" på selve komponenten. Dette
drag'n'drop vil jeg gerne have til at foregå i koden til komponenten.
Ligledes vil jeg gerne kunne "trække" i min "emner" så de f.eks. bliver
større eller mindre...

Mit problem ligger i at fange mouseover og benytte den inde i
komponentkoden, jeg kan godt aktivere mouseover og så få komponentens parent
til at reagere på den, men selve komponenten?.
Når jeg så har mit "trækkeri" er færdig skal min komponent også udløse en
event af en slags som fortæller hvad brugeren har lavet...Hvorledes klarer
jeg den?
Er der nogen der kan give mig en ledetråd til de to spørgsmål?

PS. Min komponent nedstammer fra TGraphiccontrol og jeg anvender D6.

På forhånd tak!

MVH
Thomas



 
 
Claus Christiansen (01-02-2003)
Kommentar
Fra : Claus Christiansen


Dato : 01-02-03 01:08

"Thomas Eg Jørgensen" <thomas@kontorbutikken.dk> wrote in
news:b1evnr$230$1@sunsite.dk:

> Hej
>
> Jeg har lavet en grafisk komponent. Inde i denne komponent vil jeg
> gerne kunne flytte rundt på de grafiske "emner" på selve
> komponenten. Dette drag'n'drop vil jeg gerne have til at foregå i
> koden til komponenten. Ligledes vil jeg gerne kunne "trække" i min
> "emner" så de f.eks. bliver større eller mindre...

Det lyder som noget med at override metoderne:

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

Disse er nedarvet fra TControl og erklæret som dynamic, så det er bare at
gå i gang (husk at kalde inherited). Det er muligt der er metoder, der er
bedre det kommer lidt an på din opbygning af dine delkomponenter - fx.

procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState;
var Accept: Boolean); dynamic;
procedure DoEndDrag(Target: TObject; X, Y: Integer); dynamic;
procedure DoStartDrag(var DragObject: TDragObject); dynamic;

men jeg tvivler på at det er noget du skal bruge.

> Mit problem ligger i at fange mouseover og benytte den inde i
> komponentkoden, jeg kan godt aktivere mouseover og så få
> komponentens parent til at reagere på den, men selve komponenten?.
> Når jeg så har mit "trækkeri" er færdig skal min komponent også
> udløse en event af en slags som fortæller hvad brugeren har
> lavet...Hvorledes klarer jeg den?
> Er der nogen der kan give mig en ledetråd til de to spørgsmål?

Til den sidste del lyder det om som du har brug for at definere dine egne
events, dette kan du gøre sådan at de sender lige præcis de information
med som du har brug for (det er dog pænest at bevare en "Sender: TObject"
parameter, men ikke en nødvendighed).
Som eksempel har jeg sakset lidt fra Borlands kode:


TMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState;
X, Y: Integer) of object;


TMyControl = class
private
FOnMouseMove: TMouseMoveEvent;
....
public
....
property OnMouseMove: TMouseMoveEvent read FOnMouseMove write
FOnMouseMove;
end;

/Claus

--
Claus Christiansen, <mailto:NOSPAM@unipeople.dk>, leave the adr. as it is
personal: <http://unipeople.dk/~cch>; pythia: <http://www.pythia.dk>
===========================================================--------------
"Computers are useless. They can only give you answers" - Pablo Picasso

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste