[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: 190

8. Okt 2019, 20:35
Beitrag # 1 von 5
Bewertung:
(2881 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: 190

22. Nov 2019, 19:11
Beitrag # 2 von 5
Beitrag ID: #573002
Bewertung:
(2540 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: 12290

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

23. Nov 2019, 11:25
Beitrag # 4 von 5
Beitrag ID: #573022
Bewertung: |||||
(2471 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: 12290

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

Aktuell

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
06.07.2020

Digicomp Academy AG, Basel, Bern, Zürich oder virtuell
Montag, 06. Juli 2020, 08.30 - 17.00 Uhr

Kurs

In diesem Kurs lernen Sie alle wichtigen Funktionen von Affinity Designer, die Ihren Workflow optimieren und Ihre Ideen zum Fliegen bringen. Nach dem Kurs können Sie Ihre Projekte mit viel Kreativität und Freude abwickeln.

Preis: CHF 500.-
Dauer: 1 Tag

Nein

Organisator: Digicomp Academy AG

Kontaktinformation: Isil Günalp, E-Mailisil.guenalp AT digicomp DOT ch

https://www.digicomp.ch/weiterbildung/software-anwendungs-trainings/adobe-trainings/desktop-publishing/affinity-produkte/kurs-affinity-designer-basic

Veranstaltungen
06.07.2020 - 07.07.2020

Digicomp Academy AG, Zürich oder virtuell
Montag, 06. Juli 2020, 08.30 Uhr - Dienstag, 07. Juli 2020, 17.00 Uhr

Kurs

Adobe Experience Design, kurz XD ist das neue Programm für UX/UI-Design. Mit XD lassen sich visuelles Design und klickbare Prototypen nahtlos verbinden. Lernen Sie die wichtigsten Funktionen vom Entwurf am Bildschirm bis zum online geteilten Prototypen.

Preis: CHF 1'400.-
Dauer: 2 Tage

Nein

Organisator: Digicomp Academy AG

Kontaktinformation: Isil Günalp, E-Mailisil.guenalp AT digicomp DOT ch

https://www.digicomp.ch/weiterbildung/software-anwendungs-trainings/adobe-trainings/web-publishing/adobe-xd-cc/kurs-adobe-xd-basic

Neuste Foreneinträge


Keine Berechtigung zum Senden von Apple-Events an SatimageOSAX

Ende Zeichenformat suchen

Benutzerdefinierte Eigenschaft in Formularfeld schreiben

QuarkXPress in InDesign

Mikrotypografie im Englischen (USA)

Bilderdruckpapier ohne OBA, gibt es noch?

QXP 2020 Testinstallation

Zeichenstift erkennt Objektkontur. Und Illustrator?

extendStudio stellt die Arbeit an Plugins für DW ein.

Time Machine konnte das Backup auf „Elements_10“ nicht abschließen.
medienjobs