VEEforum.de deutschsprachiges Forum für VEE Entwickler
Stoppen des Programmes mit Mausbewegung - Druckversion

+- VEEforum.de deutschsprachiges Forum für VEE Entwickler (http://www.veeforum.de)
+-- Forum: VEE (/forumdisplay.php?fid=5)
+--- Forum: Formeln, Funktionen (/forumdisplay.php?fid=15)
+--- Thema: Stoppen des Programmes mit Mausbewegung (/showthread.php?tid=55)


Stoppen des Programmes mit Mausbewegung - maxheadroom - 26.01.2009 17:45

Hallo Leute,

mir ist seit längerem schon was aufgefallen, das mir sorgen macht.
und zwar ist es das bedienen von z.b slidern im panel.
wenn ich mit der maus draufbleibe um mit den slider einen wert einzustellen, oder gewisse panels herumschieben möchte unterbricht
das programm und macht erst wieder weiter wenn ich mit dem herumbewegen aufgehört habe.
das ist ärgerlich wenn man z.b eine funktion hat die alle 50ms was rausschicken muss damit die externe HW funktioniert.
gibts dazu lösungen? muss zugeben das ich noch VEE 7.5 benutze :oops:


- detlef - 27.01.2009 21:05

Wenn die Maus "gedrueckt gehalten " wird, stoppt Vee den Programablauf.
Ist nun mal so...
Ab Vee9 ist Vee Multitasking und Multithreading faehig.
Da sollte man unabhaengig von dem MAusstop sein...muss ich mal checken...


RE: Stoppen des Programmes mit Mausbewegung - Tommi - 04.01.2011 15:22

Hallo Detlef,

wir war das Ergebnis dieses Tests? Ist die Ausführung von VEE- Programmteilen ab Version 9.x unabhängig von gedrückten Buttons und geöffneten ListBoxen, etc.?

Gruß,
Tommi.


RE: Stoppen des Programmes mit Mausbewegung - detlef - 11.01.2011 16:57

Es ist leider noch immer so, dass der Programmflow stehen bleibt, wenn man die linke Maus gedrueckt haelt.

Man sollte also die Buttons und Listboxen so anordnen, dass man nicht dauernd mit der Maus UND gedrueckter linker Taste draufhaelt.

Dies ist in der Developer Umgebung so, weil man mit der gedrueckten linken Maus das Panel bewegt. Vielleicht sollte man dies in einer anderen Version mal aendern. Allerdings hatte ich bisher nie Probleme damit, weil ich nie die linke Maus dauernd gedrueckt halte....in Vee Programmen zumindest- da klickt man nur....


RE: Stoppen des Programmes mit Mausbewegung - maxheadroom - 31.01.2011 20:49

Ich habe das Problem auch noch immer. Finde es zum Teil sehr störend.
In meinem Programmen werden z.B Daten angezeigt bzw. die Ergebnisse einer Sequencer-Dauerlaufes. Angezeigt werden sie mittels "logging alphanumeric".
Wenn genügend Daten bzw. Zeilen angezeigt wurden, erscheint rechts eine "Scrollbar" mit der man die älteren nicht mehr sichtbaren Daten auch anschauen kann.
Und da kommt man nicht vorbei die linke Maustaste gedrückt zu halten :-)
Wärend dieser Zeit stoppt mein Programm und kann unter Umständen Fehler verursachen, da ich gewisse Teile im Intervall durchführen muss. Was ich schon aufgegeben habe ist z.B wirklich Zeitkritische Sachen mit VEE zu realisieren. Z.b über einen CAN-Bus einen Controller anzusteuern. Dieser Benötigt alle 50ms eine Nachricht, sonst schaltet sich der Controller ab.
Im Prinzip kein Problem und aufs Erste realisierbar. Aber sobald man z.B mehrere Buttons etc. einbaut kann es leicht vorkommen das die 50ms überschritten.
Bei einem Dauerlauf können die 50ms z.B über einen GPIB Lesebefehl überschritten werden.
Denn auch da stoppt anscheinend das Programm.


RE: Stoppen des Programmes mit Mausbewegung - detlef - 31.01.2011 21:11

In so einem Fall von zeitkritischen Anwendungen wuerde ich die Auswertung / Anzeige auf jeden Fall von der Einlesefunktion trennen.
Entweder 2 Vee Programme, oder , wenn Vee9.21, 2 Threads und den Scrollbalken weglassen (In den Prefs). Ansonsten stoppt das Mausdruecken auch beide Threads - kann man in dem Threadbeispiel leicht ausprobieren....
Da sind 2 Vee Programme dann wohl sinniger, wenn man unbedingt scrollen will....

