[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:
(1132 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.
Hier Klicken 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:
(791 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: 12207

22. Nov 2019, 20:20
Beitrag # 3 von 5
Beitrag ID: #573007
Bewertung:
(780 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: |||||
(722 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: 12207

23. Nov 2019, 12:06
Beitrag # 5 von 5
Beitrag ID: #573024
Bewertung:
(716 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]
Hier Klicken X
Hier Klicken

Aktuell

Diverses
Dateipfaden_FileMaker_300

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
09.12.2019

pre2media, Dammstrasse 8, 8610 Uster
Montag, 09. Dez. 2019, 18.13 - 18.14 Uhr

Referat

Alle reden davon – wir zeigen ihnen kompakt was in den einzelnen Programmen wirklich steckt. Sind die Programme von Affinity – bereits heute – eine Alternative zu den Adobe-Programmen? Was versteht Affinity unter StudioLink und der vollständigen Integration der Affinity-Apps.

10.00 bis 12.00 Affinity Photo Bildbearbeitung CHF 90.00 13.00 bis 15.00 Affinity Designer Grafikdesign CHF 90.00 15.00 bis 17.00 Affinity Publisher Layoutprogramm CHF 90.00 Alle drei Affinity Programme zusammen (6 Lektionen) CHF 220.00

Ja

Organisator: pre2media gmbh, Dammstrasse 8, 8610 Uster, info@pre2media.ch, www.pre2media.ch

Kontaktinformation: Roger Thurnherr, E-Mailinfo AT pre2media DOT ch

https://www.pre2media.ch/-1/de/kurse/affinity--referate-und-kurse/mo-9-dezember-2019--affinity-referate/252/

Affinity-Referat bei pre2media
Veranstaltungen
12.12.2019

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

Webinar

In diesem ca. halbstündigen kostenlosen Webinar stellen wir Ihnen die Neuerungen in der Version 2019 von Enfocus PitStop Pro vor.

Ja

Organisator: Impressed GmbH

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

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

Enfocus PitStop 2019