foobar2000 auf Deutsch

foobar2000 => Plugins => Thema gestartet von: Spirit_of_the_ocean in 08. April 2009, 22:54:20

Titel: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: Spirit_of_the_ocean in 08. April 2009, 22:54:20
Hi!
Ich bin gerade dabei die mir vorliegenden Samples durchzuschauen. Ich suche eine Möglichkeit folgendes zu tun:

Den Background schwarz zu malen und darüber eine Art Hintergrundbild zu legen. Darüber sollen dann noch Buttons.
Ich habe mehrere verschiedene Buttons gefunden und weiß, wie man die Position usw. ändert. Allerdings hab ich noch nciht herausgefunden wie ich ein Bild dahinterlegen kann. Geht das überhaupt beides zusammen?
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 08. April 2009, 23:01:13
Ja, du musst nur in function on_paint das Hintergrundbild angeben, bevor du die Buttons "malst".

z.B.:
gr.FillSolidRect(0,0,window.Width,window.Height,RGB(0,0,0));

var img = gdi.Image("Pfad zum Bild");
gr.DrawImage(img,x,y,w,h,0,0,img.Width,img.Height);

buttonsDraw(gr);

Natürlich muss die RGB-Funktion darüber im Skript vorhanden sein.
Falls noch nicht, dann kopiere folgendes ins Skript (ganz oben, jedenfalls nicht innerhalb on_paint oder einer anderen Funktion):

function RGB(r, g, b) {
   return (0xff000000 | (r << 16) | (g << 8) | (b));
}

(Ich hoffe, ich habe jetzt im schnell hingeschmiertem Code keinen Fehler drin  ::))

EDIT:
sehe gerade in der RGB Funktion macht die Forensoftware aus einer 8 mit einer sachließenden Klammer dahinter )  ein Emoticon...
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: Spirit_of_the_ocean in 08. April 2009, 23:15:23
Ja aber an welche Stelle vom Code?

Ich hab hier diesen Code(Gibt es hier keine Codebox?)
EDIT: Ja es gibt sie  :top:
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }

ButtonStates = {
normal: 0,
/* not used here
hover: 1,
down: 2, */
hide: 3
}

function SimpleButton(x, y, w, h, img, func_onClick, state) {
this.state = state ? state : ButtonStates.normal;
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.img = img ? gdi.Image(img) : null;
this.func_onClick = func_onClick;
   
this.containXY = function (x, y) {
return (this.x <= x) && (x <= this.x + this.w) && (this.y <= y) && (y <= this.y + this.h);
}
   
this.draw = function (gr) {
if (this.state == ButtonStates.hide)
return;
       
this.img && gr.DrawImage(this.img, this.x, this.y, this.w, this.h, 0, 0, this.w, this.h);
}
   
this.onClick = function () {
this.func_onClick && this.func_onClick();
}
}

function drawAllButtons(gr) {
for (var i in $buttons) {
$buttons[i].draw(gr);
}
}

function chooseButton(x, y) {
for (var i in $buttons) {
if ($buttons[i].containXY(x, y) && $buttons[i].state != ButtonStates.hide)
return $buttons[i];
}
   
return null;
}

var PlaybackOrder = {
Default: 0,
RepeatPlaylist: 1,
RepeatTrack: 2,
Random: 3,
ShuffleTracks: 4,
ShuffleAlbums: 5,
ShuffleFolders: 6
}

/* Not used here
var PlaybackOrderText = new Array(
"Default", // = 0
"Repeat (Playlist)",
"Repeat (Track)",
"Random",
"Shuffle (tracks)",
"Shuffle (albums)",
"Shuffle (folders)") */

$buttons = {
PBDefault: new SimpleButton(5, 7, 18, 9, fb.foobarPath + "DarkOne/Buttons/PBDefault.png",
function() {
fb.PlaybackOrder = PlaybackOrder.RepeatTrack;
}
),
   
PBRepeat: new SimpleButton(5, 7, 18, 9, fb.FoobarPath + "DarkOne/Buttons/PBRepeat.png",
function() {
fb.PlaybackOrder = PlaybackOrder.ShuffleTracks;
}
),

PBShuffle: new SimpleButton(5, 7, 18, 9, fb.FoobarPath + "DarkOne/Buttons/PBShuffle.png",
function() {
fb.PlaybackOrder = PlaybackOrder.ShuffleAlbums;
}
),
   
PBRepeatPL: new SimpleButton(5, 7, 18, 9, fb.foobarPath + "DarkOne/Buttons/PBRepeatPL.png",
function() {
fb.PlaybackOrder = PlaybackOrder.RepeatDefault;
}
),
   
PBRandom: new SimpleButton(5, 7, 18, 9, fb.FoobarPath + "DarkOne/Buttons/PBRandom.png",
function() {
fb.PlaybackOrder = PlaybackOrder.Default;
}
),

PBShuffleF: new SimpleButton(5, 7, 18, 9, fb.FoobarPath + "DarkOne/Buttons/PBShuffleF.png",
function() {
fb.PlaybackOrder = PlaybackOrder.Default;
}
),

PBShuffleA: new SimpleButton(5, 7, 18, 9, fb.FoobarPath + "DarkOne/Buttons/PBShuffleA.png",
function() {
fb.PlaybackOrder = PlaybackOrder.Default;
}
)
}