Oder aber man benutzt das Scrollen mit Dotnet- da muesste ich mal checken, ob Vee auch dort §freezed§.


RE: Stoppen des Programmes mit Mausbewegung - Tommi - 31.01.2011 21:20

Ich habe das Problem in einigen meiner Anwendungen dadurch gelöst, dass ich einfach mehrere VEE-Programme parallel ablaufen lasse. Ich habe dann ein Hauptprogramm erstellt, in dem sich alle Bedienelemente befinden. Zeitkritische Funktionen habe ich in eine oder mehrere VEE-Programme ausgelagert, die parallel zum "Hauptprogramm" in Windows gestartet werden. DIe Programme kommunizieren dann via IPC miteinander, also via Socket-Communication. Das ist relativ einfach und arbeitet absolut zuverlässig. Wichtig ist dabei natürlich, dass in die zeitkritischen Funktionen keine Bedienelemente eingebaut sind bzw. dass diese nicht benutzt werden.


RE: Stoppen des Programmes mit Mausbewegung - detlef - 31.01.2011 21:25

Genau. Perfekt !

Stell doch mal ein Beispiel hier rein .


RE: Stoppen des Programmes mit Mausbewegung - maxheadroom - 31.01.2011 21:26

Dotnet würde denke ich klappen.
Das "logging alphanumeric" habe ich in eine Funktion gepackt. Das Fenster selber ist dann im Panel ersichtlich. Wenn ich dann was ausgeben will kann ich das dann über diese Funktion machen: logWindow("Hello World");
Gefährlich finde ich auch wenn man im Programm mehrere Panels laufen lässt.
Will man nämlich die Panels verschieben, natürlich durch festhalten der linken Maustaste, wird das Programm auch gestoppt. Man kann aber bei solchen Panels das bewegen "deaktivieren"
Mit ShowPanel("logwindow"); kann z.B das Panel sichtbar gemacht werden und unter den Einstellungen das Bewegen deaktivieren.

Wie sollte das genau funktionieren mit den beiden Programmen?
Wie tauschen die beiden Werte oder Variablen aus?


RE: Stoppen des Programmes mit Mausbewegung - Tommi - 31.01.2011 21:34

(31.01.2011 21:25)detlef schrieb:  Genau. Perfekt !

Stell doch mal ein Beispiel hier rein .

Ja, mach ich in Kürze!


RE: Stoppen des Programmes mit Mausbewegung - maxheadroom - 31.01.2011 21:41

Hallo Tommi,

habe deinen Thread wärend ich meine Nachricht geschrieben habe nicht lesen können.
Also die Kommunikation zwischen den Programmen läuft über IPC.
Startest du die einzelnen Programme auch über das Hauptprogramm?
Ein Beispiel würde mich brennend Interessieren :-)

Gruß
Max


RE: Stoppen des Programmes mit Mausbewegung - Tommi - 31.01.2011 21:41

(31.01.2011 21:26)maxheadroom schrieb:  .... Wie sollte das genau funktionieren mit den beiden Programmen?
Wie tauschen die beiden Werte oder Variablen aus?

Der Austausch von Variablen, arrays, Messwerten oder auch Kommandos funktioniert eben über socket Kommunikation.
Hallo Max,

das Starten der "Slave"-Programme vom Hauptprogramm aus habe ich auch schon mal gemacht, ist aber schon eine Weile her. In den aktuellen Anwendungen starten die Anwender die Programme einfach nacheinander, die wissen, was sie tun müssen, weil die Programme, die zusammen gehören, in einem Unterverzeichnis gespeichert sind.

Ein Beispiel kommt in Kürze.


RE: Stoppen des Programmes mit Mausbewegung - maxheadroom - 21.02.2011 20:35

Hallo Tommi,

ich habe mir das ein wenig angeschaut und habe noch keinen Durchblick.
Freu mich schon auf dein Beispiel.

Gruß
Max


RE: Stoppen des Programmes mit Mausbewegung - detlef - 22.02.2011 15:38

Hier mal nur ein moegliches Beispiel:
Vee ruft ein anderes VEE Programm auf ( hier lib.vee), setzt da eine Eingabe rein und erhaelt eine Antwort.
Und hier mal einiges zu Socket und fernsteuern...


