[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:
(6380 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: 2512

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

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

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

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

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

24. Jun 2015, 00:03
Beitrag # 11 von 15
Beitrag ID: #540722
Bewertung:
(5775 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:
(5712 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:
(5509 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: 271

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

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

Digicomp Academy AG, Zürich oder virtuell
Freitag, 14. Aug. 2020, 13.00 Uhr - Freitag, 18. Sept. 2020, 15.00 Uhr

Lehrgang

Im berufsbegleitenden Web Publisher Lehrgang vertiefen Sie Ihr Wissen rund um das Thema Screendesign und die Umsetzung von Websites. Wir befähigen Sie dazu selbständig und professionell Ihren Webauftritt zu planen und in die Realität umzusetzen. Erlangen Sie das Digicomp-Zertifikat zum Web Publisher. Mit dem Zertifikat bestätigen Sie Ihre Praxiserfahrungen und Qualifizierung in den genannten Themengebieten gegenüber Ihrem Arbeitgeber sowie Ihren Kunden.

Preis: CHF 3'250.-
Dauer: 8.5 Tage (ca. 56 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/zertifizierung/software-anwendungs-zertifikate/publishing-zertifizierung/lehrgang-web-publisher

Veranstaltungen
19.08.2020 - 20.08.2020

Digicomp Academy AG, Zürich oder virtuell
Mittwoch, 19. Aug. 2020, 08.30 Uhr - Donnerstag, 20. Aug. 2020, 17.00 Uhr

Kurs

Mit After Effects können Sie visuelle Effekte und Animationen für Video, Web, DVD und Blu-Ray erzeugen. In diesem Kurs lernen Sie die Grundlagen kennen und sehen inspirierende Anwendungsbeispiele, die Ihnen helfen, Ihre eigenen Ideen umzusetzen.

Preis: CHF 1'700.-
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/video-und-audio-publishing/adobe-after-effects-cc/kurs-adobe-after-effects-basic

Neuste Foreneinträge


Mehrere Nummerierte Listen in einem Dokument

Element im InDesign-Dokument markieren bzw. taggen

Konturen unter 2mm finden

Professionell mit dem Smartphone fotografieren

Onlinetreffen der IDUG Stuttgart

Form des Kontrollkästchens (Checkbox) ändern

Geometrisch konstruierte Schriften

per TextFrame.content nur 1 Zeile erhalten

InDesign 15.1.1 und "PDF-Kommentare"

Schriftproblem Druck obschon Schrift eingebette
medienjobs