// Playback Order buttons are in this group, order is as PlaybackOrder, do not change
var PBGroup = new Array(
$buttons.PBDefault,
$buttons.PBRepeatPL,
$buttons.PBRepeat,
$buttons.PBRandom,
$buttons.PBShuffle,
$buttons.PBShuffleA,
$buttons.PBShuffleF
);

function on_init() {
on_playback_order_changed(fb.PlaybackOrder);
};

on_init();

var cur_btn = null;
var ww, hh;

// --- APPLICATION START

function on_paint(gr) {
gr.FillGradRect(0,-1,window.Width,window.Height +1, 270,RGB(25,40,51),RGB(38,60,76));
drawAllButtons(gr);
}

function on_mouse_move(x, y) {
cur_btn = chooseButton(x, y);
window.Repaint();
}

function on_mouse_lbtn_up(x, y) {
if (cur_btn) {
cur_btn.onClick();
}
window.Repaint();
}

function on_playback_order_changed(new_order_index) {
for (var i in PBGroup) {
if (i == new_order_index)
PBGroup[i].state = ButtonStates.normal;
else
PBGroup[i].state = ButtonStates.hide;
}

window.Repaint();
}
// --- APPLICATION END


Edit: Okay das hab ich hinbekommen. Wichtig für alle die es lesen: Die Pfadangabe muss so einen Slash haben /
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 08. April 2009, 23:21:37

function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }

ButtonStates = {
normal: 0,
/* not used here
hover: 1,
down: 2, */
hide: 3
}

function SimpleButton(x, y, w, h, img, func_onClick, state) {
this.state = state ? state : ButtonStates.normal;
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.img = img ? gdi.Image(img) : null;
this.func_onClick = func_onClick;
   
this.containXY = function (x, y) {
return (this.x <= x) && (x <= this.x + this.w) && (this.y <= y) && (y <= this.y + this.h);
}
   
this.draw = function (gr) {
if (this.state == ButtonStates.hide)
return;
       
this.img && gr.DrawImage(this.img, this.x, this.y, this.w, this.h, 0, 0, this.w, this.h);
}
   
this.onClick = function () {
this.func_onClick && this.func_onClick();
}
}

function drawAllButtons(gr) {
for (var i in $buttons) {
$buttons[i].draw(gr);
}
}

function chooseButton(x, y) {
for (var i in $buttons) {
if ($buttons[i].containXY(x, y) && $buttons[i].state != ButtonStates.hide)
return $buttons[i];
}
   
return null;
}

var PlaybackOrder = {
Default: 0,
RepeatPlaylist: 1,
RepeatTrack: 2,
Random: 3,
ShuffleTracks: 4,
ShuffleAlbums: 5,
ShuffleFolders: 6
}

/* Not used here
var PlaybackOrderText = new Array(
"Default", // = 0
"Repeat (Playlist)",
"Repeat (Track)",
"Random",
"Shuffle (tracks)",
"Shuffle (albums)",
"Shuffle (folders)") */

$buttons = {
PBDefault: new SimpleButton(5, 7, 18, 9, fb.foobarPath + "DarkOne/Buttons/PBDefault.png",
function() {
fb.PlaybackOrder = PlaybackOrder.RepeatTrack;
}
),
   
PBRepeat: new SimpleButton(5, 7, 18, 9, fb.FoobarPath + "DarkOne/Buttons/PBRepeat.png",
function() {
fb.PlaybackOrder = PlaybackOrder.ShuffleTracks;
}
),

PBShuffle: new SimpleButton(5, 7, 18, 9, fb.FoobarPath + "DarkOne/Buttons/PBShuffle.png",
function() {
fb.PlaybackOrder = PlaybackOrder.ShuffleAlbums;
}
),
   
PBRepeatPL: new SimpleButton(5, 7, 18, 9, fb.foobarPath + "DarkOne/Buttons/PBRepeatPL.png",
function() {
fb.PlaybackOrder = PlaybackOrder.RepeatDefault;
}
),
   
PBRandom: new SimpleButton(5, 7, 18, 9, fb.FoobarPath + "DarkOne/Buttons/PBRandom.png",
function() {
fb.PlaybackOrder = PlaybackOrder.Default;
}
),

PBShuffleF: new SimpleButton(5, 7, 18, 9, fb.FoobarPath + "DarkOne/Buttons/PBShuffleF.png",
function() {
fb.PlaybackOrder = PlaybackOrder.Default;
}
),

PBShuffleA: new SimpleButton(5, 7, 18, 9, fb.FoobarPath + "DarkOne/Buttons/PBShuffleA.png",
function() {
fb.PlaybackOrder = PlaybackOrder.Default;
}
)
}

// Playback Order buttons are in this group, order is as PlaybackOrder, do not change
var PBGroup = new Array(
$buttons.PBDefault,
$buttons.PBRepeatPL,
$buttons.PBRepeat,
$buttons.PBRandom,
$buttons.PBShuffle,
$buttons.PBShuffleA,
$buttons.PBShuffleF
);

function on_init() {
on_playback_order_changed(fb.PlaybackOrder);
};

on_init();

var cur_btn = null;
var ww, hh;

// --- APPLICATION START

function on_paint(gr) {
gr.FillSolidRect(o,o,window.Width,window.Height,RGB(0,0,0));

var img = gdi.Image("Pfad zum Bild");
gr.DrawImage(img,x,y,w,h,0,0,img.Width,img.Height);

drawAllButtons(gr);
}

function on_mouse_move(x, y) {
cur_btn = chooseButton(x, y);
window.Repaint();
}

function on_mouse_lbtn_up(x, y) {
if (cur_btn) {
cur_btn.onClick();
}
window.Repaint();
}

function on_playback_order_changed(new_order_index) {
for (var i in PBGroup) {
if (i == new_order_index)
PBGroup[i].state = ButtonStates.normal;
else
PBGroup[i].state = ButtonStates.hide;
}

window.Repaint();
}
// --- APPLICATION END


(schau gleich unter APPLICATION START)

Willst du wirklich das Playback Order Sample benutzen?
Das ist noch eines der ersten Samples, die T.P Wang und ich gemacht haben.
Wenn du normale Playback Control haben willst, rate ich dir eher zu einem der anderen Button Samples...

EDIT2:
Die Pfadangabe kann auch ein Doppel-Backslash haben, also \\
Funktioniert genauso.
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: Spirit_of_the_ocean in 08. April 2009, 23:28:18
Ja ich würde gerne die Playbackorder mit einem Button umstellen können. Bei einem anderen Buttonsample habe ich nur ein leeres Panel gehabt. Welche würdest du mir denn empfehlen (bitte dann auch Posten oder als .txt anhängen).
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 08. April 2009, 23:41:50
Ach so.
Dann willst du wahrscheinlich auch noch weitere Buttons hinzufügen, nicht nur die Playback Order.
Dann ist das Sample aber wirklich nicht besonders gut geeignet, denn es hat keine Mousehover-Funktion...
Ein Sample für beide Funktionen (also Playback Order und normale Buttons mit Mousehover-Images) habe ich leider auch gar keines...
Da müsste man zwei miteinander verbinden.

Ich versuche mal eines zusammenzuklöppeln ;)
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: Spirit_of_the_ocean in 08. April 2009, 23:58:45
Ich hatte da noch eines bei den Samples gefunden. Aber irgendwie hab ichs nicht hinbekommen. Der zeigt jetzt nur Script error an. Wenn ich meine Playlistanzeige fertog hab. Dann werd ich es mal Blanko mit Kommentaren auf deutsch hier hochladen. Dann kann jeder Noob entscheiden, was an Buttons er wo haben will.
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 09. April 2009, 00:11:36
Also, um dich jetzt nicht allzu lange warten zu lassen, pappe ich dir einfach mal ein Skript aus einer chinesischen Konfiguration an, das berücksichtigt beides: Playback Order und Control Buttons.
Ist sogar eine Animation drin.

Weiß jetzt aber nicht, wie gut das auf deine Bedürfnisse passt, ich kriegs bloß nicht hin, meine eigenen Samples voll funktionsfähig zusammenzuführen...  ::)

