Anzeige der Spielzeit neben Titel/Interpret im Player nicht mehr möglich

Tja, dann muss ich das nicht schreiben, mir fehlt diese Anzeige auch.

Es scheint also paar mehr Leute zu geben, die dieses Problem haben.

@Torben: Wie lange dauert es denn noch, bis wir uns die Felder im Player selbst anordnen können?
Falls es länger dauert, kannst du nicht bis dahin das Player-Layout aus Version 3 in V4 einsetzen. Weil die Restspielzeit würde ich beim Senden schon gerne sehen… :wink:

Das mit der freien Positionierung ist leider nicht von heute auf morgen gemacht; auch wenn die Voraussetzungen jetzt grundsätzlich geschaffen sind.

Im Prinzip geht es ja nur darum zu vermeiden, dass Interpret/Titel die Spielzeit überlagern. Das sollte ich schnell hinkriegen.

Yeah! Find ich gut! :wink:
Ist das im nächsten Build schon enthalten?

Weiß ich noch nicht. Hab gerade noch andere Dinge zu tun.

Ich habe mir die Sache nun noch einmal genau angeschaut.

Vorweg: Das v3-Playerdesign, wo mAirList alles selbst gezeichnet hat, lässt sich nicht auf die neue Version portieren.

Wie ihr schon bemerkt habt, funktioniert das v4-Design mit verschiedenen “Streifen”, die übereinander liegen. Von oben nach unten sind das:

  • Titel
  • Interpret
  • Player-Name + Zustand + Spielzeit
  • Waveform
  • Fortschrittsbalken
  • Buttons

Diese Streifen werden jeweils mit der Delphi-Funktionalität “Align” ausgerichtet, die dafür sorgt, dass der zur Verfügung stehende Platz automatisch aufgeteilt wird: Titel und Interpret sind oben angeheftet (alTop), Waveform, Fortschrittsbalken und Buttons an der Unterkante (alBottom), und der Streifen mit dem Player-Namen, dem Zustand und der Spieltzeit nimmt einfach den restlichen Platz ein (alClient).

Das lässt sich wunderschön beobachten, wenn man den Layout-Designer öffnet und mit der Maus die Höhe des Players ändert.

Und damit ist auch das Problem klar: Wenn ich den Player so niedrig mache, dass kein Platz mehr für den Spielzeit-Streifen übrig bleibt, dann verschwindet er einfach. Er wandert auch nicht hinter andere Streifen, so dass man mit Transparenz oder so arbeiten könnte, sondern er bekommt einfach die Höhe 0 und ist weg.

Ich sehe als einzige Lösungmöglichkeit tatsächlich, schnell das Player-interne Layout zu implementieren, so dass man die einzelnen Texelemente tatsächlich frei positionieren und dimensionieren kann; und dabei die Spielzeit neben den Titel und Interpreten verschieben.

Einen Layout-Designer werde ich dafür auf keinen Fall anbieten können; das müsste alles durch ini-Dateien (zusätzliche layout.ini-Einträge) gemacht werden.

Danke Torben für deine ausführliche Beschreibung!
Durch das “Streifen Prinzip” ist mir jetzt klar, dass die Höhe gegen 0 geht und sich die Spielzeit nirgendwo mehr verstecken kann.

Für die kleine Gemeinde der kreativen Layout Individualisten ist es sicher kein Problem einige Zeilen in die ini Datei zu schreiben 8)

Ich nehme nicht an, dass du jetzt gleich alle Elemente der Player frei positionierbar machst. ::slight_smile:

Könntest du bei den verbleibenden “Streifen” mit einem vertretbaren Aufwand eventuell die Reihenfolge herausführen (ähnlich der ColumnOrder bei den Playlisten), sodass man sich diese selbst von (alBottom) zu (alTop) umheften könnte?

Naja war nur so ein Gedanke, wenn du dich in diese Ecke deines Programmcodes begiebst…
Mit der Anzeige der Spielzeit wäre schon einmal enorm geholfen. :slight_smile:

Die Reihenfolge der “Streifen” zu ändern hilft hier (jedenfalls bezüglich der ursprünglichen Fragestellung) wenig weiter. Es geht ja darum, die Zeitanzeige neben den Titel/Interpreten zu bekommen. Und das geht nicht, solange sie in einem eigenen Streifen ist.

