[kein bug] Problem mit Designer-Objekten Checkbox und Exec-Button

Hallo,

ich habe kleine Probleme mit den Objekten Checkbox und Exec-Button im Designer.

1.) Checkbox

Offenbar werden die Events „OnClick“ und „OnChange“ in falscher Reihenfolge abgearbeitet.

Bespiel:

Ich will ein Script in Abhängigkeit vom gesetzten „Haken“ ausführen. Bei True soll das Script ausgeführt, bei False abgebrochen werden. Setze ich nun den Haken, wird Script aufgerufen, bricht aber bei der Prüfung False/True ab. Beim Löschen hingegen wird es ausgeführt. Ändere ich die Variable manuell auf False/True ist der Ablauf korrekt.

Ich vermute, das beim Setzen/Löschen des Hakens erst das Script aufgerufen wird, die Variable noch im alten Zustand vorfindet und deshalb falsch reagiert. Nach dem Script-Aufruf wird dann erst die Variable korrekt zum aktutellen Status gesetzt.

2.) Exec-Button

Ein unter „OnClick“ angegebenes Script wird nicht gefunden. Statt dessen wird ein Datei-fenster mit dem root-Verzeichnis von IPSymcon geöffnet.

Joachim

Hallo Joachim,

bei gleichzeitig eintretenden Ereignissen ist die Reihenfolge der Abarbeitung in Windows und damit auch in IPS vom Zufall abhängig. Dieses Verhalten ist normal und man muss ihm durch geeignete Planung begegnen.

IPS bietet oft mehrere Möglichkeiten auf Ereignisse zu reagieren. Im Allgemeinen wird man nur eine davon auswählen. Versucht man beide zu nutzen, dann kann es zu den von Dir beschriebenen Effekten kommen.

Für die CheckBox sind zwei Events definiert. Es gibt also auch zwei Lösungsansätze:

  1. OnChange
    Dieser Event schreibt den aktuellen Zustand der CheckBox in eine Boolean-Variable. Zur Weiterverarbeitung kann man diese Variable als Trigger-Variable für ein Skript verwenden.

  2. OnClick
    Der Klick auf die CheckBox bewirkt den Aufruf eines Skripts. Das Skript übernimmt nun das Setzen oder Löschen des Hakens. Diese Version hat den Vorteil, dass man noch zusätzliche Bedingungen in die Entscheidung mit einbeziehen kann. Sie ist also vielseitiger, als die OnChange-Variante.

Ich vermute, dass die Version 1 für Deine Zwecke gut geeignet ist. Dein Skript wird dann eben nicht vom Klick-Event sondern durch die Variable getriggert.

Zum Exec-Button:
Was hast Du vor?
Was willst Du erreichen?

Wenn ich das weiß, kann ich Dir wahrscheinlich weiterhelfen.

Gruß
HJH

Hallo,

OK, das mit der Checkbox werde ich dann anders lösen. Werde wohl die Variable durch das Script setzen lassen.

Mi dem Exec-Button will ich ein Script starten. ABer wie schon geschrieben, das Script wird offensichtlich nicht gefunden. Statt dessen wird nach cirka einer Sekunde ein Dateifenster mit dem IPSymon-Verzeichnis geöffnet

Joachim

Sollen wir raten oder zeigst du uns das script, damit wir es ausschließen können, dass es daran liegt?

Toni

Anbei das Script. Sollte eigentlich nicht daran liegen, da in dem Script keien Dateioperationen vorkommen und es manuell läuft.

Joachim

Mir gefällt dein Stil… Schön formatiert :wink:

Okay… das Script schaut auf den ersten Blick okay aus. Manuell geht, sagst du. Hast du mal versucht den Event zu löschen und stattdessen eine kopie des Scriptes unter anderem Namen aufzurufen? Vielleicht ist bei der Zuweisung Murks passiert…

Toni

Habe versucht ein anders Script auzurufen, gleiches Verhalten. Habe auch den Exec-Button gelöscht und neu angelegt, gleiches Verhalten. Mit der Checkbox startet das Script einwandfrei.

Joachim

Hallo Joachim,

woran erkennst Du, dass das Skript „nicht gefunden“ wird?
Ich glaube schon, dass es gefunden wird. Der echo-Befehl funktioniert nur, wenn Du das Skript manuell startest.
Nur weil keine echo-Ausgabe stattfindet, bedeutet das nicht, dass das Skript nicht gefunden wurde. Außerdem kannst du das im Log nachprüfen.

Fangen wir mal von vorne an.
Um ein Skript durch einen Button zu starten ist der ExecButton nicht das optimale Tool.
Er ist dazu gedacht externe Programme zu starten.
Es ist zwar möglich auch Skripte zu starten, aber es ist auch nötig die Felder im Object Inspector korrekt zu belegen.
Wenn bei ExecType=etCustom eingetragen ist, erwartet IPS im Feld Executeable den Namen des auszuführenden Programms. Bleibt dieses Feld leer, dann wird ein Explorer-Fenster geöffnet.

Eine wesentlich einfachere Methode bietet der Standard Button. Ich kann nicht erkennen, warum Du stattdessen den ExecButton verwendest.

Nimm einfach einen Standard Button und du bist die Probleme los.

Gruß
HJH

Anfängerfehler…
Mit dem Standard-Button funktioniert es wirklich perfekt.

Joachim