Aber ich bleib dran, ich frag mal jemanden, der sich damit auskennt ;)
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: fbuser in 09. April 2009, 00:13:05
Kleiner Tip: Wenn das WSH Panel einen Script-Error anzeigt, wird in der Console die Zeile angezeigt, wo der Fehler auftritt.
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 09. April 2009, 00:19:18
Das weiß ich ;).
Es gab aber keinen Skript Error, das Skript war also soweit ok.
Es gab beim zusammenfügen meiner Skripte ein anderes Problem.
Entweder haben die Control Buttons funktioniert oder die Playback Order, aber nicht beides zusammen...
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: Spirit_of_the_ocean in 09. April 2009, 00:54:23
Zitat von: fbuser in 09. April 2009, 00:13:05
Kleiner Tip: Wenn das WSH Panel einen Script-Error anzeigt, wird in der Console die Zeile angezeigt, wo der Fehler auftritt.

Klasse Tipp  :top:
Einen Fehler hab ich nun ausgemerzt. Jetzt wird dort gemeldet:
'cur_btn' ist undefiniert
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 09. April 2009, 00:56:40
In welchem Skript bist du jetzt?
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: Spirit_of_the_ocean in 09. April 2009, 01:19:04
Keine Ahnung wieso, aber es waren verschiedene Variablen im Scipt.Klar, dass er dann sagt dass er die Variable nicht kennt.Anscheinend funtkionieren jetzt die einfachen Buttons. Wenn ich den Rest nach Ostern fertiggestellt habe werd ich wie gesagt eine Blankoversion mit genauen Anweisungen hochladen. Für alle User, die eben nicht so bewandert sind, was das Programmieren angeht.
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 10. April 2009, 17:22:06
@Spirit_of_the_ocean
Freundlicherweise hat mir T.P Wang geholfen, meine beiden Skripte zusammenzufügen (hatte einen kleinen Fehler in meiner Button Class).
Ich häng dir jetzt mal sein Beispielscript an.
Die Button-Funktionen und Plazierungen sind jetzt natürlich willkürlich (ist ja nur ein Test-Skript gewesen) und können jederzeit ausgetauscht werden.
T.P Wang hat aber gleich ausführliche Kommentare ins Skript geschrieben, so sollte es sehr einfach zu handhaben sein.
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 13. April 2009, 22:32:00
@Spirit_of_the_ocean
Hänge dir mal noch ein Script an, allerdings ohne Playback Order Button (den müsstest du dann per Hand hinzufügen - wie im vorigen Script).
In dem Script sind die Playback Control Buttons und eine Seekbar in einem Panel enthalten.
Wie die Seekbar aussehen soll, musst du in der "Class Seekbar" ab Zeile 186 konfigurieren (ist schon ein Beispiel drin).
Möchtest du statt eine Seekbar zu zeichnen ein Image als Hintergrund für die Seekbar nehmen, musst du in Zeile 260 aus SeekbarBorder.rect  SeekbarBorder.image  machen (und eben in der "Class Seekbar" ab Zeile 186 dein Bild anpassen).

Das Script hat noch ein kleines Redraw-Problem beim Suchen mit der Seekbar (möglicherweise musst du in den letzten vier Funktionen aus window.RepaintRect() window.Repaint machen), aber es funktioniert wenigstens :)

Es ist mein künftiges Skript für die Kompaktansicht meiner Konfiguration, welches ich gestern mit einem Bekannten - der glücklicherweise mehr von JScript versteht als ich - geschrieben habe.
Ich hoffe, es ist hilfreich für dich :)
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 14. April 2009, 19:35:39
So, nach mehreren Litern Kaffee und stundenlangem Überlegen das nächste Script, das vielleicht hilfreich ist:
Normale Buttons, ein Playback Order Button und eine Seekbar in einem Panel, sprich: ein komplettes Control Panel.
Freilich ist die Button-Belegung nur ein Beispiel (die muss natürlich geändert werden), aber es funktioniert.
Und da ich mein Script auch jemanden vorgelegt habe, der was von JScript versteht und der nichts zu bemängeln hatte, hänge ich auch das mal hier an.

Hinweis:
Die Erscheinung der Seekbar muss ab Zeile 170 festgelegt werden.
der Playback Order Button in Zeile 284 (aktuelle Playback Order) und ab Zeile 289.

Damit man sieht, was das Script bedeutet, habe ich mal Buttons aus meiner derzeitigen Konfiguration beigelegt.
Den "DarkOne"-Ordner dazu einfach in den foobar2000-Installationsordner kopieren und das Script in ein WSH Panel mod einfügen.

(im Script ist jetzt noch kein Tooltip und auch kein DrawRoundRect enthalten, das kommt erst mit der nächsten Version vom WSH Panel mod)
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: Spirit_of_the_ocean in 15. April 2009, 22:21:07
Ich habe Problem mit den Playback Button zu integrieren. Ich hätte gerne einen Button der sein aussehen nach  Playbackorder ändert.Wenn du mir da weiterhelfen könntest wäre das toll. :)

