![]() |
Sounds bei Maus-Hover
Ich habe eine ToolBar ... so nun möchte ich jedesmal wenn der Mauszeiger über einer Schaltfläche ist eine Wave Datei abegespielt haben... nun ich finde aber keine Ereignisshandlung die meinen Bedürfnissen entspricht... wenn ich meinen Code in OnMouseMove schreibe hört sich das an wie ein Geigerzähler da die Datei bei jeder kleinen Bewegung erneut abgespielt wird... der Sound soll aber nur einmal abgespielt werden - bis er die nächste schaltfläche überfliegt... irgendeine Idee dazu? Das ist mein Code für die Ereignisshandlung:
PlaySound(PChar(ExtractFilePath(ParamStr(0))+'\aud io\move.wav'), 0, SND_FILENAME + SND_ASYNC); Villeicht ist mein Ansatz mit PlaySound ja falsch. |
Hi Nils,
was ist mit den Events OnMouseEnter / OnMouseLeave? Das sollte bringen, was du brauchst und müsste in D4C/S schon vorhanden sein (wenn nicht, musst du eine Komponente als Nachfolger von TButton definieren, die TButton.WndProc überschreibt, und dann diese Komponente benutzen). In OnMouseEnter könntest du PlaySound so wie du es jetzt machst ausführen und in OnMouseLeave PlaySound(nil, 0, SND_PURGE) aufrufen, um den Sound zu killen, damit es keine Überlappungen der Sounds gibt. MfG, d3g |
Moin Nils ,
du kannst ja auch einfach ne bool-Variable auf true setzen wenn die maus drüber ist : if mausdrueber = true then playsound ; Viel Spaß , braingrenade |
Zitat:
|
Einen Hover-Effekt bekommst du mit TTRACKMOUSEEVENT hin:
![]() |
Moin Nils,
OnEnter/OnExit werden ausgelöst sobald ein Control (Button, Enter, usw.) den Tastaturfokus erhalten. Das geht nicht nur mit anklicken, sondern, z.B., auch per Tab Taste. Mit dem von d3g vorgeschlagenen OnMouseEnter/Leave ginge das eventuell so:
Code:
[b]type[/b]
TForm1 = [b]class[/b](TForm) Button1: TButton; Edit1: TEdit; [b]procedure[/b] Edit1Enter(Sender: TObject); [b]private[/b] [color=#000080]{ Private-Deklarationen }[/color] [b]procedure[/b] CMMouseEnter([b]var[/b] Message: TMessage); message CM_MOUSEENTER; [b]procedure[/b] CMMouseLeave([b]var[/b] Message: TMessage); message CM_MOUSELEAVE; [b]public[/b] [color=#000080]{ Public-Deklarationen }[/color] [b]end[/b]; [b]var[/b] Form1: TForm1; [b]implementation[/b] [color=#000080]{$R *.DFM}[/color] [b]procedure[/b] TForm1.CMMouseEnter([b]var[/b] Message: TMessage); [b]var[/b] ptWork : TPoint; [b]begin[/b] GetCursorPos(ptWork); [b]if[/b] WindowFromPoint(ptWork) = Button1.Handle [b]then[/b] [b]begin[/b] Edit1.Text := 'Hab ihn'; [b]end[/b]; [b]end[/b]; [b]procedure[/b] TForm1.CMMouseLeave([b]var[/b] Message: TMessage); [b]var[/b] ptWork : TPoint; [b]begin[/b] GetCursorPos(ptWork); [b]if[/b] WindowFromPoint(ptWork) <> Button1.Handle [b]then[/b] [b]begin[/b] Edit1.Text := 'Weg isser'; [b]end[/b]; [b]end[/b]; |
Aaah jetzt ja... Danke! Jetzt klappt es... hmmm da kommt aber ne menge auf mich zu - da muss ich ja jede Schaltfläche die im grunde "betont" sein soll dort eintragen... - hmmm naja jedenfalls ein wenig schlauer. Danke.
|
Hi Nils,
du kannst auch im Objektinspektor für alle Buttons die gleiche Prozedur einstellen. Dann kann man das ganze auch schön automataisieren. Nehmen wir an, dass du ein globales eindimensionales Array sounds[] vom Typ PChar hast, in dem alle Dateinamen zu den Sounds gespeichert sind, dann trägst du an jedem Button in der Eigenschaft Tag die Nummer des jeweiligen Sounds ein, unter der er im Array gespeichert is (sieh zu, dass du das Array mit 1 beginnst, 0 ist nämlich die Standardeinstellung für Tag). Dann kannst du folgendes veranstalten:
Code:
MfG,
type
TMyForm = class(TForm) private procedure ButtonSoundOn(Sender: TObject); procedure ButtonSoundOff(Sender: TObject); end; procedure TMyForm.ButtonSoundOn(Sender: TObject); begin PlaySound(sounds[TButton(Sender).Tag], 0, SND_FILENAME or SND_ASYNC); end; procedure TMyForm.ButtonSoundOff(Sender: TObject); begin PlaySound(nil, 0, SND_PURGE); end; d3g |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz