[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

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

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

mdomino
Beiträge gesamt: 74

22. Jun 2015, 15:12
Beitrag # 1 von 15
Bewertung:
(5163 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebe ScriptUI-Experten,

ich versuche gerade – leider erfolglos – eine Art Formular mittels ScriptUI umzusetzen mit einer Funktion, dass der Benutzer neue Formularfelder hinzufügen kann.

Bisher habe ich Folgendes:

Code
var d = new Window('dialog', 'My List'); 

d.orientation = "column";
d.alignChildren = 'right';

var lineGroup = d.add ('group');
lineGroup.add('statictext', undefined, '1');
var l1_f1 = lineGroup.add ('edittext', undefined, undefined);
l1_f1.preferredSize.width = 150;
var l1_f2 = lineGroup.add ('edittext', undefined, undefined);
l1_f2.preferredSize.width = 150;
var l1_f3 = lineGroup.add ('edittext', undefined, undefined);
l1_f3.preferredSize.width = 150;

var plusMinus = d.add('group');
var minus = plusMinus.add ("button", undefined, "-");
minus.preferredSize.width = 23;
var plus = plusMinus.add ("button", undefined, "+");
plus.preferredSize.width = 23;


function addLine() {
//an diese Stelle müsste die Erstellung der neuen Felder
}

plus.onClick = addLine;

var buttonGroup = d.add("group");
buttonGroup.add('button', undefined, "Cancel");
buttonGroup.add('button', undefined, "Ok");

d.show();


Wie ihr seht, gibt es einen Plus-Knopf, bei dessen Betätigung eine neue Zeile an Eingabefeldern hinzugefügt werden soll. Das Ganze soll dann auch mit der entsprechenden Zeilennummer (also 2, 3, 4 etc.) versehen sein und es müssten auch entsprechend durchnummerierte Variablen erstellt werden, mit denen ich dann auch die Eingaben der Felder zugreifen kann.

Meine zwei Probleme sind folgende:

1. Ich bekomme es momentan über die onClick-Funktion des Buttons überhaupt nicht hin neue Eingabefelder zu erstellen. Ist das überhaupt möglich? Oder – falls nicht – gibt es alternative Herangehensweisen?

2. Selbst wenn ich das schaffen sollte, weiß ich als relativer Scipting-Neuling nicht, wie ich die durchnummerierten Variablen automatisch erstellen könnte. Gibt es dazu eine gute Methode?


Vielen Dank im Voraus!

mdomino
X

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

WernerPerplies
Beiträge gesamt: 2393

22. Jun 2015, 16:11
Beitrag # 2 von 15
Beitrag ID: #540691
Bewertung:
(5119 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo mdomino,

ich habe mit den Mitteln von Extended Script und ScriptUI bisher keine Möglichkeit gefunden, einem einmal erzeugten Fenster nachträglich Controls hinzuzufügen.

Mag sein, dass ich da etwas übersehen habe.

Ich löse solche Probleme, in dem ich alternative Layouts in verschiedenen, übereinanderliegenden Panels erzeuge und dann die einzelnen Elemente je nach Bedarf anzeige oder verstecke.

Außerdem kann man die Positionen und Größen der einzelnen Controls nachträglich verändern.

Mit dieser Vorgehensweise sollte es auch möglich sein, benutzerdefinierte Eingabefelder zu erzeugen.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#540690]

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

Gerald Singelmann
  
Beiträge gesamt: 6219

22. Jun 2015, 16:43
Beitrag # 3 von 15
Beitrag ID: #540692
Bewertung:
(5111 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das wollte ich auch immer schon mal machen.
Die erste Hälfte der Antwort ist, wie man überhaupt einem Dialog Objekte hinzufügt und wieder weg nimmt.

Dazu braucht man den LayoutManager, der im JavaScript Tools Guide beschrieben wird.

Ein einfaches Beispiel:
Code
main(); 

function main() {
var win = new Window("dialog");
var btn = win.add("button", undefined, "add");
btn.onClick = function() {
var btn2 = win.add("button", undefined, "remove");
win.layout.layout( true );
btn2.onClick = function() {
win.remove( btn2 );
win.layout.layout( true );
}
}

win.show();
}


Wenn ich Zeit hab, schau ich mir die zweite Hälfte auch noch an... :)


als Antwort auf: [#540690]

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

Gerald Singelmann
  
Beiträge gesamt: 6219

22. Jun 2015, 17:02
Beitrag # 4 von 15
Beitrag ID: #540693
Bewertung: |||
(5089 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
OK, ich hatte Zeit.

Hier müsste eigentlich alles drin sein:
Code
main(); 

function main() {
var win = new Window("dialog");

var maingroup = win.add("panel");
maingroup.orientation = "column";
add_group( maingroup );

var show_btn = win.add("button", undefined, "show");
show_btn.onClick = function() {
var txt = "";
for (var n = 0; n < maingroup.children.length; n++) {
txt += maingroup.children[n].edit.text + "\n";
}
alert("Da steht: \n" + txt );
}

win.show();

function add_group( maingroup ) {
var group = maingroup.add( "group" );
group.edit = group.add("edittext", [undefined, undefined, 200, 20], maingroup.children.length );
group.plus = group.add("button", undefined, "+");
group.plus.onClick = add_btn;
group.minus = group.add("button", undefined, "-");
group.minus.onClick = minus_btn;
group.index = maingroup.children.length - 1;
win.layout.layout( true );
return group;
}
function add_btn ( e ) {
add_group( maingroup );
}
function minus_btn ( e ) {
var ix = this.parent.index;
maingroup.remove( maingroup.children[ix] );
win.layout.layout( true );
}
}



als Antwort auf: [#540692]

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

Martin Fischer
  
Beiträge gesamt: 12174

22. Jun 2015, 18:25
Beitrag # 5 von 15
Beitrag ID: #540694
Bewertung:
(5030 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerald,

smart gelöst!

Vielen Dank für den offenen Code.
Der gehört als Beispiel in Peters ScriptUI for dummies aufgenommen. ;-)

Viele Grüße
Martin




als Antwort auf: [#540693]
(Dieser Beitrag wurde von Martin Fischer am 22. Jun 2015, 18:27 geändert)

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

mdomino
Beiträge gesamt: 74

22. Jun 2015, 23:35
Beitrag # 6 von 15
Beitrag ID: #540701
Bewertung:
(4937 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerald,

Wahnsinn, vielen Dank, funktioniert noch eleganter als von mir zunächst angedacht (neue +/-_Buttons für jede Zeile!). So ein kompetentes und hilfreiches Forum wie dieses habe ich wirklich noch nirgends erlebt. Habe mir gerade mein Gehirn verrenkt und glaube ich kann die Funktionsweise des Scripts gut nachvollziehen.

Peters Guide für Dummies hatte ich auch schon durchgewühlt und nichts in diese Richtung gefunden, er schaut ja hier ab und zu vorbei, vielleicht nimmt er es tatsächlich für die nächste Version auf.

Jetzt gebe ich mich daran, das Ganze in mein Script einzuarbeiten.

Vielen Dank noch mal und viele Grüße,

mdomino


als Antwort auf: [#540693]

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

mdomino
Beiträge gesamt: 74

23. Jun 2015, 01:21
Beitrag # 7 von 15
Beitrag ID: #540702
Bewertung:
(4882 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo nochmal,
jetzt habe ich es irgendwie doch noch geschafft mit Geralds Script einen Fehler zu produzieren, den ich noch nicht so ganz nachvollziehen kann. Irgendwie geraten anscheinend die Indizes durcheinander.

Folgendermaßen kann man ihn reproduzieren:

Script aufrufen, ein paar mal + drücken, um ein paar Felder zu produzieren. Dann die *erste* Zeile mit - löschen. Dann die *letzte* Zeile mit - löschen: Fehler.

Ausgabe im Extendscript Toolkit: Ungültiges Argument undefined

Folgende Zeile ist orange hervorgehoben:

Code
maingroup.remove( maingroup.children[ix] ); 


Kann jemand eventuell Licht ins Dunkel bringen?

Vielen Dank,
mdomino


als Antwort auf: [#540693]

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

Gerald Singelmann
  
Beiträge gesamt: 6219

23. Jun 2015, 10:53
Beitrag # 8 von 15
Beitrag ID: #540707
Bewertung:
(4749 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
"Kann jemand eventuell Licht ins Dunkel bringen? "

Ja, da habe ich Unsinn gedacht. Der Index ist statisch im Element gespeichert und das in einer Liste, die sich ändert. Das kann so nicht funktionieren.
Man müsste eine ID im Element ablegen und dann über die Kinder der Maingroup nach dieser ID suchen, oder so.

Muss ich noch mal in Ruhe drüber nachdenken, das schaffe ich aber nicht vor heute Abend.

Vielleicht hat ein anderer vorher Zeit?

...Moment...

Tauschen Sie die Zeile mal aus gegen:
Code
		maingroup.remove( this.parent ); 


Wenn das klappt, können wir uns den Indx sparen.


als Antwort auf: [#540702]

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

mdomino
Beiträge gesamt: 74

23. Jun 2015, 11:25
Beitrag # 9 von 15
Beitrag ID: #540710
Bewertung:
(4740 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo noch mal,
in einem ersten schnellen Test scheint das Problem behoben und ich schaffe es momentan nicht, irgendeinen Fehler zu produzieren. ;-)

Vielen Dank noch einmal für die Hilfe!

mdomino


als Antwort auf: [#540707]

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

Peter Kahrel
Beiträge gesamt: 182

23. Jun 2015, 12:56
Beitrag # 10 von 15
Beitrag ID: #540715
Bewertung:
(4693 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Peters Guide für Dummies hatte ich auch schon durchgewühlt und nichts in diese Richtung gefunden,


It's in the Resources section. There are a few links there (e.g. https://forums.adobe.com/message/2280793#2280793) that give samples of dynamically resizing windows.

Zitat vielleicht nimmt er es tatsächlich für die nächste Version auf.


Done. See http://www.kahrel.plus.com/indesign/scriptui.html

Peter


als Antwort auf: [#540701]
(Dieser Beitrag wurde von Gerald Singelmann am 23. Jun 2015, 23:59 geändert)

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

Gerald Singelmann
  
Beiträge gesamt: 6219

24. Jun 2015, 00:03
Beitrag # 11 von 15
Beitrag ID: #540722
Bewertung:
(4558 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@Peter,

I feel honoured :)

You included the version with the index-bug discovered above, though.

Best regards
g


als Antwort auf: [#540715]

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

Peter Kahrel
Beiträge gesamt: 182

24. Jun 2015, 02:57
Beitrag # 12 von 15
Beitrag ID: #540723
Bewertung:
(4495 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hello Gerald,

Sorry, I somehow missed that. Though I did notice the error and placed the .remove() function in a condition if(maingroup.children.length > 1) -- and forgot to tell you about it. But anyway, your fix is much more elegant and I've updated the guide.

best,

Peter


als Antwort auf: [#540722]

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

mdomino
Beiträge gesamt: 74

24. Jun 2015, 16:25
Beitrag # 13 von 15
Beitrag ID: #540747
Bewertung:
(4292 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat It's in the Resources section.


@Peter: True, I simply overlooked it while searching for this topic in your guide. Thanks for including Gerald's exampel now, I'm sure I'm not the only one who finds it useful. And thanks for the guide generally, without it I would be completely lost with all ScriptUI stuff. ;-)

Best,
mdomino


als Antwort auf: [#540715]

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

MarioF
Beiträge gesamt: 206

11. Okt 2019, 16:18
Beitrag # 14 von 15
Beitrag ID: #572207
Bewertung:
(540 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin,
ich würde gern eine Scrollbar in dem Panel haben.
Code
var maingroup = win.add ("panel",[0,0,300,200],""); 
var sbar = maingroup.add ("scrollbar", [0,0,20,170], 0, 0, 60);
sbar.alignChildren = ["left","top"];
add_row (maingroup);

will nicht so recht.
---
Viele Grüße
Mario


als Antwort auf: [#540693]

ScriptUI - Hinzufügen neuer Eingabefelder über Benutzeroberfläche

WernerPerplies
Beiträge gesamt: 2393

12. Okt 2019, 07:53
Beitrag # 15 von 15
Beitrag ID: #572224
Bewertung:
(511 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Mario,

hier solltest Du die notwendigen Informationen finden:
ScriptUI for Dummies
--> Scrolling panels and groups

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#572207]
X
Hier Klicken

Aktuell

Photoshop / Lightroom
Lightroom_-Detailkontrast_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
12.11.2019

Frankfurt
Dienstag, 12. Nov. 2019, 14.00 - 17.00 Uhr

Road Tour (Hamburg, Frankfurt, München)

Anlässlich der Switch World Tour 2019 in Deutschland möchten wir Sie als Impressed-Kunde am Vortag der Switch World Tour zu unserer kostenlosen Veranstaltung "Von der Manufaktur zur smarten Druckerei" einladen. Wir zeigen Ihnen an einem Nachmittag in lockerer Atmosphäre, wie Sie durch den Einsatz von moderner Software den händischen Aufwand in der Druckproduktion minimieren und Ihre Workflows durch Normierung und Standardisierung hochgradig automatisieren können. Die Tour findet in drei deutschen Städten statt und wartet mit einer spannenden Agenda auf. Am 25.09.2019 in Hamburg Am 12.11.2019 in Frankfurt Am 26.11.2019 in München Im Zuge der Veranstaltung werden folgende Softwares besprochen: Enfocus PitStop, Switch, PDF-Review Modul Impressed Workflow Server ColorLogic CoPrA, ZePrA Callas pdfToolbox Ultimate Impostrip

Diese Veranstaltung ist für alle Impressed-Kunden offen und somit für Sie KOSTENFREI.

Ja

Organisator: Impressed GmbH

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

https://www.impressed.de/produkte.php?c=detail&prnr=1414&link=ndet&nid=101197

Von der Manufaktur zur smarten Druckerei
Veranstaltungen
12.11.2019

Bookfactory, 8617 Mönchaltorf
Dienstag, 12. Nov. 2019, 17.00 - 19.00 Uhr

Workshop

Affinity Photo positioniert sich seit mehreren Jahren als preisgünstige Alternative zum Platzhirschen Adobe Photoshop. Was die beiden Programme voneinander unterscheidet, erfahren Sie in einem Workshop mit Peter Jäger, professioneller Trainer und Ausbildner im Bereich der Bildbearbeitung.

Bookfactory-Kunden profitieren von einer vergünstigten Teilnahmegebühr von nur 50 CHF.
Zur Anmeldung schicken Sie uns bitte eine E-Mail an service@bookfactory.ch

Ja

Organisator: Bookfactory und pre2media

Workshop: Affinity Photo vs. Adobe Photoshop
Hier Klicken