Als Beispiel hatte ich den PBO Button. Aber wie gesagt ich bekomme den nicht integriert.
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 16. April 2009, 08:42:18
Hast du dir das letzte Script-Beispiel mal angesehen?
Da ist das drin, was du brauchst.
Geschaltet wird die Playback-Order mit einem Klick auf den Playback Order Button, woraufhin ein Kontextmenü aufklappt aus dem man die gewünschte Playback-Order wählt.
Daraufhin ändert sich das Bild des Buttons.
Das Bild ändert sich auch, wenn du die Playback Order außerhalb des WSH Panel mod änderst (z. B. übers Menü).

Wenn du das Script anpassen willst und deine Bilder anders benannt sind, gehe in Zeile 267 und gib hier die Namen deiner Images in der selben Reihenfolge an (also Bilder für Default, Repeat Playlist, Repeat, Random, Shuffle tracks, Shuffle albums, Shuffle folders - ohne Dateiendung!).
Den Pfad musst du in Zeile 284 und 289 angeben (also zwischen dem ersten und zweiten "+" Zeichen und evtl. auch die Dateiendung von .png auf .jpg ändern) und die Plazierung und Größe des Buttons in Zeile 291.

Für den Playback Order Button ist aber kein Mousehover Image im Script vorgesehen (da hatte ich einen Tooltip beabsichtigt, den gibt es aber erst mit der nächsten Version des WSH Panel mod).
Es ist aber möglich, ein Mousehover-Image mit zu benutzen. Falls das gewünscht ist, sag Bescheid, dann passe ich das Script noch mal an.

Ich hab ja schon mal gesagt, dass das alte PBOButton Script nicht sonderlich geeignet ist für das, was du offenbar beabsichtigst, da es weder ein Mouseover-Image bietet noch die Button Class sonderlich "elegant" gestaltet war.
Probier lieber, mein letztes Script anzupassen (so, wie ich mich an deinen Screenshot erinnere, den du mir mal geschickt hast, müsste das jetzt ideal für deine Bedürfnisse passen).
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 17. April 2009, 09:46:21
Neue Version des WSH Panels ist raus.
Das selbe Script wie oben, nur mit Tooltip-Beispielen für die Buttons und Zeichnung der Seekbar mit gr.DrawRoundRect, ist angehängt.

(Statt bei der Seekbar die Umrandung mit zwei gr.DrawRoundRect zu zeichnen, wäre es auch möglich, die Linienstärke einer gr.DrawRoundRect auf 2.0 zu erhöhen und mit gr.SetSmoothingMode(4) zu glätten. Sieht aber meiner Meinung etwas schlechter aus.)
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: Spirit_of_the_ocean in 17. April 2009, 23:07:38
Hey Tedgo viele Dank für deine Hilfe :)

Gibt es eine Möglichkeit die gespielte Zeit des aktuellen Songs anzeigen zu lassen? ich hab da nichts gefunden.
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: fbuser in 17. April 2009, 23:50:37
Entweder über fb.PlaybackTime zum Selberformatieren oder über fb.TitleFormat("%playback_time%").Eval() als formatierten Wert, der über gr.DrawString() im on_paint()-Event ausgegeben werden kann.

Funktion zum Selberformatieren:
function TimeFormatted(t)
{
  var zpad = function(n)
  {
    var str = n.toString();
    return (str.length<2) ? "0"+str : str;
  }

  var h = Math.floor(t/3600); t-=h*3600;
  var m = Math.floor(t/60); t-=m*60;
  var s = Math.floor(t);
  if(h>0) return h.toString()+":"+zpad(m)+":"+zpad(s);
  return m.toString()+":"+zpad(s);
}
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: Spirit_of_the_ocean in 18. April 2009, 00:39:21
gr.DrawString(fb.TitleFormat("%playback_time%).Eval(),g_font_b,RGB(192,192,192),3,-10,54,16,DT_CENTER | DT_TOP | DT_SINGLELINE);


Das habe ich hinzugefügt bei on paint. Aber das gibt einen Fehler aus. Mein Problem ist, dass ich keien Ahnung von JScript habe und das meiste mehr raten als verstehen ist.

Wo ist denn der Fehler?
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: fbuser in 18. April 2009, 00:43:03
Ich hatte hinter %playback_time% die " vergessen. Die fehlen bei dir auch. Habe meinen Beitrag entsprechend angepasst.
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: Spirit_of_the_ocean in 18. April 2009, 00:45:29
Meine Zeit aktualisiert sich aber nicht. Es muss also etwas fehlen. ???
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: fbuser in 18. April 2009, 01:01:53
Möglicherweise das:

function on_playback_time(time)
{
  window.Repaint();
}
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: Spirit_of_the_ocean in 18. April 2009, 01:22:11
Danke hat gut funktioniert  :top:  :)
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 18. April 2009, 08:39:19
@Spirit
Du benutzt die falschen Flags für deinen Text-String!
Diejenigen, die du benutzt sind für gr.GdiDrawText.
Du bekommst zwar möglicherweise keine Fehlermeldung, weil die Flags ja im Skript definiert sind, die Flags sind aber (zumindest zum Teil) in DrawString wirkungslos.

Besser du änderst das ab ;)


gr.GdiDrawText(fb.TitleFormat("%playback_time%").Eval(),g_font_b,RGB(192,192,192),3,-10,54,16,DT_CENTER | DT_TOP | DT_SINGLELINE);



Du kannst natürlich auch DrawString benutzen, musst dann aber die Flags für DrawString ins Skript schreiben.
Außerdem sieht DrawString etwas schlechter aus. Das kann man aber mit gr.SetTextRenderingHint(5) (die 5 setzt auf ClearType) ausgleichen.

EDIT:
Du hast ja mehrere Elemente in einem Skript (oder hatte ich dich falsch verstanden und es ist ein neues Skript?).
Da wäre es vielleicht sinnvoll, unter on_playback_time nicht das ganze Fenster bei jeder Änderung der Abspielzeit neu zu zeichnen, sondern nur den Bereich, in dem du die Zeit anzeigst.
Es macht ja keinen Sinn, jede Sekunde Buttons oder andere von der Abspielzeit unabhängige Elemente neu zu zeichnen ;)

Ich schlage also vor:

function on_playback_time(time) {
window.RepaintRect(3, -10, 54, 16);
}

(Die Angaben für x, y, w und h sollten sich natürlich mit dem DrawText decken, mit dem du die Zeit anzeigen lässt ;))
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: Spirit_of_the_ocean in 18. April 2009, 14:58:26
Super danke Tedgo :)
Also inzwischen hab ich eine Panel mit Buttons, Seekbar und Playbacktime :) Das ist wirklich super  :top:
Danke für eure Hilfe. Ich bin noch bei der 1.1.4er Version. Ich will mein panel erstmal dort fertigstellen bevor ich migriere. Das mit dem GDI Text ist mir schon aufgefallen. Da ich LCDMono benutze, und es sehr komisch angzeigt wurde.

Danke auch für den Tipp mit dem Window.repaint. Ich dachte mir schon, dass es blödinn ist das komplette Fenster zu aktualisieren, wenn es doch nur um einen kleinen Bereich geht.

Vorschlag: Was haltet ihr davon ein Tutorial mit einigen Beispiel Scripts zu machen? Also für Anfänger und Leute, die wie ich keinen Plan haben von JScript. Damitman ungefähr weiß, wo man was ändern muss.

Ich habe nur einiges aus deines Script, dass ich aber mit /* und */ unschädlcih gemacht habe. Gut, dass ich mich mal mit Pascal irgendwann beschäftigt hab.

Es werden wohl noch weitere Fragen folgen. Aber langsam wirds das, was ich haben möchte.

Noch eine Frage: Kann mir jemand was zum Resoourcenverbrauch des Panels sagen? Also mir ging es darum, alles was ich haben möchte in einem Panel zu machen und nicht 5 verschiedene WSH Panels in den Splitter zu integrieren.
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 18. April 2009, 15:05:29
Zum Ressourcenverbrauch kann ich noch nicht allzu viel sagen.
Ich habe mittlerweile an die 10 WSH Panel in meiner Config (bin aber dabei die ein bisschen zu vereinen - soweit möglich, denn sie liegen über das gesamte Layout verstreut ;)).

Mir ist im Vergleich zu PSS bislang kein nennenswerter Unterschied aufgefallen.

Und wie bitte?
Du hast einiges aus meinem liebevoll geklöppelten Skript unschädlich gemacht??
Wie gemein...  :'(  :D

EDIT:
Ein Tutorial wäre nicht schlecht.
Da müssen aber andere ran...
Ich lerne JScript ja mehr oder weniger selber erst zu nutzen (glücklicherweise lerne ich recht schnell :)), aber für ein Tutorial fühle ich mich nicht berufen.
Ich kämpfe zum Beispiel selbst schon seit Wochen an einer vernünftigen Button Class für mein Rating Panel und krieg es einfach nicht hin...
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: Spirit_of_the_ocean in 18. April 2009, 15:32:29
Ich hab nur folgendes festgestellt: Ich habe eine Config mit dem Chronflow laufen und in einem Tab hatte ich an die 4 WSH und da hatte ich seltsamerweise crashes von eminem NVidis driver. Jetzt hab ich eine Config mit dem Chronflow und nur einem WSH Panel und zwar nicht im Tab und keine Crashes. Das ist alles etwas merkwürdig.
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 18. April 2009, 15:37:34
Hm, da kann ich nicht viel dazu sagen, weil ich Chronflow nicht benutze.
Hatte bislang aber nur wenige Crashs mit nicht veröffentlichten alpha-Versionen von WSH Panel mod, und das auch nur unter extremen Testbedingungen.
Die "Mängel" hat T.P Wang auch gleich für die veröffentlichten Versionen behoben.

