hi jens,
der gute mensch ist wohl eher an einer praktischen lösung als an der diskussion über seine programmtechnischen
fähigkeiten oder über die formale richtigkeit seiner frage interessiert.
wenn er sein problem selber lösen könnte würde er hier doch hoffentlich wohl nicht fragen.
antworten auf fragen der form kann mann in MMA .... mit ja nein oder vieleicht zu beantworten sind wohl nur formal
korrtekt, praktisch leider wertlos.
bei der grafischen programmierung scheinst du die formale antwort ja nicht wirklich gelten zu lassen.
folgend die definition einer mma funktion Key welche das geeignete windows API aufruft.
(microsoft dot net framwork muss installiert sein siehe mma help)
Needs["NETLink`"];
Key=DefineDLLFunction["GetAsyncKeyState","user32.dll","Short",{"Integer"}];
und hier probieren wir Key[] mal aus, der folgende code gibt "SPACE" aus solange die "SPACE" taste gedrückt gehalten
wird, abgebrochen wird das ganze bei drücken der "E" taste.
While[True,
If[BitAnd[Key[First@ToCharacterCode[" "]],2^15]≥2^15,Print["SPACE"]];
If[BitAnd[Key[First@ToCharacterCode["E"]],2^15]≥2^15,Break[]];
]
l.g. robert
-----Original Message-----
From: Jens-Peer Kuska [mailto:kuska@XXXXXXX.de]
Sent: Tuesday, May 24, 2005 11:43 AM
To: Nowak Robert; Wieser Johann; demug@XXXXXXX.ch
Subject: Re: In laufende Scleife interaktiv eingreifen
Hm,
also die Frage war, wir erinnern uns:
"Gibt es einen Befehl, der eine Tastaturabfrage
durchführt und das Programm
dann sofort in die gewünschte "Richtung" lenkt?"
welche welcher Befehl (in welcher Sprache) war
wohl gemeint ??
War es die Frage
"Gibt es in '.NET' eine Tastaturabfrage ...?"
wohl eher nicht. Natürlich kann man auch ein
MathLink-Programm schreiben
das alle Tastatureingaben an Mathematica schickt
und in der Mathematica
Schleife fragt man hin und wieder mal ob in dem
Link was steht, aber es war auch nicht die Frage
"Gibt es in C/C++ eine Tastaturabfrage ...?"
Die C/C++ Version hätte auch den Vorteil, auf den
meisten Unix-Kisten
zu funktionieren, die ein .NET ja nicht besitzen
und
zwar dynamische Bibliotheken kennen aber keine
DLLs --
schon gar keine kernel32.dll.
Aber machen wir uns nichts vor -- kann jemand der
ernsthaft:
"In erstelle ein kleines Programm, das mir durch
eine (unendliche) Schleife
eine Folge von Grafiken ausgibt."
programmiert ein .NET Programm aufrufen ?? oder
gar ein MathLink/C Programm
schreiben ?? Wohl eher nicht.
Das gleichzeitige berechnen der Schleife und das
Abfragen der
Tastatur erfordert nämlich eine parallele
Ausführung zweier Aufgaben und
das kann Mathematica eben nicht, die meisten
Betriebsysteme müssen
das können und deshalb leitest Du die Aufgabe auch
an selbiges weiter.
Gruß
Jens
----- Original Message -----
From: "Nowak Robert" <robert.nowak@XXXXXXX.at>
To: "Jens-Peer Kuska"
<kuska@XXXXXXX.de>; "Wieser Johann"
<aon.912862196@XXXXXXX.at>; <demug@XXXXXXX.ch>
Sent: Tuesday, May 24, 2005 9:59 AM
Subject: RE: In laufende Scleife interaktiv
eingreifen
> Hi Jens,
>
> muss dir leider schon wieder widersprechen.
> mit hilfe der .NET/Link 3.5.0 schnittstelle ist
> es möglich unter mma windows dll's zu rufen.
>
> im mma help wird das beispielhaft für die
> windows api funktion GetTickCount gezeigt.
>
> getTickCount = DefineDLLFunction["GetTickCount",
> "kernel32.dll", "int", {}]
>
> in windows gibt es auch eine api funktion zur
> abfrage des tastatutscancodes damit kann man
> abfragen ob z.b. überhaupt eine tastet gedrückt
> ist und wenn eine gedrückt ist dann welche, ohne
> das man ein zeichen von der tatstatur wirklich
> einlesen muss.
>
> wie diese windows api funktion jetzt genau heist
> muss man sich im windows api noch schlau machen.
> man braucht dafür jedenfalls keinerlei c
> programmierung oder ähnliches.
>
> l.g. robert
>
> -----Original Message-----
> From: Jens-Peer Kuska
> [mailto:kuska@XXXXXXX.de]
> Sent: Monday, May 23, 2005 10:09 PM
> To: Wieser Johann; demug@XXXXXXX.ch
> Subject: Re: In laufende Scleife interaktiv
> eingreifen
>
>
> Hallo,
>
> nein, weil entweder Mathematica ließt aus einer
> Datenquelle
> oder es wartet darauf, das es etwas lesen kann.
> Input[] wird in einer unendliche Schleife wohl
> etwas nervig
> sein oder wie ist
> i = 0;
> While[True,
> Print[i++];
> c = Input["continue ?"];
> If[c === no, Break[]]
> ]
>
> Gruß
>
> Jens
>
> ----- Original Message -----
> From: "Wieser Johann" <aon.912862196@XXXXXXX.at>
> To: <demug@XXXXXXX.ch>
> Sent: Monday, May 23, 2005 8:45 PM
> Subject: In laufende Scleife interaktiv
> eingreifen
>
>
>> Guten Tag!
>>
>> Mein Problem!
>> In erstelle ein kleines Programm, das mir durch
>> eine (unendliche) Schleife
>> eine Folge von Grafiken ausgibt. Ich möchte es
>> aber während der Ausgabe
>> steuern können, indem eine Tastaturabfrage
>> eingebaut werden soll, die, je
>> nach Tastenabfrage entsprechendes bewirken
>> soll.
>> (z.B auch Abbruch der
>> Schleife. Mit Alt+. ist das nur bedingt
>> möglich.
>> Manchmal wird zwar
>> ausgestiegen, bei der nächsten Ausführung
>> bleibt
>> dann das Programm hängen
>> oder andere Probleme treten auf).
>> Kurz gefragt:
>> Gibt es einen Befehl, der eine Tastaturabfrage
>> durchführt und das Programm
>> dann sofort in die gewünschte "Richtung" lenkt?
>>
>>
>>
>
>
>
>
>