AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte JoyMedia - Mediensteuerung über Joystick

JoyMedia - Mediensteuerung über Joystick

Ein Thema von Hybrid666 · begonnen am 5. Jan 2007 · letzter Beitrag vom 8. Dez 2008
Antwort Antwort
Seite 3 von 3     123
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Re: JoyMedia - Mediensteuerung über Joystick

  Alt 9. Jan 2007, 21:48
Zitat von Hybrid666:
Danke erstmal an die letzen 2 Threads
Die ganzen Post sind zusammen ein Thread

Zitat von Hybrid666:
WICHTIG: Wer die neue Version downloaded BITTE DIE ALTE INI FILE NICHT WEITERVERWENDEN ODER IN JEDE BUTTON SLIDER UND AXES RUBRIK "parameter=" (ohne " ") REINSETZEN! SONST ABSTURZ!
Oder du fügst einen EIntrag "Version" ein, und wenn die Version nicht gegeben ist, oder nicht benutzt werden kann, dann lösche die ini, oder auch nur die Einträge Ist meiner Meinung nach benutzerfreundlicher.

Beispiel:
Delphi-Quellcode:
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;
Falls man es dann konvertieren könnte dann könnstest du ja die Funktion leict umändern:
Delphi-Quellcode:
case ini.ReadInteger('IniData', 'Version', -1) of
  X : ... // kompatibel
  Y : ... // konvertierbar
  else ini.Clear; // Ansonsten "leeren" ;)
end;
Zitat von jokerfacehro:
naja ich glaube deind ritter punkt beantwortet sich von selbst, wenn du dir den ersten eintrag durchliest
eintrag = ?
Meine erste Angabe (Ist eine Beta) oder was meinst du? Oder den ersten Post? Ich verstehe leider nicht ganz.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#2

Re: JoyMedia - Mediensteuerung über Joystick

  Alt 9. Jan 2007, 22:26
Zitat von xZise:
Zitat von Hybrid666:
Danke erstmal an die letzen 2 Threads
Die ganzen Post sind zusammen ein Thread

Zitat von Hybrid666:
WICHTIG: Wer die neue Version downloaded BITTE DIE ALTE INI FILE NICHT WEITERVERWENDEN ODER IN JEDE BUTTON SLIDER UND AXES RUBRIK "parameter=" (ohne " ") REINSETZEN! SONST ABSTURZ!
Oder du fügst einen EIntrag "Version" ein, und wenn die Version nicht gegeben ist, oder nicht benutzt werden kann, dann lösche die ini, oder auch nur die Einträge Ist meiner Meinung nach benutzerfreundlicher.

Beispiel:
Delphi-Quellcode:
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;
Falls man es dann konvertieren könnte dann könnstest du ja die Funktion leict umändern:
Delphi-Quellcode:
case ini.ReadInteger('IniData', 'Version', -1) of
  X : ... // kompatibel
  Y : ... // konvertierbar
  else ini.Clear; // Ansonsten "leeren" ;)
end;
Zitat von jokerfacehro:
naja ich glaube deind ritter punkt beantwortet sich von selbst, wenn du dir den ersten eintrag durchliest
eintrag = ?
Meine erste Angabe (Ist eine Beta) oder was meinst du? Oder den ersten Post? Ich verstehe leider nicht ganz.
Sehr sehr gute idee, werde das mal machen, im prinzip kann ich ja von vers. 0.04 auf 0.05 einfach die einträge reinamchen, die momentanen plugins haben eben noch keine funktion die das nutzt, ich kann auch einfach abfragen ob param= exisitert, wenn nicht schicke einfach nen leeren parameter (was imo auch bei allen passiert)...

danke

Hybrid666
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#3

Re: JoyMedia - Mediensteuerung über Joystick

  Alt 11. Jan 2007, 15:26
neue version online
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#4

Re: JoyMedia - Mediensteuerung über Joystick

  Alt 16. Jan 2007, 20:34
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
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#5

Re: JoyMedia - Mediensteuerung über Joystick

  Alt 9. Feb 2007, 16:36
Neue Version online mit zahlreichen verbesserungen und mit weniger bugs
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#6

Re: JoyMedia - Mediensteuerung über Joystick

  Alt 16. Jul 2008, 14:42
Neue version online.
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#7

Re: JoyMedia - Mediensteuerung über Joystick

  Alt 16. Jul 2008, 14:58
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:
function GetButtonFunc():PChar;
function GetAxesFunc():PChar;
function GetSliderFunc():PChar;
function GetHatFunc():PChar;
procedure info(funct:PChar);
Die funktionen enthalten jeweils die prozedurnamen, die z.B. auf Joystick Buttons gelegt werden können.
In die Funktionen selbst müssen diese namen dann zurückgegeben werden. Ich zeig mal ein beispiel anhand meiner Winamp.dll:
Delphi-Quellcode:
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;
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.

Dann haben wir noch die info prozedur. Auch hier ein beispiel:

Delphi-Quellcode:
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;
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 .

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:
procedure test(param,state:PChar);export;
begin

end;
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:
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:
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;
3. Achsen und Slider funktionen

Die Grundfunktion sieht so aus:
Delphi-Quellcode:
procedure seek(pos,velo,accel,max:integer; param: PChar);export;
begin

end;
dabei werden die variablen pos, velo, accel und max als integer, sowie param als PChar übergeben.
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:
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;
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.

Hier eine Beispielfunktion für Slider:
Delphi-Quellcode:
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;
Ich hänge nun zum schluss noch den kompletten code von der winamp.dll an, zum anschaun, abgucken und sonstwas ich hoffe das DLLs entstehen werden!
Angehängte Dateien
Dateityp: dpr winamp_296.dpr (9,2 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#8

Re: JoyMedia - Mediensteuerung über Joystick

  Alt 25. Nov 2008, 11:20
neue version online
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#9

Re: JoyMedia - Mediensteuerung über Joystick

  Alt 8. Dez 2008, 13:00
- aufgrund zu geringer nachfrage eingestellt -

kann geclosed werden...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123

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 08:18 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