Aber das Problem solltest du ihm vielleicht mal in seinem Thread auf hydrogenaudio mitteilen. Vielleicht hängt es ja doch irgendwie mit der Kombi WSH Panel mod/Chronflow zusammen. Obwohl ich die Schuld da eher bei Chronflow vermute.
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: Spirit_of_the_ocean in 18. April 2009, 16:56:21
Ich hab jetzt schonw as schönes zusammen gebastelt. Aber oft weiß ich selber nicht was ich da tue.
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 18. April 2009, 18:52:51
Zitat von: Spirit_of_the_ocean in 18. April 2009, 16:56:21
Aber oft weiß ich selber nicht was ich da tue.

Das kenne ich... ;)
Es ist gar nicht so leicht, hinter das Prinzip zu kommen, wenn man durch andere Plugins die Nutzung (besser: den Missbrauch) von TitleFormatting gewöhnt ist.
Aber langsam steige ich dahinter :)
Das Problem ist nur, die Online-Tutorials die man zu JScript findet, sind oft nicht sonderlich hilfreich, da es in fast allen nur um Teilfunktionen innerhalb HTML/XML geht.
Wenn man aber mal das Prinzip verstanden und die dahinterstehende Logik begriffen hat, ist es gar nicht mehr so schwer.
Ich habe allerdings auch noch so manche Probleme mit einigen WSH Panel/foobar2000-spezifischen "Interfaces" und so manchen "Sonderwünschen", die ich in meine Scripts einbauen möchte...
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: TomPro in 28. Mai 2009, 11:41:52
Hi, ich habe mich bis jetzt ein wenig als ;) Parasit hier eingenistet und von Euren Beispielen eine Menge gelernt und bin gerade dabei das gelernte in eine eigene WSH Panel Mod strotzende Ansicht zu verwurschteln. Da ich eigenlich das Programieren nie gelernt habe, ich aber einigermassen geschickt im enträtseln bin, sind mir (auch mit Hilfe einiger "Versuch und Irtum" Instanzen) viele Dinge klar geworden. DANKE.

Da ich schon eine gute Vorstellung habe wo ich hin will, weiß ich auch was mir noch alles an Wissen fehlt, aber das enträtseln macht mir halt spaß. Es wird sehr wahrscheinlich irgentwann der Punkt kommen wo mir aber auch das nicht mehr hilft und ich vielleicht um Rat bei komplexen Funtionsblöcken einholen muß, zunächst sind mir aber nur einige Notationsvariationen unklar über die ich gestolpert bin.

In dem Beispiel für die Buttons und Seekbar innerhalb eines Panels, welches ich aktuell (wiederstand ist zwecklos ;) ) assimiliere (V - Lebe lang und in Frieden) sind solche Zeilen um deren Erklärung ich bitten möchte:

this.img_normal = img_src && img_src.normal ? gdi.Image(img_src.normal) : null;
this.img_hover = img_src && img_src.hover ? gdi.Image(img_src.hover) : this.img_normal;
this.img_down = img_src && img_src.down ? gdi.Image(img_src.down) : this.img_hover;


Hier ist mir die Notation von "&&" klar (denke ich)
Wenn es das Objekt img_src gibt und gleichzeitig das Argument (?) .normal oder .hover ... dann weise dem Argument (oder doch Methode) .img_normal bzw den anderen die entsprechende Grafik mittels gdi.Image(...) zu, wenn nicht dann null oder eben so weiter.

Die logische UND Verknüpfung (&&) wird benutzt um eine Zuweisung für eine Variable, Objekt etc. zu steuern, aber es gibt eine Wirkung für die Ursache die mit && abgefragt wird

weiter unten in den Callbacks der Mousefunktionen heist es dann aber:

this.onClick = function () {
this.func && this.func(x,y);
}


oder aber z.B.

function on_mouse_move(x, y) {
var btn = buttonsTraceMouse(x, y);
if (btn != cur_btn) {
cur_btn && cur_btn.onMouseOut();
btn && btn.onMouseIn();
}
cur_btn = btn;
}


