DMUG-Archiv 2005

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

RE: In laufende Scleife interaktiv eingreifen

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?
>>
>>
>>
>
>
>
>
> 




Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html