AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Sounds bei Maus-Hover

Sounds bei Maus-Hover

Ein Thema von NiLS-Da-BuBi · begonnen am 13. Nov 2002 · letzter Beitrag vom 15. Nov 2002
Antwort Antwort
NiLS-Da-BuBi

Registriert seit: 12. Nov 2002
Ort: Daun, Rheinland-Pfalz
25 Beiträge
 
Delphi 4 Client/Server
 
#1

Sounds bei Maus-Hover

  Alt 13. Nov 2002, 14:07
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.
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#2
  Alt 13. Nov 2002, 14:14
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
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von braingrenade
braingrenade

Registriert seit: 30. Okt 2002
Ort: Neufra
274 Beiträge
 
Delphi 6 Personal
 
#3
  Alt 13. Nov 2002, 17:27
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
  Mit Zitat antworten Zitat
NiLS-Da-BuBi

Registriert seit: 12. Nov 2002
Ort: Daun, Rheinland-Pfalz
25 Beiträge
 
Delphi 4 Client/Server
 
#4
  Alt 14. Nov 2002, 23:21
Zitat von d3g:
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
Danke für die Hilfe... ich benutze inzwischen Delphi 6... Aber zurück zum Problem... ich versteh nix - Also ich verstehe ja die Idee die dahinter steckt - nur in der Umsetzung harpert es, ausserdem habe ich mal die OnEnter Ereignisshandlung eines TButtons probiert - die wird nur dann aktiv - wenn man klickt... was ja eigntlich nicht sein sollte, oder? Hmm...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5
  Alt 14. Nov 2002, 23:34
Einen Hover-Effekt bekommst du mit TTRACKMOUSEEVENT hin: TrackmouseEvent Function. Ist aber nicht einfach!
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 15. Nov 2002, 00:00
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];
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
NiLS-Da-BuBi

Registriert seit: 12. Nov 2002
Ort: Daun, Rheinland-Pfalz
25 Beiträge
 
Delphi 4 Client/Server
 
#7
  Alt 15. Nov 2002, 01:02
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.
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#8
  Alt 15. Nov 2002, 14:11
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:
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;
MfG,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz