Connect failed: Connection timed out

[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 16
Bewertung:
(9240 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: 2760

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


als Antwort auf: [#540690]

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

Gerald Singelmann
  
Beiträge gesamt: 6269

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

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

22. Jun 2015, 18:25
Beitrag # 5 von 16
Beitrag ID: #540694
Bewertung:
(9107 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. ;-)


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 16
Beitrag ID: #540701
Bewertung:
(9014 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 16
Beitrag ID: #540702
Bewertung:
(8959 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: 6269

23. Jun 2015, 10:53
Beitrag # 8 von 16
Beitrag ID: #540707
Bewertung:
(8826 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 16
Beitrag ID: #540710
Bewertung:
(8817 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 16
Beitrag ID: #540715
Bewertung:
(8770 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: 6269

24. Jun 2015, 00:03
Beitrag # 11 von 16
Beitrag ID: #540722
Bewertung:
(8635 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 16
Beitrag ID: #540723
Bewertung:
(8572 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 16
Beitrag ID: #540747
Bewertung:
(8369 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: 390

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


als Antwort auf: [#540693]

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

WernerPerplies
Beiträge gesamt: 2760

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

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


als Antwort auf: [#572207]
X