Autor Beitrag
RFZ
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137

WinME, WinXP, Win2k*, Win98*, Win95*, Win3.11*, DOS* (*VMware)
D4 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137

WinME, WinXP, Win2k*, Win98*, Win95*, Win3.11*, DOS* (*VMware)
D4 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: Mi 14.08.02 11:32 
Hi,

Anstatt Hook kannst du ja auch Hotkeys mit
der RegisterHotKey API registrieren.

Hier ein einfaches Beispiel:

ausblenden volle Höhe Quelltext
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137

WinME, WinXP, Win2k*, Win98*, Win95*, Win3.11*, DOS* (*VMware)
D4 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137

WinME, WinXP, Win2k*, Win98*, Win95*, Win3.11*, DOS* (*VMware)
D4 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Mi 14.08.02 11:53 
Wenn ich Hotkey's systemweit definiere, werden die gleichen HotKey's in den anderen Anwendungen deaktiviert.
RFZ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137

WinME, WinXP, Win2k*, Win98*, Win95*, Win3.11*, DOS* (*VMware)
D4 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: Mi 14.08.02 12:02 
Denke aber noch daran, dass du unter NT/2000/XP die F12-Taste
nicht als Hotkey registrieren kannst.