Natürlich könnte man sich auch irgendeine Lösung ausdenken, die mit den Align-Properties arbeiten. Das ist aber zur Laufzeit alles sehr, sehr schwierig zu handhaben.

Grundsätzlich funktioniert das Alignment bei Delphi so, dass man einen leeren Container (meist vom Typ TPanel) hat, in den man dann andere Elemente platzieren kann. Entweder vertikal (oben/unten) oder horizontal (links/rechts), wobei immer mehrere Elemete oben/unten/links/rechts kleben können, und es zusätzlich ein Element geben darf, das in der Mitte den übrigen Platz einnimmt (alClient).

Jeder Container ist entweder horizontal oder vertikal, niemals “gemischt”. Will man horizontale und vertikale Aufteilung mischen, muss man zunächst einen weitere Container z.B. vertikal platzieren, der dann wiederum horizontal aufgeteilt werden kann. Das Standard-Player-Layout ist ein schönes Beispiel dafür:

  • Der äußere Container ist zunächst vertikal aufgeteilt: Rechts mit fester Breite der Lautstärkeregler, links mit den Rest des Platzes (alClient) ein leeres TPanel.

  • In diesem leeren TPanel sind dann die übrigen Elemente horizontal aufgeteilt (siehe oben).

  • Dabei ist das unterste Element - die Button-Leiste - wiederum ein leerer Container, der vertikal aufgeteilt ist: Ein paar Buttons links, ein paar rechts, dazwischen freier Platz.

Diese verschachtelte Struktur macht es sehr schwierig, das über eine ini-Datei anzugeben. Es müsste sowas wie XML verwendet werden. Wobei ich das schon ein hübsches Feature fände.

Die Alternative wäre die Möglichkeit, alle Elemente pixelgenau zu platzieren. Das müsste man dann aber wirklich für alle Elemente machen.

Hi Torben,

Dadurch, dass ich mittlerweile 10 Jahre in einer IT- Abteilung arbeite kann ich dir noch folgen.

Allen anderen hast du gut vermittelt, dass die Platzierung doch sehr “verschachtelt” und sich das ursprünglich eher triviale Problem mit Delphi etwas komplexer gestaltet, da ein TPanel ohne weiteren Container nicht aufgeteilt werden kann.

Ich musste mir zum besseren Verständnis schnell eine Hilfsskizze zeichnen. ???

Mairlist goes XML - hätte nichts dagegen, wird uns schon lange vorgelebt…
Alle Elemente pixelgenau zu platzieren wäre mit Hilfe einer Vorlage (sodass man kein Element vergessen kann) für deinen Anwenderkreis aber sicher auch kein Problem.

Ich habe mich heute mal an die XML-Geschichte gewagt. Sieht sehr vielversprechend aus. Morgen kann ich mehr berichten (und vermutlich schon was hochladen).

So, ich habe gerade mal Build 1182 hochgeladen, der nun die XML-Layouts für die Player unterstützt.

Doku gibt es auch, und zwar hier: https://www.mairlist.com/wiki/index.php/XML_Layouts

Probier’s doch mal aus.

1000 DANK!!! :-*
Erster Eindruck: du bist einfach super - jedes beliebige Layout im Player möglich!
Funktioniert bestens und habe meine XML Datei fast fertig.
So viel Flexibilität haut mich um ;D

Werde daher demnächst meine V3 Lizenz upgraden.

Statt dem Player Namen wird mir beim Object Name=“Name” immer nur der Buchstabe x angezeigt. Ist das nur bei mir so, oder kann das noch jemand bestätigen?

Oh, da muss ich noch nacharbeiten. Im Standard-Layout werden die einzelnen Labels für Name/Zustand/Zeit ja gar nicht verwendet sondern das gemeinsame, wo die Texte genau ausgerichtet sind (“Status”, steht auch im Wiki). Die drei einzelnen habe ich extra neu einbauen müssen. Der Text “x” ist ein Platzhalter und sollte bei Programmstart durch den tatsächlichen Playernamen ersetzt werden - wird er aber offenbar nicht :wink:

Was auch noch nicht geht ist das Umschalten der Spielzeit durch Klick auf die Zeitanzeige. Baue ich auch noch ein. Gib mir ein paar Minuten.

Wenn dein Layout fertig ist, poste doch mal die XML-Datei. Ich bin sehr gespannt.

Build 1183 ist da.