Hier giebt es auch eine UND Verknüpfung (&&), diesmal mit einer Funktion, aber wo ist die Zuweisung für die UND Abfrage (wenn es denn eine ist). Nach meinen bescheidenen Kenntnissen bedeutet doch:


true && true = true
true && false = false
false && true = false
false && false = false


und dieses Ergebniss kann ich nutzen um eine Aktion davon abhängig zu machen. Wo liegt also der der Nutzen einer && Verbindung wenn kein If oder = in der nähe ist. Bitte nicht lachen, wie gesagt bin ich keiner der das Programieren gelernt hat.

Bitte nicht böse sein, wenn das Thema hier ums Programieren im Allgemeinen und nicht dem WSH Panel im besonderen gilt aber hier bin ich nunmal auf diesen Umstand gestoßen und so glaube ich das ich hier eventuell Hilfe bekommen kann.

&& ( UND ;) )

Dies ist in diesem Forum mein erstes Posting, sonst bin ich ehr bei audiohq vertreten, also allen einen Dank die hier zur Vermehrung von Wwissen beitragen und von dem ich bis jetzt, und in Zukunft, partizipieren konnte. Sobalt der Samen des Wissens aufgegangen, und das gelernte in ein vorzeigbares Ergebniss erwachsen ist werde ich natürlich auch meinen Beitrag leisten und die Ernte wieder zur Verfügung zu stellen auf das der nächste Keim sprieße (keine Angst ich rede (schreibe) nicht immer so blumig, mir war gerade nur der Sinn danach :D)

Gruß TomPro

Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 28. Mai 2009, 12:22:33
In dem von dir genannten Fall ist das so, dass einmal cur_btn (also der aktuelle Button) aktiviert wird und gleichzeitig
cur_btn.onMouseOut() (also die Aktion des aktiven Buttons, in dem Fall "deaktiviere Tooltipp für den aktiven Button bei Verlassen des Buttons") ausgeführt werden soll.
Mit btn && btn.onMouseIn() wird angegeben, was geschehen soll, wenn die Maus auf einen Button zeigt (in dem Fall zeige Mousehover-Image und aktiviere den Tooltipp).
Deshalb - da zwei Sachen auf einmal geschehen sollen und das Panel ansonsten ja nicht weiß, wann welche Funktion (onMouseOut() oder onMouseIn()) ausgeführt werden soll - das &&.

Ich hoffe, das war halbwegs verständlich, ich versteh mich manchmal selbst nicht :D
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: TomPro in 28. Mai 2009, 12:37:53
Danke erst einmal für die schnelle Antwort, jetzt muss ich erst mal wieder lernen und enträtseln. Hätte vielleicht doch beim Sudoku bleiben sollen ---- nein ein Scherz

Gruß TomPro
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 28. Mai 2009, 12:43:35
Na ja, meine Erklärung war eigentlich schlecht...

Eher so:
mit cur_btn wird zunächst mal cur_btn definiert (nicht aktiviert  ::)) und mit && cur_btn.onMouseOut() dann bestimmt, was geschehen soll.
So ist es eher richtig.
Und kürzer :D
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: fbuser in 28. Mai 2009, 12:47:13
Sorry, tedgo, die erste Erkkärung war zwar verständlich, aber auch die zweite ist falsch.

Den Ausdruck btn && btn.onMouseIn(); könnte man auch so schreiben:
if(btn!=null) btn.onMouseIn();

Wenn nämlich btn==null würde der Aufruf von btn.irgendeinefunktion() zu einem Fehler führen.

Bei einem logischen && wird die rechte Seite nur dann ausgewertet, wenn die linke Seite den Wert true hat. Hat die linke Seite den Wert false spielt es keine Rolle, welchen Wert die rechte Seite hat, da das Ergebnis immer false ist.

Daher kann man eben auch btn && btn.onMouseIn(); verwenden, ohne dass eine Fehlermeldung erfolgt, falls btn den Wert null hat. Denn dann wird btn.onMouseIn(); nicht ausgeführt.

Der Wert null nimmt bei der Auswertung noch eine Sonderrolle ein, auf die ich hier aber nicht näher eingehe, da es am Ergebnis nichts ändert.
Titel: Re: Frage zur Konfiguration vom WSH Panel MOD
Beitrag von: tedgo in 28. Mai 2009, 12:56:26
Na ja, im Grunde meinte ich das ja mit meiner zweiten Erklärung.
cur_btn ("definiert" das "Vorhandensein" von cur_btn) && ("bestimmt" was dann geschehen soll) cur_btn.onMouseOut() (auszuführende Funktion).

Ich sag ja, mit Erklärungen hab ichs nicht so :)
Deine ist natürlich wesentlich besser.