24. juni 2003 - 20:26Der er
11 kommentarer og 1 løsning
Problemer med OnMouseMove
Hejsa
Er ved at lave et program (funktionen er ligemeget), og heri har jeg nogle knapper, der udøver forskellíge funktion. Når man kører musen over en af disse knapper, skal der komme en beskrivelse af hvad knappen gør og vises et billede.
Jeg har også fået det til at virke med event'en OnMouseMove, men så snart musen bevæges en smule (også selvom den stadig er inde over knappen) kommer billedet og teksten til at "flimre" fordi den loades igen. - Hvad kan man gøre ved det??
begin if Desc.Caption = 'Standardtext' then Begin Desc.Caption := 'Beskrivelse'; Program_Logo.Picture.LoadFromFile('Picz/miktex.bmp'); End else Begin Desc.Caption := 'Standardtext'; Program_Logo.Picture.LoadFromFile('Picz/blank.bmp'); End end;
Danmark vil mindske afhængigheden af globale techgiganter, men det kræver mere end politiske formuleringer og strategier, understreger PROSA’s formand Niels Bertelsen.
Det du har brug for er at bruge OnMouseEnter og OnMouseLeave. De findes ikke i de fleste standartkomponenter men dem kan du.selv tilføje Du laver et nyt component der bygger på TButton hvor der er tilføjet følgende events: OnMouseEnter og OnMouseLeave.
Du laver en unit med følgende indhold:
//****************************************************** unit MyButtonunit;
type TEntrerEvent = procedure(Sender: TObject) of object; TLeaveEvent = procedure(Sender: TObject) of object; TMyButton = class(TButton) private { Private declarations } FOnEnter: TEnterEvent; FOnExit: TLeaveEvent; procedure CMMouseEnter(var msg: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE; protected { Protected declarations } public { Public declarations } published { Published declarations } property OnMouseEnter: TEnterEvent read FOnEnter write FOnEnter; property OnMouseLeave: TLeaveEvent read FOnExit write FOnExit;
end;
procedure Register;
implementation
procedure TMyButton.CMMouseEnter(var msg: TMessage); begin inherited;
if Assigned(FOnEnter) then FOnEnter(Self); end;
procedure TMyButton.CMMouseLeave(var msg: TMessage); begin inherited; if Assigned(FOnExit) then FOnExit(self); end;
procedure Register; begin RegisterComponents('Additional', [TMyButton]); end;
end. //****************************************************** Denne unit gemmer du og registrerer som et nyt component. Når det er installeret har du et component der hedder TMyButton som findes under Additional, Det fungerer fuldstændigt som TButton bortset fra de 2 nye events. Det kan naturligvis og laves med andre komponenter.
Men du kunne også lave en variabel så du altid ved hvad for et image der bliver vist.
var FVist:string;
...
procedure TSetupWindow.Install_miktexMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Desc.Caption = 'Standardtext' then Begin if FVist = 'miktex.bmp' then exit; Desc.Caption := 'Beskrivelse'; Program_Logo.Picture.LoadFromFile('Picz/miktex.bmp'); FVist := 'miktex.bmp'; End else Begin if FVist = 'blank.bmp' then exit; Desc.Caption := 'Standardtext'; Program_Logo.Picture.LoadFromFile('Picz/blank.bmp'); FVist := 'blank.bmp'; End; end;
Hej Steffen Jeg har været lidt optaget, men gør sådan her.
1.Åbn delphi og of klik "File/new/unit". 2.Gem unit'en som MyButtonUnit i en mappe. 3.Slet derefter alt koden i unit'en. 4.Kopier teksten fra mit tidligere svar og indsæt i den tomme unit. (dog undtaget mine kommentarer øverst og nederst). 5. Tilføj under "uses" ordet: ,StdCtrls (det havde jeg glemt) 5. Klik på "File/Save"
Nu skal komponenten registreres.
1. Klip på "Component/install Component" 2. Find den unit du gemte stien står under "Unit filename" 3. Klik på "Into new package" og skriv et navn under "Package filename" f.eks "Buttons" 4 Klik OK 5 Klik Yes. 6 Klik Install 7 Komponenten finde nu under "Additional"
Hej Steffen Med lanstorps rettelse fungerer det her hos mig. Jeg ved ikke hvorfor du får den fejl. Men prøv igen at installere komponenten og vælg et andet navn til pakken f.eks. "Knapper".
Fejlen (Program or unit 'Buttons' recursively uses itself) får man hvis to uniter henviser til hinanden under "uses" øverst under "interface". Det kan normalt løses ved istedet at tilføje uniten i "uses" under "implementation"
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.