RE: Stoppen des Programmes mit Mausbewegung - loki - 25.02.2011 12:33

Hallo detlef,
täusche ich mich, oder ist dein Beispiel zum Fernsteuern ein Beispiel für Access??
Oder hab ich was übersehenHuh
gruß
loki


RE: Stoppen des Programmes mit Mausbewegung - detlef - 25.02.2011 14:52

Bekommst du nicht diese enpackten Dateien?
Anleitung.txt, fensteuern.vee, command_line_kb.vee, keyboardBlock.vee ...bis ... TelnetExample3.vee ???

Das Beispiel Fernsteuern ist von Bratbaecker und ist aus seiner Seite beschrieben myvee.de


RE: Stoppen des Programmes mit Mausbewegung - loki - 25.02.2011 15:05

Nein Confused
leider nicht. Ich bekomme Access97DataClient.vee, eine html-Datei und einige Bilder für die html-Datei.
Meist du die Seite my-vee.de? Da hab ich unter Downloads schon danach gesucht, aber nichts gefunden.Sad


RE: Stoppen des Programmes mit Mausbewegung - detlef - 26.02.2011 08:56

Ich hab jetzt mal an 2 anderen PCs die Datei runtergeladen. Da ist alles i.O..
Da stimmt was in deinem ZIP Cache nicht.
Lad einfach nur mal die ZIP Datei runter, benenne sie um, und dann duerfte es wieder i.O. sein.
Oder loesch mal deinen ZIP Cache.
Das mit Access kommt von einem anderen Thread....


RE: Stoppen des Programmes mit Mausbewegung - loki - 28.02.2011 09:32

Angel
Ok vielen Dank jetzt hat es funktioniert!
gruß
loki


RE: Stoppen des Programmes mit Mausbewegung - detlef - 15.03.2012 11:44

So, mal was Neues zum Thema "Mausdruecken stoppt VEE Programm".
Unter Vee 9.3 trifft dies nur noch auf das Main Panel zu, Ablaeufe in einem Thread- Object werden nicht unterbrochen.
Man kann also seine "unterbrechungsfreien" Ablaeufe in einen Thread auslagern.
Ich hab hier mal ein Beispiel zum Ausprobieren, einfach die Fenster in den Vordergrund holen, damit man noch sieht, was laueft.
Ist die Abfrage der seriellen Schnittstelle, einmal im Main, einmal in Thread 1 und einmal in Thread 2.
Wenn man die Maus gedrueckt haelt, bleibt nur die Abfrage in Main stehen....
HeartHeartHeartHeartHeartHeartHeartHeartHeartHeart
Interessant ist das Unterschiedliche Verhalten, wenn man die Startbuttons drueckt- Entweder global oben im Menue ( laeuft dann so, als wenn man als vxe laufen laesst), start im Main menue und start in dern Threads.
Mal probieren ....
An den countern erkennt man, wo was laeuft und wie schnell...


RE: Stoppen des Programmes mit Mausbewegung - maxheadroom - 21.03.2012 22:03

Hallo Detlef,

danke für den tollen Tipp!
Habe dies ebenfalls probiert und komme auf das selbe Ergebnis.
Wenn sich die Abfrage jedoch ein einer UserFunction befindet, bleibt diese nach wie vor stehen.
In einem ThreadObject läuft sie weiter.
Die meisten Panels laufen bei mir in einer UserFunction.
Mit UserFunctions kann ich einfach Werte übergeben und diese Anzeigen kann.
Gerade wenn man einen Sequencer benutzt finde es einfacher und übersichtlicher.
Auch die Funktionen Show/Hide Panel sind ein Vorteil von UserFunctions

Gruß Max


RE: Stoppen des Programmes mit Mausbewegung - detlef - 24.03.2012 12:41

Ich hab noch nicht probiert, wie es mit UF in Threads ist, und mit den UserPanels, aber im Prinzip ist es kein Problem, in den Threads Daten kontinuierlich auszulesen, um dann in eine globale Variable zu setzen.
Diese globale Variable wird dann in deinen UF mit Userpanels eingelesen, und da kannst du das alles anzeigen. Wie bisher.
Bei Mausklick wird dann wohl dein Userpanel nicht refresht ( wenns denn nicht doch anders gehen sollte) , es gehen aber keine Daten verloren.

Ich muss mal weiter checken mit den PANELS...