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

22. Jun 2015, 15:12
Beitrag # 1 von 15
Bewertung:
(6484 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: 2521

22. Jun 2015, 16:11
Beitrag # 2 von 15
Beitrag ID: #540691
Bewertung:
(6440 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: 6242

22. Jun 2015, 16:43
Beitrag # 3 von 15
Beitrag ID: #540692
Bewertung:
(6432 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: 6242

22. Jun 2015, 17:02
Beitrag # 4 von 15
Beitrag ID: #540693
Bewertung: |||
(6410 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: 12311

22. Jun 2015, 18:25
Beitrag # 5 von 15
Beitrag ID: #540694
Bewertung:
(6351 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: 76

22. Jun 2015, 23:35
Beitrag # 6 von 15
Beitrag ID: #540701
Bewertung:
(6258 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: 76

23. Jun 2015, 01:21
Beitrag # 7 von 15
Beitrag ID: #540702
Bewertung:
(6203 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: 6242

23. Jun 2015, 10:53
Beitrag # 8 von 15
Beitrag ID: #540707
Bewertung:
(6070 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: 76

23. Jun 2015, 11:25
Beitrag # 9 von 15
Beitrag ID: #540710
Bewertung:
(6061 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:
(6014 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: 6242

24. Jun 2015, 00:03
Beitrag # 11 von 15
Beitrag ID: #540722
Bewertung:
(5879 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:
(5816 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: 76

24. Jun 2015, 16:25
Beitrag # 13 von 15
Beitrag ID: #540747
Bewertung:
(5613 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: 281

11. Okt 2019, 16:18
Beitrag # 14 von 15
Beitrag ID: #572207
Bewertung:
(1861 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: 2521

12. Okt 2019, 07:53
Beitrag # 15 von 15
Beitrag ID: #572224
Bewertung:
(1832 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

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
04.09.2020 - 05.03.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 04. Sept. 2020, 13.00 Uhr - Freitag, 05. März 2021, 12.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte. Mit dem Abschluss «Publisher Professional – Profil «Multimedia» verliehen durch die Digicomp Academy AG, bestätigen Sie Ihre Praxiserfahrungen und Qualifizierung in den genannten Themengebieten gegenüber Ihrem Arbeitgeber sowie Ihren Kunden.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

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/publishing-lehrgaenge/lehrgang-publisher-professional-profil-multimedia

Veranstaltungen
02.10.2020 - 11.12.2020

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 02. Okt. 2020, 13.00 Uhr - Freitag, 11. Dez. 2020, 15.00 Uhr

Lehrgang

Steigen Sie in die Welt des Publishings ein und erlangen Sie die Zertifizierung von publishingNETWORK. Lernen Sie in diesem Lehrgang Druckmedien professionell zu erarbeiten, druckfertige PDFs zu erstellen und CI/CD-Vorgaben umzusetzen. Mit dem Abschluss «Publisher Basic» verliehen durch die Digicomp Academy AG, bestätigen Sie Ihre Praxiserfahrungen und Qualifizierung in den genannten Themengebieten gegenüber Ihrem Arbeitgeber sowie Ihren Kunden.

Preis: CHF 6'300.-
Dauer: 18 Tage (ca. 126 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt.

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/publishing-lehrgaenge/lehrgang-publisher-basic

Neuste Foreneinträge


JavaScript mit IF Else um Email Adresse auszwählen

Pfad aus Zwischenablage für neues Bild ( rahmen )

RTF Export Fußnoten (CC2020[15.1.1],WIN10)

Dropdown Farbmenu

Aufzählung mit hängendem Einzug in QX20?

Tabelle soll in interaktivem PDF editierbar sein - geht das?

Colormanagement bei Ausgabe von platzierten und profilierten cmyk-PDFs in 2020

InDesign-Settings (Adobe Cloud) von einem anderen Mac übernehmen

Ja ich finde Adobe Anwendungen spitze, aber ...

wie langen Text auf viele Seiten einfügen - erledigt
medienjobs