[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Info-Fenster kurz auf dem Bildschirm anzeigen (Script UI)

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Info-Fenster kurz auf dem Bildschirm anzeigen (Script UI)

Karsten Lange
Beiträge gesamt: 187

8. Okt 2019, 20:35
Beitrag # 1 von 5
Bewertung:
(1230 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo alle zusammen,

ich arbeite mit unterschiedlichsten InDesign-Versionen zusammen und möchte während der Ausführung eines Scripts kurz (bswp. 2 sekundenlang) Informationen für den Anwender auf dem Bildschirm "zaubern".
"Mein" bisheriger Code funktioniert zwar unter CS6, aber unter CC 17 und 18 bspw. nicht. Er wird zwar ohne Anstand entgegengenommen, aber es öffnet sich halt kein Fenster mit der Info auf dem Bildschirm.

var myWindow = new Window ("palette", undefined, undefined, {borderless: true});
myWindow.margins = [0,0,0,0];
myMessage =myWindow.add ("panel");
myMessage.add ("statictext", undefined, "Informationstext");
myMessage.graphics.backgroundColor = myWindow.graphics.newBrush(myWindow.graphics.BrushType.SOLID_COLOR,[1.0,0.0,0.0], 1);
myMessage.graphics.foregroundColor = myWindow.graphics.newPen(myWindow.graphics.BrushType.SOLID_COLOR,[1.0,1.0,1.0], 1);
myWindow.show ();
$.sleep(2000);
myWindow.close();

Nun habe ich hier (https://stackoverflow.com/questions/40288034/prevent-dialogs-and-alerts-while-showing-a-progress-bar-in-indesign-cc-javascrip) etwas ähnliches gefunden und was man meines Erachtens auch statt für einen Fortschrittsbalken und für schnöden Text verwenden kann ... aber: Trotz probieren und googeln schaffe ich es nicht die Farbe des Hintergrunds und der Schrift zu ändern, wie in dem alten Code.

progressPanel = new ProgressPanel ("palette", undefined, undefined, {borderless: true});
progressPanel.show();
$.sleep(2000);
progressPanel.show();

function ProgressPanel ()
{
this.myProgressPanel = new Window("palette", undefined, undefined, {borderless: true});
this.myProgressPanel.myText
= this.myProgressPanel.add("statictext", [1, 1, 300, 240], "anzuzeigender Text");

this.show = function() {
this.myProgressPanel.show();
this.myProgressPanel.update();
}
}


Mit dem erstellen von User Interfaces stehe ich eh auf Kriegsfuß und nu auch mitten im Wald. Hat jemand die Lösung oder einen Tipp? Danke.

Karsten.
X

Info-Fenster kurz auf dem Bildschirm anzeigen (Script UI)

Karsten Lange
Beiträge gesamt: 187

22. Nov 2019, 19:11
Beitrag # 2 von 5
Beitrag ID: #573002
Bewertung:
(889 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
 
Hallo alle zusammen,

ich muss mich erst einmal bei Martin entschuldigen, dass ich auf seine fixe Antwort solange keine Reaktion gezeigt habe - sorry Martin. Leider hatte ich mir auch seine Lösung nicht gleich kopiert und stehe jetzt immer noch bei 0 bzw. eigentlich noch schlimmer da. Denn in der Zwischenzeit haben meine Versuche auf Mac & PC und CS6, CC17 bis CC19 zu unterschiedlichsten Ergebnissen geführt und verwirren mich zunehmend.

Beispielsweise führt auf dem PC mit CC18 der folgende Code (aber auch anderer) aus dem ExtendScript Toolkit heraus ausgeführt dazu, dass innerhalb der Wartezeit von 2 Sekunden der Hintergrund vom Dialogfenster weiß ist (es ist kein Text darin zu lesen) und nach Ausführung des Codes kommt ja das ESTK-Fenster wieder in den Vordergrund. Hole ich dann InDesign in den Vordergrund ist der Dialog noch offen (denn ich schließe ihn nicht im Code) und der Dialoghintergrund ist grau und der Text ist weiß … man kann ihn also lesen. Verwunderung macht sich breit.
Hängt möglicherweise auch mit der Hardware zusammen - den Topf will ich auch gar nicht auf machen - aber kennt jemand diesen Effekt?


function createWindow ()
{
var w = new Window ('palette');
var m = w.add ('statictext');
m.text = 'Hello, world!';
return w;
}

var win = createWindow();
win.show();
$.sleep(2000);




Auf dem Mac gibt es zwischen den ID-Versionen auch Unterschiede. CC19 konnte ich bis jetzt noch gar nicht überreden die oben aufgeführten Codes auszuführen bzw. ausführen tut er es ja, aber Dialoge auch auf dem Bildschirm zu zeigen scheint zuviel verlangt zu sein.

In der Zwischenzeit wäre ich also schon froh einen Code für einen Dialog zu haben (der sich dann automatisch wieder schließt), der übergreifend verlässlich funktioniert. Meine ästhetischen Vorstellungen an diesen Dialog sind in den letzten Wochen in den Hintergrund gerückt. Nur eben weißer Text auf weißem Hintergrund halte ich für suboptimal.


Danke und allen ein schönes Wochenende - Karsten.


als Antwort auf: [#572129]

Info-Fenster kurz auf dem Bildschirm anzeigen (Script UI)

Martin Fischer
  
Beiträge gesamt: 12209

22. Nov 2019, 20:20
Beitrag # 3 von 5
Beitrag ID: #573007
Bewertung:
(878 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Karsten,

Dein Code funktioniert bei mir tadellos – in CC2018.



Versuch's mal damit.

Code
msg2go('Fertig!' /* Text */, 2 /* Sekunden */) 

function msg2go(_text, _sec)
{
if (_sec == undefined)
var _sec = 1;
var win = new Window("palette", 'Fenster');
win.size = [120,60];
win.add("statictext", undefined, _text);
win.show();
beep();
$.sleep(_sec*1000);
win.close();
}


Oder schau in den Skripten von Hans Haesler.
Hans verwendet auch gerne so einen Husch-und-weg Dialog.


Zum Beispiel hier:
ZeilenZuRahmen_602d.js

Code
// das Ende der Aktion verkünden  
var dlog = new Window("palette");
dlog.size = [320,100];
dlog.add("statictext", [80, 100, 320, 116], "Fertig.");
dlog.show();
// eine kleine Pause
$.sleep(999);
// das Fenster schliessen
dlog.close();


Viele Grüße
Martin




als Antwort auf: [#573002]
(Dieser Beitrag wurde von Martin Fischer am 22. Nov 2019, 20:26 geändert)

Anhang:
hello.png (11.3 KB)

Info-Fenster kurz auf dem Bildschirm anzeigen (Script UI)

Gerald Singelmann
  
Beiträge gesamt: 6220

23. Nov 2019, 11:25
Beitrag # 4 von 5
Beitrag ID: #573022
Bewertung: |||||
(820 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Um noch einen Denkansatz in das Rund zu werfen:

$.sleep friert InDesign ein. Jedes Script verhindert, dass InDesign – während das Script läuft – irgendwas anderes machen kann. Ist halt Single Thread.

Deswegen habe ich vor einiger Zeit angefangen, mit onIdle zu experimentieren.

Das ist ein Event, der gefeuert wird, wenn InDesign grad der Meinung ist, nicht zu tun zu haben.

Man kann also, wenn das Script fertig ist, das Fenster anzeigen und sich in den onIdle-Event eintragen.
Alle soundso Sekunden fragt InDesign dann beim Script an, ob es was machen will, ist aber in der Zwischenzeit nicht blockiert.

Wichtig bei all dem ist, dass das Script nicht in der Script-Engine "main" läuft, sondern in einer eigenen, damit alle Funktionen und Variablen persistent sind.

Hier ein Code, um das Prinzip zu illustrieren.

Code
#targetengine "singels_idle_test" 

main();

function main() {
// -------------------------------------------------
// Platzhalter für das eigentliche Script
// -------------------------------------------------
do_something();

// -------------------------------------------------
// Wie lange anzeigen? in msec
// -------------------------------------------------
var time_to_keep_open = 3000;

// -------------------------------------------------
// Palette erzeugen
// -------------------------------------------------
var w = new Window( "palette" );
w.add("statictext", undefined, "FEDDICH");
w.add("statictext", undefined, "...warte rund " + Math.floor( time_to_keep_open / 1000 ) + " Sekunden...");
w.txt = w.add("statictext", [undefined, undefined, 400, 10], "...");
w.pb = w.add("progressbar", [undefined, undefined, 400, 10]);
w.pb.value = 0;
w.pb.maxvalue = time_to_keep_open;
w.show()

// -------------------------------------------------
// IdleHandler einrichten, um InDesign nicht zu blockieren
// -------------------------------------------------
var then = new Date().getTime();
var myIdleTask = app.idleTasks.add({name:"singels_idle_taks", sleep:100});
var onIdleEventListener = myIdleTask.addEventListener("onIdle", close_if_time);


// -------------------------------------------------
// Check, ob Zeit um ist
// -------------------------------------------------
function close_if_time() {
var now = new Date().getTime();
w.txt.text = (Math.round( (now-then) * 1000 ) / 1000).toString()
if ( now - then > time_to_keep_open ) {
w.close();
// --------------------------------------------------
// IdleTask wieder löschen, indem sleep auf 0 gesetzt wird.
// -------------------------------------------------
myIdleTask.sleep = 0;
} else {
w.pb.value = now - then;
}
}

// -------------------------------------------------
// Diese Funktion tut nichts zur Sache
// -------------------------------------------------
function do_something() {
var doc;
if ( app.documents.length ) {
doc = app.activeDocument;
} else {
doc = app.documents.add();
}
var pg = doc.layoutWindows[0].activePage;
var bd = pg.bounds;
var count = 100;
var w1 = new Window("palette");
w1.pb = w1.add("progressbar", [undefined, undefined, 300, 4] );
w1.pb.maxvalue = count;
w1.show();
for ( var n = 0; n < count; n++ ) {
w1.pb.value = n;
var t = bd[0],
l = bd[1],
b = bd[2],
r = bd[3],
pw = r - l,
ph = b - t,
minsize = 20,
x = Math.floor( Math.random() * (pw - minsize) ),
y = Math.floor( Math.random() * (ph - minsize) ),
xrest = pw - x - minsize,
yrest = ph - y - minsize,
w = minsize + Math.floor( Math.random() * xrest ),
h = minsize + Math.floor( Math.random() * yrest );
var swatch = doc.swatches.anyItem();
var tint = Math.floor( Math.random() * 100 );

var thing = pg.rectangles.add();
thing.geometricBounds = [ y + t, x + l, y+h+t, x+w+l ];
thing.strokeWeight = 0;
thing.fillColor = swatch;
thing.fillTint = tint;
}
w1.close();
}
}



als Antwort auf: [#573007]

Info-Fenster kurz auf dem Bildschirm anzeigen (Script UI)

Martin Fischer
  
Beiträge gesamt: 12209

23. Nov 2019, 12:06
Beitrag # 5 von 5
Beitrag ID: #573024
Bewertung:
(814 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hey Gerald,

das ist eine richtig tolle Sache!

Auch die Funktion, die laut Deinen Angaben "nichts zur Sache tut", aber ein wahres Feuerwerk mit bunten Rechtecken auf die Seite zaubert.

Klasse!
Danke Dir.

Viele Grüße
Martin




als Antwort auf: [#573022]
X

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
19.12.2019

Ortsunabhängig
Donnerstag, 19. Dez. 2019, 10.00 - 10.30 Uhr

Webinar

Wir stellen Ihnen anhand konkreter Workflows die Möglichkeiten und Vorteile einer automatischen PDF-Prüfung und -Korrektur vor.

halbstündig, kostenlos

Ja

Organisator: Impressed GmbH

Kontaktinformation: Detlef Grimm, E-Mailschulungen AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=113

Switch PDF Automation Server
Veranstaltungen
09.01.2020

Ortsunabhängig
Donnerstag, 09. Jan. 2020, 10.00 - 10.30 Uhr

Webinar

Wir zeigen Ihnen in diesem ca. halbstündigen kostenlosen Wewbinar, wie Sie mit der pdfToolbox im Handumdrehen PDF-Dateien überprüfen, korrigieren und für verschiedene Druckbedingungen aufbereiten können.

Ja

Organisator: Impressed GmbH

Kontaktinformation: Detlef Grimm, E-Mailschulungen AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=281

callas pdfToolbox 11