![]() |
Re: JoyMedia - Mediensteuerung über Joystick
Zitat:
![]() Zitat:
Beispiel:
Delphi-Quellcode:
Falls man es dann konvertieren könnte dann könnstest du ja die Funktion leict umändern:
procedure LoadData;
begin // Lade daten aus der Ini ini := TIniFile..... try if ini.ReadInteger('IniData', 'Version', -1) <> Version {= z.B. 1 oder 23} then ini.Clear; // Falls das net gibt : Ich meine, dass der Inhalt gelöscht wird... Kannst ja mal suchen oder fragen ;)) finally ini.Free; end; end;
Delphi-Quellcode:
case ini.ReadInteger('IniData', 'Version', -1) of
X : ... // kompatibel Y : ... // konvertierbar else ini.Clear; // Ansonsten "leeren" ;) end; Zitat:
Meine erste Angabe (Ist eine Beta) oder was meinst du? Oder den ersten Post? Ich verstehe leider nicht ganz. |
Re: JoyMedia - Mediensteuerung über Joystick
Zitat:
danke Hybrid666 |
Re: JoyMedia - Mediensteuerung über Joystick
neue version online
|
Re: JoyMedia - Mediensteuerung über Joystick
LAUT EINEM KUMPEL FUNKTIONIOEREN AUCH (warum auch immer) MANCHE GAMEPORT JOYSTICKS (seiner z.b., ein medion teil) MIT DEM PROGRAMM. FALLS IHR EINEN GP JOYSTICK DAHEIM HABT, KÖNNTET IHR ES TESTEN UND SAGEN BEI WELCHEM GAMEPORT (onboard, welche soundskarte etc) WELCHER JOYSTICK (marke, bezeichnung) BEI EUCH GEHT?
MfG Hybrid666 |
Re: JoyMedia - Mediensteuerung über Joystick
Neue Version online mit zahlreichen verbesserungen und mit weniger bugs :D
|
Re: JoyMedia - Mediensteuerung über Joystick
Neue version online.
|
Re: JoyMedia - Mediensteuerung über Joystick
Liste der Anhänge anzeigen (Anzahl: 1)
TUTORIAL: DLLs / Plugins für JoyMedia erstellen Schritt 1: Das Grundgerüst Jedes Plugin braucht 4 Grundfunktionen, welche in der DLL vorhanden sein MÜSSEN. Das wären:
Delphi-Quellcode:
Die funktionen enthalten jeweils die prozedurnamen, die z.B. auf Joystick Buttons gelegt werden können.
function GetButtonFunc():PChar;
function GetAxesFunc():PChar; function GetSliderFunc():PChar; function GetHatFunc():PChar; procedure info(funct:PChar); In die Funktionen selbst müssen diese namen dann zurückgegeben werden. Ich zeig mal ein beispiel anhand meiner Winamp.dll:
Delphi-Quellcode:
Ich denke es sollte alles klar sein, die funktionen müssen durch | getrennt werden. Die groß und kleinschreibung ist bei den funktionsnamen im returntzeil egal, sie werden alle mit ToLower aufgerufen.
function GetButtonFunc():PChar;
begin result := PChar('Play|Pause|Stop|Start|Close|ToggleShuffle|ToggleRepeat|NextTrack|PreviousTrack|Volume'); end; function GetAxesFunc():PChar; begin result := PChar('Seek|AxesVolume'); end; function GetSliderFunc():PChar; begin result := PChar('SliderVolume'); end; function GetHatFunc():PChar; begin result := PChar(''); end; Dann haben wir noch die info prozedur. Auch hier ein beispiel:
Delphi-Quellcode:
Wie ihr seht, auch kein Hexenwerk. Die info prozedur ist dazu da, die Infos beim klick auf den Info button in JoyMedia anzuzeigen. Also hier ist jeweils in funct gespeichert, welche Funktion grade ausgewählt ist. Das hier ist jetzt etwas schlampig programmiert. Mit einer case anweißung wäre es glaub ich besser :P.
procedure info(funct:PChar);
begin if (funct = 'play') then ShowMessage('Sends play Command to Winamp' +#13+#10+ 'Parameters:' +#13+#10+ '(none)'); if (funct = 'pause') then ShowMessage('Pauses current track in Winamp' +#13+#10+ 'Parameters:' +#13+#10+ '(none)'); if (funct = 'stop') then ShowMessage('Stops current track in Winamp' +#13+#10+ 'Parameters:' +#13+#10+ '(none)'); if (funct = 'start') then ShowMessage('Runs Winamp' +#13+#10+ 'Parameters:' +#13+#10+ '(none)'); if (funct = 'close') then ShowMessage('Closes Winamp' +#13+#10+ 'Parameters:' +#13+#10+ '(none)'); if (funct = 'toggleshuffle') then ShowMessage('Toggles shuffle state in Winamp' +#13+#10+ 'Parameters:' +#13+#10+ '(none)'); if (funct = 'toggerepeat') then ShowMessage('Toggles repeat state in Winamp' +#13+#10+ 'Parameters:' +#13+#10+ '(none)'); if (funct = 'nexttrack') then ShowMessage('Plays next track of Winamp playlist' +#13+#10+ 'Parameters:' +#13+#10+ '-repeat (on/off) (default = off) (if button is hold, repeat track skipping)'); if (funct = 'previoustrack') then ShowMessage('Plays previous track of Winamp playlist' +#13+#10+ 'Parameters:' +#13+#10+ '-repeat (on/off) (default = off) (if button is hold, repeat track skipping)'); if (funct = 'slidervolume') then ShowMessage('Change Volume via Slider' +#13+#10+ 'Parameters:' +#13+#10+ '(none)'); if (funct = 'volume') then ShowMessage('Change Volume via Button' +#13+#10+ 'Parameters:' +#13+#10+ '-up NUM (increases Volume)' +#13+#10+ '-down NUM (decreases Volume)' +#13+#10+ '-repeat (on/off) (If button is hold, repeat volume inc/drecrease) (default = off)'); if (funct = 'seek') then ShowMessage('Seek track by fast forwarding/backwarding' +#13+#10+ 'Parameters:' +#13+#10+ '(none)'); if (funct = 'axesvolume') then ShowMessage('Increase/Decrease volume by Axes' +#13+#10+ 'Parameters:' +#13+#10+ '-value NUM (default = 5)'); end; Wichtig ist auch noch: Alle anderen prozeduren, MÜSSEN kleingeschrieben deklariert und exportiert werden. Funktionen werden mit ToLower aufgerufen. Ich weiß nicht warum, aber bei dlls scheint delphi CaseSensitive zu sein. Auchnoch wichtig ist: als erste USES unit MUSS "ShareMem" rein! Ich arbeite grade noch dran sharemem rauszuhaun, weiß aber noch net wie! 2. Button Funktionen Eine button funktion sieht folgendermaßen aus:
Delphi-Quellcode:
In param werden hierbei die in JoyMedia eingestellten parameter für die funktion übergeben und in state der zustand des Buttons. Dabei gibt es 3 zustände:
procedure test(param,state:PChar);export;
begin end; 0 für Button wurde gedrückt 1 für Button wird gehalten (also wurde noch nicht released, funktion wurde abern ochmals getriggert) 2 für Button wurde released. Das ganze Muss dann natürlich noch in export rein. Hier mal eine kleine beispielfunktion: Diese prozedur steuert das toggeln auf den nächsten track in winamp. hierbei werden states 0 und 1 verwendet, 1 allerdings nur, wenn der parameter -repeat auf on steht.
Delphi-Quellcode:
3. Achsen und Slider funktionen
procedure nexttrack(param,state:PChar);export;
begin if state = PChar('0') then begin if (getwinamphwnd > 0) then SendMessage(getwinamphwnd,WM_COMMAND,40048,0); end; if (state = PChar('1')) and (param <> '') then begin if (GetParamValue(string(param),'-repeat') = 'on') then begin if (getwinamphwnd > 0) then SendMessage(getwinamphwnd,WM_COMMAND,40048,0); end; end; end; Die Grundfunktion sieht so aus:
Delphi-Quellcode:
dabei werden die variablen pos, velo, accel und max als integer, sowie param als PChar übergeben.
procedure seek(pos,velo,accel,max:integer; param: PChar);export;
begin end; Pos speichert die aktuelle position der achse, velo die Velocity, accel die Beschleunigung und Max den maximalen wert, ins negative sowie ins positive (ins negative ist es -max) Hier eine kleine beispeilfunktion: Diese funktion lässt zu, über die achsen im Winamp track vor und zurück zu spulen. Allerdings wird nicht auf die momentane beschleunigung geachtet:
Delphi-Quellcode:
SLIDER FUNKTIONIEREN AUF GENAU DIESELBE WEIßE, ICH WOLLTE NUR EINE EXTRA SPARTE FÜR SLIDERFUNKTIONEN HABEN, DA DIESE IMMER EINE FIXE POSITION NACH DEM BEWEGEN HABEN.
procedure seek(pos,velo,accel,max:integer; param: PChar);export;
begin if pos > 0 then begin if (getwinamphwnd > 0) then SendMessage(getwinamphwnd,WM_COMMAND,40148,0); end; if pos < 0 then begin if (getwinamphwnd > 0) then SendMessage(getwinamphwnd,WM_COMMAND,40144,0); end; end; Hier eine Beispielfunktion für Slider:
Delphi-Quellcode:
Ich hänge nun zum schluss noch den kompletten code von der winamp.dll an, zum anschaun, abgucken und sonstwas :D ich hoffe das DLLs entstehen werden!
procedure slidervolume(pos,velo,accel,max:integer; param:PChar);export;
var i: real; begin i := 100 / StrToFloat(IntToStr(max * 2)); if pos >= 0 then i := (pos + max) * 2.55 * i; if pos < 0 then i := (max - abs(pos))*2.55*i; if (getwinamphwnd > 0) then SendMessage(getwinamphwnd,WM_USER,trunc(i),122); end; |
Re: JoyMedia - Mediensteuerung über Joystick
neue version online
|
Re: JoyMedia - Mediensteuerung über Joystick
- aufgrund zu geringer nachfrage eingestellt -
kann geclosed werden... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 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-2025 by Thomas Breitkreuz