ja nun werden auch die Player Namen angezeigt vielen Dank

Anbei wie gewünscht meine erste Version der selbsterstellen XML Datei.
Zusätzlich ein Bild wie sich der Player damit bei mir präsentiert.

Dabei ist mir noch eine kleine Unstimmigkeit im Layout aufgefallen. (hat aber nichts mit der XML Datei zu tun)
Die Wellenform wird im entladenen Player komplett ausgeblendet, die Zeitleiste hingegen bleibt als schwarze Fläche sichtbar.

Nun könnte man entweder die Zeitleiste ebenfalls ausblenden (Vorschlag B), oder für meinen Geschmack sogar noch besser die Wellenform als schwarzen “reservierter” Bereich im entladenen Player permanent anzeigen (Vorschlag A).

Am flexibelsten wäre natürlich eine selbst wählbare Option, aber das hat nach diesem gewaltigen Fortschritt so gut wie keine Priorität.


playerlayout.xml.txt (534 Bytes)

Player_XML.png

Wellenform.png

Da hast du recht, die Zeitleiste sollte dann auch grau werden. Ich stufe das als Bug ein.

Natürlich kannst du die Inactive-Farbe per Skin auf schwarz setzen, dann sieht es aus wie in deinem Vorschlag A.

sorry - Tatsächlich ist die Inactive Color schon längst eingebaut. :-X
Habe soeben die Beschreibung dazu gefunden: http://redmine.mairlist.com/issues/9

Letzte Frage: Wie kann man eigentlich das Icon für den Papierkorb in der Playlist ansprechen?
In der V3 war es “icon_history” - Da man jetzt den Elementtyp ein Icon zuweisen muss stellt sich die Frage welchen Typ gespielte Elemete haben.
“itemtype_history” scheinbar nicht, das wäre zu einfach gewesen :wink:

Upgrade ist schon bestellt - allerdings dauert die Überweisung sicher wieder einige Tage …

Ja, InactiveColor gibt es schon, allerdings schert sich die Timeline derzeit wenig darum und malt sich immer schwarz, auch wenn kein Element geladen ist. Ab Build 1184 wird das geändert. Mit InactiveColor=#000000 kannst du dann alles zusammen wieder auf schwarz setzen.

icon_history und icon_error müssten eigentlich noch so funktionieren wie früher. Lediglich für “normale” Elemente (noch nicht gespielt, kein Fehler) muss man jetzt die neuen itemtype_* Grafiken verwenden.

Hast natürlich wieder völlig Recht.
Durch die ganze Umstellung auf V4 bin ich im Kopf wohl schon komplett verwirrt.
Ich war scheinbar davon überzeugt, dass es die alte Konvention der Icons nicht mehr gibt und bin dadurch nie auf die Idee gekommen, den ursprünglichen Namen weiter zu verwenden.

Das History Icon wird weiterhin berücksichtig. (gerade getestet)

Die Timeline wäre im Prinzip nicht so wichtig gewesen, aber damit ist die Sache nun komplett durchgängig.

Bin wunschlos glücklich und werde mich wieder mehr in den Hintergrund begeben.
Danke Torben für deinen exzellenten Support!

Ich brauche mal Hilfe. Habe mir jetzt auch ein eigenes Player-Layout angelegt. Den Text hab ich mir schon wie gewünscht in einem Container anordnen können. Bei der Platzierung des Start- und Stop-Buttons komme ich nicht weiter. Der Stop-Button soll in Höhe der Time-Angabe ganz rechts am Playerrand stehen, der Start-Button links daneben.
Wie kann ich das in der XML-Datei realisieren?

<Container Height="120"> <Container Align="Fill"> <Container Align="Fill"> <Container Align="Fill"> <Object Name="ProgressBar" Align="Fill" MarginTop="14" MarginBottom="8" MarginLeft="5" /> <Object Name="Name" Align="Left" /> </Container> <Object Name="Artist" Align="Top" /> </Container> <Object Name="Time" Align="Right" MarginRight="10" /> </Container> <Object Name="Waveform" Align="Top" MarginBottom="5" /> <Object Name="Title" Align="Top" MarginLeft="5" /> </Container>

Torben, wäre super, wenn du mir helfen könntest. Danke!

Und noch ein Hinweis: Der Parameter “NextNameFontColor” wird in dem benutzerdefinierten Layout nicht umgesetzt.