Matthias Zenker <zenker@XXXXXXX.de> wrote:
> ...
>
> * eine maske, um text und/oder zahlen eingeben zu koennen.
Tja, leider scheint es (ausser dem unhandlichen Input["comment"]) keine
einfache benutzer- und programmiererfreundliche Eingabemaske zu geben.
Na ja, vielleicht irgendwann in den naechsten 10 Jahren ... (-:).
Derweil kann man sich mit einem kleinen Trick zumindestens etwas behelfen:
Angenommen ein Benutzer soll Werte in eine Funktion f[x,y,z] eingeben und
die Funktion soll dann per Knopfdruck ausgefuehrt werden.
Z.B.:
f[x_,y_,z_]:=(test=x+y+z)
Eine (zugegebenermassen etwas umstaendliche) Moeglichkeit ist sich eine
Hilfsfunktion "ein[commentar, wert]" zu definieren, mit:
Clear[ein];
ein[_,b_]:=b;
ein/:MakeBoxes[ein[any_,b_],fmt_]:=
TagBox[RowBox[{"\t\t",
StyleBox[
RowBox[{TagBox[MakeBoxes[any,fmt],Editable\[Rule]False,
Selectable->False,DeletionWarning->True],
StyleBox["=",Editable->False,Selectable->False,
Deletable->False]}],FontColor\[Rule]RGBColor[0,0.6,0],
Editable->False,Deletable->False],
TagBox[MakeBoxes[b,fmt],Editable->True],"\n"}],
InterpretTemplate[ein[#,#2]&]]
(* *************************************************
Bitte obiges ausfuehren und dann folgende Zelle evaluieren:
Nach Eingabe der Werte in die Platzhalter wird bei Klicken
des OK Knopfs die Funktion f ausgefuehrt und test bekommt
einen Wert zugewiesen.
************************************************** *)
nb=NotebookPut[
Notebook[{
Cell[TextData[
"Bitte Werte in die \[Placeholder] Felder eingeben,
dann auf OK clicken."],"Text"],
Cell[BoxData[
"f[ein[x, \[Placeholder]], ein[y, \[Placeholder]],
ein[z, \[Placeholder]]]"],"Input"],
Cell[BoxData[
ButtonBox[StyleBox["OK","Title"],
ButtonFunction
\[RuleDelayed](SelectionMove[ButtonNotebook[],After,Notebook];
NotebookWrite[ButtonNotebook[],
Cell["NotebookClose[InputNotebook[]]","Input",
CellOpen\[Rule]False]];
SelectionMove[ButtonNotebook[],All,Notebook];
SelectionEvaluate[ButtonNotebook[]]),
ButtonEvaluator\[Rule]"Local"]],NotebookDefault,
Editable\[Rule]False,Active\[Rule]True,
TextAlignment\[Rule]Center]}]];
NotebookFind[nb,"Input",All,CellStyle]
mist=FrontEndExecute[{FrontEndToken[nb,"SelectionConvert","StandardForm"]}];
(* ************* *)
Natuerlich ist das nur ein simples Beispiel und nicht das Ei des Kolumbus ...
--
Rolf Mertig
Mertig Research & Consulting, Amsterdam, Holland
Mathematica training and programming
Development and distribution of FeynCalc
http://www.mertig.com
|