Autor |
Beitrag |
RFZ
Beiträge: 137
WinME, WinXP, Win2k*, Win98*, Win95*, Win3.11*, DOS* (*VMware)
D4 Prof
|
Verfasst: Mi 14.08.02 08:58
Moin,
nachdem ich jetzt mehrere Monate lang ein F-Tasten Programm gebastelt hab, welches zwar funktioniert, aber leider manchmal einen 'Runtime error' erzeugt, hoffe ich auf eure hilfe... Nicht um den Fehler zu beseitigen, denn das hab ich hier schon öfters versucht, sondern ich bitte euch mir eins zu programmieren ;) Meine Anforderungen sind ja net gross *g* Eine Form, wo ich was draufbasteln kann, und sonst muss es noch Sounds abspielen können... Die Sounds sind im Unterordner 'sounds' und hiessen f1.wav bis f12.wav (falls es auch mp3 unterstützt wär das SUPER!!). Das wichtigste, und auch das wo meisstens der Fehler herstammt, die Sounds werden beim drücken der F1-F12 Tasten abgespielt, das soll natürlich immer funktionieren, und v.a. soll die eigentliche Funktion der Tasten (Hilfe, Aktualisieren, etc.) unterdrückt werden!
Ich hoffe ihr könnt mir dabei helfen...
cu RFZ
|
|
Klabautermann
Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mi 14.08.02 10:51
Hallo,
welche Delphi Version hast du denn?
Wenn die nicht besonders alt ist dann sollte dir eine Actionlist und der die Mediaplayer Komponenten Rechren. Du legts in der AL einfach 12 Actions an und vergibst als Hotkey die Tasten F1-F12. Diese rufen dann die von dir geschriebende Procedure PlaySong(SongName : STRING); auf, welche die Datei (SongName) in den Medialayer läd und Play aufruft.
Warscheinlich nicht die Eleganteste lösung aber sie ist vorallen eins - einfach.
Gruß
Klabautermann
|
|
RFZ
Beiträge: 137
WinME, WinXP, Win2k*, Win98*, Win95*, Win3.11*, DOS* (*VMware)
D4 Prof
|
Verfasst: Mi 14.08.02 11:00
Das Programm muss Systemweit die F-Sounds abspielen können (also auch wenn minimiert), und muss ausserdem die eigentliche Funktion der F-Tasten unterdrücken (Hilfe, etc.). Beides denke ich mal ist in deinem Fall nicht gegeben. Soweit ich weiss muss man es mit einer DLL (Hooks) machen. Delphi 4 hab ich übrigens...
Normalerweise würde ich sowas nicht verlangen, aber soein Quellcode inkl. dll dürfte nicht über 50 Zeilen hinauswachsen, also bitte ich euch mir das gröbste einfach bereitzustellen, da ich ja, wie gesagt, seit meheren Monaten eins hab welches wunderbar funktioniert, aber ab und zu Runtime errors verursacht.
cu RFZ
-----------------------------------------------------------
Ach ja, mein vorheriges Posting ist hier:
http://www.auq.de/viewtopic.php?t=1070
|
|
toms
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Mi 14.08.02 11:32
Hi,
Anstatt Hook kannst du ja auch Hotkeys mit
der RegisterHotKey API registrieren.
Hier ein einfaches Beispiel:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70:
| unit Unit1;
interface
uses Windows, Messages, Forms, Dialogs, Classes, Controls, StdCtrls, Sysutils;
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private HotkeyIds: Array[1..12] of Integer; // Hotkey Ids procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; // Hotkey handler end;
var Form1: TForm1;
implementation
{$R *.DFM}
uses MMSystem;
// Hotkeys abfangen procedure TForm1.WMHotKey(var Msg: TWMHotKey); var TonDatei : string; i, HotkeyNr: Byte; begin HotkeyNr := 0; // Welcher Hotkey wurde gedrückt? for i := 1 to 12 do if HotkeyIds[i] = Msg.HotKey then begin HotkeyNr := i; Break; end; if HotkeyNr <> 0 then begin TonDatei := ExtractFilePath(ParamStr(0)) + 'Ton' + IntToStr(HotkeyNr) + '.wav'; // Datei abspielen PlaySound(PChar(TonDatei), 0, SND_FILENAME + SND_ASYNC); end; end;
// Hotkeys registrieren procedure TForm1.FormCreate(Sender: TObject); var i: Byte; begin for i := 1 to 12 do begin HotkeyIds[i] := GlobalAddAtom(PChar('Hotkey'+InttoStr(i))); RegisterHotKey(Handle, HotkeyIds[i], 0, i+ VK_F1 - 1); end; end;
// Hotkeys Registrierung rückgängig machen procedure TForm1.FormDestroy(Sender: TObject); var i: Byte; begin for i := 1 to 12 do UnRegisterHotKey(Handle, HotkeyIds[i]); end;
end. |
|
|
RFZ
Beiträge: 137
WinME, WinXP, Win2k*, Win98*, Win95*, Win3.11*, DOS* (*VMware)
D4 Prof
|
Verfasst: Mi 14.08.02 11:36
Wenn es funktioniert wäre es super, aber soweit ich weiss kann ich nicht zwingend Hotkeys registrieren, also wenn mir ein Programm zuvorkommt, kann ich den hotkey nicht mehr verwenden. Ausserdem geh ich davon aus dass die eigentliche Funktion der F-Tasten nicht unterdrückt wird.
cu RFZ
|
|
toms
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Mi 14.08.02 11:37
Zitat: | und v.a. soll die eigentliche Funktion der Tasten (Hilfe, Aktualisieren, etc.) unterdrückt werden! |
Zitat: | dass die eigentliche Funktion der F-Tasten nicht unterdrückt wird |
Widerspruch?
|
|
RFZ
Beiträge: 137
WinME, WinXP, Win2k*, Win98*, Win95*, Win3.11*, DOS* (*VMware)
D4 Prof
|
Verfasst: Mi 14.08.02 11:40
Zitat: | Ausserdem geh ich davon aus dass die eigentliche Funktion der F-Tasten nicht unterdrückt wird. |
Das war auf dein Beispiel (Hotkeys) bezogen.
Ich will dass sie unterdrückt werden.
cu RFZ
|
|
toms
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Mi 14.08.02 11:48
Zitat: | aber soweit ich weiss kann ich nicht zwingend Hotkeys registrieren, also wenn mir ein Programm zuvorkommt, kann ich den hotkey nicht mehr verwenden |
Stimmt.
Zitat: | Ausserdem geh ich davon aus dass die eigentliche Funktion der F-Tasten nicht unterdrückt wird. |
Doch, die eigentliche Funktion der Taste wird unterdrückt.
tom
|
|
bis11
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Mi 14.08.02 11:53
Wenn ich Hotkey's systemweit definiere, werden die gleichen HotKey's in den anderen Anwendungen deaktiviert.
|
|
RFZ
Beiträge: 137
WinME, WinXP, Win2k*, Win98*, Win95*, Win3.11*, DOS* (*VMware)
D4 Prof
|
Verfasst: Mi 14.08.02 11:55
Cool, das funktioniert !!!
Erlich gesagt frag ich mich wieso mir jetzt erst jemand sagt dass es mit Hotkeys auch geht, obwohl alle gewusst haben dass Hooks sehr kompliziert sind *g*
DANKE JEDENFALLS!!!
cu RFZ
|
|
toms
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Mi 14.08.02 12:02
Denke aber noch daran, dass du unter NT/2000/XP die F12-Taste
nicht als Hotkey registrieren kannst.
|
|
|