[GastForen Programmierung/Entwicklung AppleScript ID CS6: enable redraw

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

ID CS6: enable redraw

Goar
Beiträge gesamt: 395

18. Aug 2014, 18:30
Beitrag # 1 von 8
Bewertung:
(3775 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Skripter,

ich hoffte, ein umfangreiches Korrekturskript beschleunigen zu können, indem ich die Bildschirmauffrischung vorübergehend deaktiviere

Code
set enable redraw of script preferences to false 


Aber auch wenn ich das Skript aus dem Skript-Menü heraus starte, springt und zappelt es im Fenster herum.

Funktioniert dieser Befehl nicht?

@Hans

Im Beitrag http://www.hilfdirselbst.ch/...i?post=421824#421824
hast du vor der Ausführung das redraw eingeschaltet; hatte es damit in dem Skript eine besondere Bewandnis?

Grüße von
X

ID CS6: enable redraw

Hans Haesler
  
Beiträge gesamt: 5826

18. Aug 2014, 20:02
Beitrag # 2 von 8
Beitrag ID: #531169
Bewertung:
(3731 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

nun ... mit JavaScript habe ich das Ausschalten des Bildschirmaufbaus erfolgreich angewendet.
Je nach den auszuführenden Aktionen wird die Ausführung mehr oder weniger deutlich beschleunigt.

Weshalb es bei Dir nicht klappen will, kann ohne das Script gesehen zu haben nicht beurteilt werden.

Das Einschalten im zitierten Script dient einzig und allein zum Sicherstellen, dass der Fortschrittsbalken auch angezeigt wird.
Wenn 'redraw' ausgeschaltet ist, dann wird die Anzeige eines Fortschrittsbalkens unterdrückt.

Gruss, Hans


als Antwort auf: [#531164]

ID CS6: enable redraw

Goar
Beiträge gesamt: 395

19. Aug 2014, 10:10
Beitrag # 3 von 8
Beitrag ID: #531178
Bewertung:
(3672 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

reicht die verallgemeinerte Form?
Code
activate -- sorgt dafür, dass das Skript nach vorne kommt; kann lange Skripts etwas beschleunigen 

tell application "Adobe InDesign CS6"
-- Test, ob ein Dokument offen ist
-- Zuweisung set curStory …

-- Bildschirm soll erst nach Ablauf des Skripts neu aufgebaut werden
set enable redraw of script preferences to false

-- Alle im Text verankerten Bilder sind etwas schmaler als die drei Textspalten
-- Sie werden an die Spaltenbreite angepasst

-- Nachdem die Suchen-Ersetzen-Vorgaben eingestellt wurden,
-- folgen mehr als hundert Change-greps
-- Die Vorgaben werden zurückgesetzt

set enable redraw of script preferences to true

end tell

Zur Not könnte das Skript einen weißen Bereich extrem vergrößern, dann würde sich am Bildschirm auch nichts bewegen, solange das Skript läuft.

Freundliche Grüße


als Antwort auf: [#531169]

ID CS6: enable redraw

Hans Haesler
  
Beiträge gesamt: 5826

19. Aug 2014, 12:33
Beitrag # 4 von 8
Beitrag ID: #531189
Bewertung:
(3648 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

wie gesagt, hatte ich das Abstellen der Bildschirmauffrischung in JavaScripts erfolgreich eingesetzt.
Zum Beispiel in FarbSkala, erhältlich hier http://www.fachhefte.ch / Links "JavaScripts", "Mac OS X deutsch", "InDesign CS2" bis "InDesign CS5".

Eine sehr kurze Fassung des Scripts zeigt auf, dass es mit AppleScript ebenfalls funktioniert.
Bedingung: Das Script muss mit Doppelklick auf seinen Namen im Bedienfeld "Skripte" gestartet werden.

JavaScript
Code
var curDoc = app.documents[0]; 

app.scriptPreferences.enableRedraw = false;

var y1 = 10;
var x1 = 10;
var fH = 10;
var fW = 10;
var fT = 1;

for (var n=0; n<10; n++) {
for (var m=0; m<10; m++) {
curDoc.rectangles.add({geometricBounds:[y1,x1,y1+fH,x1+fW],
fillColor:"Magenta", fillTint:fT, strokeColor:"None"});
x1 += fW+1;
fT += 1;
}
y1 += fH+1;
x1 = 10;
}

app.scriptPreferences.enableRedraw = true;

AppleScript:
Code
tell application "Adobe InDesign CS5" 

set enable redraw of script preferences to false

set y1 to 10
set x1 to 10
set fH to 10
set fW to 10
set fT to 1

tell document 1
repeat with n from 1 to 10
repeat with m from 1 to 10
make new text frame at beginning with properties ¬
{geometric bounds:{y1, x1, y1 + fH, x1 + fH}, fill color:"Magenta", fill tint:fT, stroke color:"None"}
set x1 to x1 + fW + 1
set fT to fT + 1
end repeat
set y1 to y1 + fH + 1
set x1 to 10
end repeat
end tell

set enable redraw of script preferences to true
end tell

Wie startest Du denn Dein Script? Ab "AppleScript-Editor" scheint die "redraw"-Definition ignoriert zu werden. Und dasselbe gilt für einen Start ab Menü-Leiste (Skriptordner des Benutzers).

Gruss, Hans


als Antwort auf: [#531178]
(Dieser Beitrag wurde von Hans Haesler am 19. Aug 2014, 12:47 geändert)

ID CS6: enable redraw

Goar
Beiträge gesamt: 395

19. Aug 2014, 14:24
Beitrag # 5 von 8
Beitrag ID: #531202
Bewertung:
(3622 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

im InDesign_ScriptingGuide_AS.pdf fand ich zu enable redraw:
Turns screen redraw on or off while a script is running from the Scripts panel.
Daran hatte ich mich gehalten, Skriptstart also mit Doppelklick ins Skripte-Bedienfeld.
Den Anfangsbefehl habe ich nun wie in deinem Beispiel direkt unter tell application gesetzt.

Mit enable redraw false braucht das Skript 23 sec, mit enable redraw true braucht es 24 sec.
In beiden Fällen viel Bewegung auf dem Schirm und die Seiten in der Seitenpalette werden weiß, bis das Skript fertig ist.

Mit einem weißen Fleck auf der Seite (2232% Zoom) und Seitenpalette weg – es tauchen zwei verschiedene Textausschnitte auf, die sich ansonsten aber ruhig verhalten – brauchte es 19 sec.

Schließlich habe ich die JavaScript-Zeilen in mein Script eingebunden …
Code
set redrawTrue to "app.scriptPreferences.enableRedraw = true;" 
set redrawFalse to "app.scriptPreferences.enableRedraw = false;"

tell application "Adobe InDesign CS6"
do script redrawTrue language javascript
-- mach was
do script redrawFalse language javascript
end tell

… wie du es vorgemacht hast:
http://www.hilfdirselbst.ch/...able%20redraw#421824
Aber auch das hat das Skript nicht beschleunigt.

Wenn dir nicht spontan die Hammer-Idee kommt, verwende nicht weiter Zeit darauf.
Ich habe rechts und links vom Weg einiges Interessante aufgelesen und kann mit der Laufzeit des Skripts gut leben.

Vielen Dank, Hans, und Grüße von


als Antwort auf: [#531189]

ID CS6: enable redraw

Hans Haesler
  
Beiträge gesamt: 5826

19. Aug 2014, 14:54
Beitrag # 6 von 8
Beitrag ID: #531205
Bewertung:
(3615 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

dann hast Du ja alles richtig gemacht. :-)

Möglicherweise wird das Auffrischen nicht unterbunden, wenn Bilder im Spiel sind.
Das müsste ich noch prüfen. Aber gleich muss ich weg.

Hammer-Ideen?
– Das Dokument-Fenster manuell ganz klein machen (zusätzlich zum Zoom).
– Den Preflight deaktivieren.
– Das Dokument schliessen, wieder öffnen (aber unsichtbar) und erst anzeigen wenn fertig.

Hilft sehr wahrscheinlich alles nichts.

Gruss, Hans


als Antwort auf: [#531202]

ID CS6: enable redraw

TMA
Beiträge gesamt: 399

20. Aug 2014, 07:43
Beitrag # 7 von 8
Beitrag ID: #531231
Bewertung:
(3562 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier mal eine andere Idee. InDesign mal ganz verbergen:
Code
tell application "System Events" 
set visible of every application process whose name contains "InDes" to false
end tell


Es darf natürlich kein "activate" für InDesign im Script vorkommen.

Evtl. auch mal beim öffnen eines Dokumentes mit "without showing window" testen.

Gruß
TMA


als Antwort auf: [#531205]

ID CS6: enable redraw

Goar
Beiträge gesamt: 395

21. Aug 2014, 17:03
Beitrag # 8 von 8
Beitrag ID: #531299
Bewertung:
(3488 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo TMA,

danke für den Tipp; die »System Events« rücken in letzter Zeit deutlich ins Geschehen.
Habe so ID gleich zu Anfang des Skripts ausgeblendet und erst direkt vor der Schlussmeldung wieder eingeblendet.
Laufzeit 19 sec entspricht dem besten Ergebnis, das ich bisher mit den anderen Möglichkeiten erreicht habe.
Dann habe ich das Skript aus dem Skript-Menü gestartet: Da brauchte es nur 14 sec.
Dabei werde ich’s lassen.

Dokument öffnen mit »without showing window«, lasse ich mal bleiben, da eine Textkette angeklickt werden muss; das möchte ich nicht im Blindflug per Skript machen.

Herzliche Grüße


als Antwort auf: [#531231]
X