Davon ausgehend, dass du hauptsächlich für die Mehrheit der User sprichst, macht es natürlich Sinn, das Ganze etwas zu präzisieren.
Die Lösung komplett in einer Schalterleiste mit einem Schalter zum Testen und Umbenennen zu liefern, ist natürlich purer Luxus.
Für den Einen oder Anderen, auf dieses Problem fokussierten, ist eine Minimallösung aber verständlicherweise klar erstrebenswerter.
Dafür war es aber gestern zu spät für mich und ich hatte auch keine Lust mehr. Gerne komme ich aber jetzt deinem Wunsch nach.
Ziel ist es, bei einem Schalter, über den ein Programm aufgerufen wird, zu überprüfen, ob dieses Programm tatsächlich zur Verfügung steht.
Ich habe zum Beispiel das Problem bei meiner USB-Version von Directory Opus, dass ich bestimmte Programme bei anderen Rechnern nicht zur Verfügung habe. Daher möchte ich, dass der Schalter gar nicht aktiviert ist, wenn das der Fall ist. Somit kann ich auf ein oder mehrere Programme, wie zum Beispiel Notepad++ oder alternativ den Standardeditor abfragen. Ist keiner von beiden erreichbar, soll der Schalter deaktiviert werden.
Der Wechsel des Icons ist letztendlich Kosmetik, obwohl man durch aussagekräftige Icons sehr wohl auch die tatsächliche Verfügbarkeit optisch anzeigen könnte.
Da ich bei meinen Beispielen keine Symbole aus den Standardpaletten genommen habe und ich die Schalter nicht mehr ändern wollte, habe ich die verwendeten
Directory Opus Icon Sets (*.
dis) als Anhang beigefügt. Diese sind als *.zip-Dateien umbenannt, weil ich hier Dateien mit der Endung *.dis nicht direkt hochladen kann.
tbone hat geschrieben: 6. Apr 2025 08:27
Was bedeutet bspw. "#0-9-A-Z (grau):9"?! Ist das erste eine Angabe zu einem Icon-Set und die Nummer nach dem Doppelpunkt der Index des Icons?
Korrektur Anfang
Ja, die Icons werden in einer Datei zusammengefasst als DOpus-Icon-Set (*.dis). Diese Angaben müssen quotiert erfolgen, wobei der erste Teil der Name der Iconsammlung ist und der zweite, durch den Doppelpunkt getrennten Teil, der Name des Symbols innerhalb der Sammlung darstellt. In diesem Beispiel wird also das Symbol mit dem Namen "9" innerhalb der Sammlung mit dem Namen
0-9-A-Z (grau) angesprochen. Die Symbolleisten stehen in
/dopusdata\Icons.
Korrektur Ende
Nun zum eigentlichen Thema:
Die Fehlermeldung war mit deinen Lösungsvorschlägen nicht zu beheben, haben mich aber auf die richtige Spur gebracht.
Letztendlich habe ich drei Schalter definiert, wovon die ersten beiden das Gleiche tun, nur einmal mit Schalter-Code und einmal mit Evaluator-Code.
Der dritte Schalter ist mittels Evaluator-Code realisiert.
Schalter 1 und 2
Prüft, ob
eine bestimmte Datei vorhanden ist und wird deaktiviert und die Beschriftung und das Symbol wird geändert, wenn
die Datei nicht da ist.
Schalter 3
Prüft, ob
eine von zwei bestimmten Dateien vorhanden ist und wird deaktiviert und die Beschriftung und das Symbol wird geändert, wenn
keine der Dateien da ist.
Schalter 1 (Schalter-Code):
Code: Alles auswählen
// Wenn die Datei vorhanden ist:
// Beschriftung: ✅
// Status: aktiviert
// Icon: 1 (blau)
// Wenn die Datei NICHT vorhanden ist:
// Beschriftung: ❌
// Status: deaktiviert
// Icon: 0 (blau)
// Schalter-Code
@label:= return (Exists("/home\Hilfsprogramme\_Testordner\Testdatei_01.txt")) ? "<%checkbox:2>" : "<%checkbox:0>";
@disableif:= return (!Exists("/home\Hilfsprogramme\_Testordner\Testdatei_01.txt"))
@icon:= return (!Exists("/home\Hilfsprogramme\_Testordner\Testdatei_01.txt") ? "#0-9-A-Z (blau):9" : "#0-9-A-Z (blau):0");
// __________________________________________________________________________________________
Show "/home\Hilfsprogramme\_Testordner\Testdatei_01.txt"
Schalter 2 (Evaluator-Code):
Code: Alles auswählen
// Wenn die Datei vorhanden ist:
// Beschriftung: ✅
// Status: aktiviert
// Icon: 1 (rot)
// Wenn die Datei NICHT vorhanden ist:
// Beschriftung: ❌
// Status: deaktiviert
// Icon: 0 (rot)
// Evaluator-Code
@evalalways:= Datei_01 = Exists("/home\\Hilfsprogramme\\_Testordner\\Testdatei_01.txt");
@label:= return (Datei_01) ? "<%checkbox:2>" : "<%checkbox:0>";
@disableif:= return (!Datei_01);
@icon:= return (!Datei_01) ? "#0-9-A-Z (rot):9" : "#0-9-A-Z (rot):1";
// __________________________________________________________________________________________
Show "/home\Hilfsprogramme\_Testordner\Testdatei_02.txt"
@evalalways:= Datei_01 = Exists("/home\\Hilfsprogramme\\_Testordner\\Testdatei_01.txt");
Legt eine Variable mit dem Namen Datei_01 an, in die das Ergebnis der Abfrage über Exists auf den Dateinamen erfolgt.
@label:= return (Datei_01) ? "<%checkbox:2>" : "<%checkbox:0>";
Weist dem Label das Ergebnis der Abfrage auf Datei_01 zu. Ist Datei_01 wahr, wird der erste Text an Label übergeben, sonst der zweite Text.
@disableif:= return (!Datei_01);
Weist disableif das Ergebnis der Abfrage auf Datei_01 zu. Ist Datei_01 wahr, wird das Symbol deaktiviert.
@icon:= return (!Datei_01) ? "#0-9-A-Z (rot):9" : "#0-9-A-Z (rot):1";
Weist dem Icon das
negierte Ergebnis der Abfrage auf Datei_01 zu. Ist Datei_01 wahr, wird der erste Text an Icon übergeben, sonst der zweite Text.
Schalter 3 (Evaluator-Code):
Code: Alles auswählen
// Wenn Datei_01 UND Datei_02 vorhanden ist:
// Beschriftung: 1 ✅ 2 ✅
// Status: aktiviert
// Icon: 1 (grau)
// Wenn Datei_01 vorhanden UND Datei_02 nicht vorhanden ist:
// Beschriftung: 1 ✅ 2 ❌
// Status: aktiviert
// Icon: 1 (grau)
// Wenn Datei_01 nicht vorhanden UND Datei_02 vorhanden ist:
// Beschriftung: 1 ❌ 2 ✅
// Status: aktiviert
// Icon: 1 (grau)
// Wenn Datei_01 UND Datei_02 nicht vorhanden ist:
// Beschriftung: 1 ❌ 2 ❌
// Status: deaktiviert
// Icon: 0 (grau)
// Evaluator-Code
@evalalways:= Datei_01 = Exists("/home\\Hilfsprogramme\\_Testordner\\Testdatei_01.txt");
@evalalways:= Datei_02 = Exists("/home\\Hilfsprogramme\\_Testordner\\Testdatei_02.txt");
@evalalways:= MindestensEine = (Datei_01 || Datei_02);
@label:= return (MindestensEine == true) ? ((Datei_01 ? "1 <%checkbox:2>" : "1 <%checkbox:0>") + (Datei_02 ? " 2 <%checkbox:2>" : " 2 <%checkbox:0>")) : "1 <%checkbox:0> 2 <%checkbox:0>";
@disableif:= return (MindestensEine==false);
@icon:= return (MindestensEine==false) ? "#S-DOX II Additional Icon Set:arrow_left" : "#S-DOX II Additional Icon Set:arrow_left2";
@icon:#S-DOX II Additional Icon Set:arrow_left,
// __________________________________________________________________________________________
Show "/home\Hilfsprogramme\_Testordner\Evaluator-Code.txt"
Der Schalter Umbenennen in der Symbolleiste benennt die Datei(en) entsprechend um, sodass die Dateien für den Schalter-Code nicht mehr erreichbar sind und umgekehrt. Damit kann man Änderungen leichter überprüfen. Zum Testen kann man entweder die Pfade und Dateinamen in den Schaltern anpassen oder den Inhalt der Datei
_Testordner.zip in das Verzeichnis
/home\Hilfsprogramme (also: /home\Hilfsprogramme\_Testordner) entpacken.
Umbenennen:
Code: Alles auswählen
<?xml version="1.0"?>
<button backcol="#ff8000" display="both" label_pos="right" textcol="#ffffff" type="three_button">
<label>Umbenennen</label>
<tip>Wechselt in das Verzeichnis ...\_Testordner\n<%mousel> Umbenennen von <kbd>Testdatei_01.txt</kbd> <%arrowl><%arrow> <kbd>Testdatei_01.txt-</kbd>\n<%mouser> Umbenennen von <kbd>Testdatei_02.txt</kbd> <%arrowl><%arrow> <kbd>Testdatei_02.txt-</kbd>\n<%mousem> Wechseln nach <kbd>/home\Hilfsprogramme\_Testordner</kbd></tip>
<icon1>#Rename.png</icon1>
<button backcol="none" display="both" textcol="none">
<label>Umbenennen 1</label>
<tip>Wechselt den Dateinamen zwischen <kbd>Testdatei_01.txt</kbd> <%arrowl><%arrow> <kbd><kbd>Testdatei_01.txt-</kbd></tip>
<icon1>#newcommand</icon1>
<function type="normal">
<instruction>// Go "/home\Hilfsprogramme\_Testordner\"</instruction>
<instruction />
<instruction>@ifexists:"/home\Hilfsprogramme\_Testordner\Testdatei_01.txt"</instruction>
<instruction>Rename "/home\Hilfsprogramme\_Testordner\Testdatei_01.txt" TO "Testdatei_01.txt-"</instruction>
<instruction />
<instruction>@ifexists:"/home\Hilfsprogramme\_Testordner\Testdatei_01.txt-"</instruction>
<instruction>Rename "/home\Hilfsprogramme\_Testordner\Testdatei_01.txt-" TO "Testdatei_01.txt"</instruction>
</function>
</button>
<button backcol="none" display="both" textcol="none">
<label>Umbenennen 2</label>
<tip>Wechselt den Dateinamen zwischen <kbd>Testdatei_02.txt</kbd> <%arrowl><%arrow> <kbd><kbd>Testdatei_02.txt-</kbd></tip>
<icon1>#newcommand</icon1>
<function type="normal">
<instruction>// Go "/home\Hilfsprogramme\_Testordner\"</instruction>
<instruction />
<instruction>@ifexists:"/home\Hilfsprogramme\_Testordner\Testdatei_02.txt"</instruction>
<instruction>Rename "/home\Hilfsprogramme\_Testordner\Testdatei_02.txt" TO "Testdatei_02.txt-"</instruction>
<instruction />
<instruction>@ifexists:"/home\Hilfsprogramme\_Testordner\Testdatei_02.txt-"</instruction>
<instruction>Rename "/home\Hilfsprogramme\_Testordner\Testdatei_02.txt-" TO "Testdatei_02.txt"</instruction>
</function>
</button>
<button backcol="none" display="both" textcol="none">
<label>Gehe zu _Testordner</label>
<tip>Wechselt in das Verzeichnis <kbd>/home\Hilfsprogramme\_Testordner</kbd></tip>
<icon1>#newcommand</icon1>
<function type="normal">
<instruction>Go "/home\Hilfsprogramme\_Testordner\"</instruction>
</function>
</button>
</button>