Probleme mit PageControl und Exec-Button/-Image

Hallo,

ich bin neu hier im Forum und habe zwei Probleme mit dem Designer.

„Vorgeschichte“ :
Ich habe im Designer eine Oberfläche erstellt mit PageControl Elementen, die bis zu
3 Ebenen übereinander liegen (siehe Bild im Anhang).
Nun möchte ich mittels ExecButton oder ExecImage auf die verschiedenen Tabs wechseln.
Innerhalb einer Ebene funktioniert dies sehr gut.

Problem 1:

Ich möchte aber auf Ebene 1 (z.B. Start) direkt auf Ebene 3 (z.B. EG Übersicht) gelangen.
Dies wird aber von ExecButton / Image nicht umgesetzt.
Gibt es einen Trick, wie ich dem ExecButton / Image dies beibringen kann oder kennt jemand eine andere Möglichkeit, dies umzusetzen ?

Problem 2:

Gibt es eine Möglichkeit, aus IP-Symcon heraus dem Disigner zu triggern, ein bestimmtes Tab in den Vordergrund zu bringen. Anwendung wäre, bei einem wichtigem Ereignis im EG den EG Tab in den Vordergrund zu setzen.

IPS_Designer_50.jpg

Hallo Chris,

ich kann Deine beiden Probleme nicht nachvollziehen.

Du kannst beliebig viele PageControls anlegen, in denen wiederum beliebig viele TabSheets untergebracht werden können.

Wenn Du die für den Wechsel vorgesehen PageControl-eigenen Buttons nicht verwenden willst, kannst Du auch ExecButtons oder ExecImages dafür einsetzen.

Dabei musst Du die Parameter so setzen:
ExecType: etSetTab
Executeable: Name des PageControls, in dem das gewünschte TabSheet liegt
Parameters: Nummer des TabSheets (Zählung beginnt bei 0)

Die Properties Executeable und Parameters sind auch über Variablen aus IP-Symcon heraus zu setzen. Damit kannst Du also Deine PageControls in beliebiger Weise fernsteuern.

All diese Hinweise sind auch in der Dokumentation zu finden unter PageControl und TabSheet und natürlich unter ExecButton und ExecImage.

Gruß
HJH

Hallo HJH,

danke für deine prompte Antwort.

Vielleicht habe ich mich etwas undeutlich ausgedrückt.
Ich versuche es noch mal genauer:

Grundfläche ist ein PageControl mit Namen Ebene1, mit den TabSheets: Start, Wetter, Haus, Telefon, Media, …
Auf dem TabSheet Haus befindet sich PageControl mit Namen Ebene2, mit den TabSheets: Übersicht, EG, OG.
Auf dem TabSheet EG befindet sich wiederum eine PageControl mit Namen Ebene3, mit den TabSheets: EG Übersicht, Schlafzimmer, …

Ich möchte auf den TabScheet „Start“ mit einem Exec-Button/-Image auf EG Übersicht springen.
Die Parameter des Exec-Button/-Image wären nach der Logik:
ExecType: etSetTab
Executeable: Ebene3
Parameters: 1

Dies geht aber nicht.
Auf einer Ebene funktioniert es.

(P.S.: Ebenen und Bezeichnungen sind wie im Anhang meines vorhergehenden Beitrags.)

Sinn der Übung ist, dass ich eine Meldung auf der Startseite habe, die das Wohnzimmer (befindet sich in Ebene3) betrifft und ich kann mit einem Klick dorthin gelangen.

Hallo Chris,

Du hast offensichtlich mehrere PageControls ineinander geschachtelt. Das ist natürlich nicht im Sinne des Erfinders.
Aber prinzipiell spricht nichts dagegen.

Mit dieser Methode hast Du Dir praktisch selbst ein Bein gestellt. Da wird Dir wohl nichts anderes übrig bleiben, als die dadurch geschaffene Hierarchie schrittweise zu durchlaufen. Per Skript musst Du feststellen, wo Du gerade bist und musst dann in dasjenige TabSheet springen, welches das Ziel-PageControl enthält. Von dort kannst Du dann zur endgültigen Seite weitergehen.

Es wird wahrscheinlich darauf hinauslaufen, dass mehrere Schritte nacheinander zu gehen sind.

Probier es aus. Ich kann aber nicht garantieren, dass es funktioniert.

Gruß
HJH

Hallo HJH,

damit kommen wir zu meinem Problem 2:
gibt es eine Möglichkeit vom IPS per PHP-Script ein TabSheet aufzurufen ?
(Sheet aktiv in den Vordergrund zu bringen)

Wenn JA mit welchem Befehl, Variable, … ist dies umsetzbar.

Ich glaube den passenden Link hat HJH dir bereits geschickt… Schau dir hier mal den TabIndex an.

Gruß,

Toni

@hjh , @toni
ich glaube, dass ist nicht sein Problem

m.E. geht es im „Problem 2“ nicht darum PER DESIGNER z.B. per Image oder Button umzuschalten, sondern aus einem PHP-Script auf dem IPS-Server heraus bestimmte Tabsheets in den Foreground zu schalten. Also wenn irgend ein Alarmscript was triggert o.ä.

Geht das überhaupt? Wenn ich an die Idle-Funktion usw. in den ToniTools denke, sollte es eigentlich gehen. Aber wie soll das bei einem auf Remote-PC betriebenen Designer wirken? Per Variable-Exchange dorthin auf einen „dummy-IPS-Server“ auf dem Designer-PC propagieren?

Aber spätestens der Rückkanal (z.B. Tonis Idle-Erkennung) dürfte dann fehlschlagen, denn es kann ja nur der Idle-Zustand des Servers ermittelt werden, auf dem das Script mit dem Befehl läuft. Oder geht das doch?

Würd mich selbst auch brennend interessieren, weil ich mehrere Designer-PCs im Einsatz habe, jedoch den Server natürlich aus Lärm- und Platzgründen „weit weg“ stehen habe.

…und natürlich habe ich auch mehrere Tabsheet-Ebenen. Die reale Informationsmenge eines Eigenheimes ist einfach zu komplex, um sie linear zu halten. Wenn das Schachteln von Tabsheets „nicht im Sinne des Erfinders“ ist, fehlt hier was wichtiges, um Informationen strukturiert abrufen zu können. Der Sinn der Erfindung ist doch wohl genau das: Zugriff auf eben solche Infos zu bieten. Funzt ja auch prima. Manuell.

@balihannes:
einziges Workaround zum Tabsheet-Umschaltproblem, das mir sinnvoll erscheint (aber viel Umbauarbeit bedeutet): statt Tabsheets verschiedene Designer-Forms nehmen, dazwischen umschalten. Aber da verliert man natürlich extrem Bedienkomfort im Designer selbst beim manuellen Bedienen, weil sicher nicht innerhalb eines Forms ein anderes nachladbar wäre. Irgendwo beißt sich da die Katze in den Schwanz.

Gruß Gerd

Hallo Gerd,

ich habe jetzt eine Lösung gefunden die wahrscheinlich HJH und Toni meinten.

Ich weise jeder Tab-Ebene eine Tab-Index Variable zu.
z.B. habe ich der Ebene 1 dem TabIndex die Variable Ebene1 (integer) zugewiesen,
gleichzeitig den Event OnCange ebenfalls die Variable Ebene1 zugewiesen!

Dieses Verfahren habe ich für Ebene 2 und Ebene 3 mit den entsprechenden Variablen Ebene2 und Ebene3 durchgeführt.

Nun habe ich auf den diversen Tabs Images erstellt, um mit dem OnClick Event ein Script namens TabSheet_Steuern auszuführen.
Dem Image habe ich noch unter IPSYMID den Namen des Tab, den ich anzeigen möchte, gegeben (z.B. Hof, Wohnzimmer, Kueche,…).

Im erstellten Script (TabSheet_Steuern) prüfe ich über die SWITCH Auswahl die Variable $IPS_COMPONENT (Inhalt ist die IPSYMID des aufrufenden Images).

Dort setze ich beispielsweise (wenn der Aufruf für Hof kommt) die Variabeln :

switch ($IPS_COMPONENT)
{
case „Hof“ : setvalueInteger(„Ebene1“,1); // Ebene 1 wird der 2. Tab angezeigt
setvalueInteger(„Ebene2“,4); // Ebene 2 wird der 5. Tab angezeigt
setvalueInteger(„Ebene3“,2); // Ebene 3 wird der 3. Tab
break;
case „Kueche“ : setvalueInteger(„Ebene1“,2); // Ebene 1 wird der 3. Tab angezeigt
setvalueInteger(„Ebene2“,0); // Ebene 2 wird der 1. Tab angezeigt
setvalueInteger(„Ebene3“,3); // Ebene 3 wird der 4. Tab
break;

usw.
}

Ich hoffe, diese Beschreibung ist verständlicher als meine Problembeschreibung.

Hinweis: Die Tabs wechseln nur, wenn sich der Inhalt der entsprechenden Variable ändert.

Ich denke, ich hab ihn schon verstanden :wink:

Für die ToniTools wird es einen LAN-Client geben der genau dafür ist. Da arbeite ich schon dran…

Toni

Hallo,

ich habe dies in allem möglichen Varianten schon ausprobiert. Ein Tabsheet kann man per Skript kontrollieren. Man muss eben nur das Tabsheet mit einer Integer Variable verknüpfen. Nur, wenn das ganze komplex wird, wird es auch unübersichtlich werden, zumals wenn dann noch Verschachtelungen vorkommen, TabSheet im Tabsheet. Die Steigerung wäre dann noch die unabhängige Steuerung von verschiedenen Remote Designern aus. Das wird so NICHT gehen, denn wenn das gleiche Projekt auf allen Terminals läuft, und man auf einem rumklickt, werden alle anderen mitwechseln. Muss zwar nicht weiter störend sein, und man kann im WOhnzimmer schön sehen, wenn jemand im Bad damit rumspielt.
Lösung wäre hier mehere Projekte mit verschiedenen Tabsheet Variablen. Doch dann fängt es an, chaotisch zu werden. Ich habe es irgendwann aufgegeben zugunsten eines grossen Tabsheets mit mehr als 60 Sheets. Ich habe dann alle Reiter auf 1x1 gesetzt, sie versteckt und nun springe ich mit Buttns hin und her. Das klappt prima und bleibt übersichtlich.

Doch, linear klappt schon, du musst eben halt dein Tabsheet auf mehr als 100 Sheets hochschrauben. Ich habe auch 12 Räume verteilt auf 3 Etagen, und glaub mir, es geht. Du musst dir einfach vorher einen Plan machen, z.b. Tab 0-50 gleich Raum x-z…etc… (nicht vergessen, ein paar leere Sheets zu lassen, wenn mal nachgebaut werden muss)

mfG Franz

Das glaub ich dir gerne, aber ich MÖCHTE gerne strukturiert navigieren. Gerade um größere Objekte (mit denen ich mich nicht permanent wie mit meinem eigenen Haus beschäftige) handhaben und auch künftig pflegen zu können.

Und die Detail-Navigation (zweite Ebene) des (äußerste Ebene) Erdgeschoß oder Obergeschosses enthält ganz andere Unterstrukturen wie Heizungen, Jalousien usw, als z.B. der Configbereich mit Datenbank-, Timer- oder sonstigen Parametern, die dann evtl. nochmal Unterbereiche mit Tabsheets haben um allein diese Info-Flut übersichtlich auf dem Screen darzustellen und managen zu können.

Das alles hat wiederum mit dem Strukturen von Außenbereichen, Wetter- oder Externdaten gar nix zu tun. Deren spezifische Unterstrukturen gehören auch nur in die relative Welt der jeweiligen Hauptbereiche.

Stichworte: Alarmierungen, CAMs, Logs, Debugeinstellungen und -Output, Userberechtigungen usw

Das alles linear parallel? Brrrr… Das widerspricht jedem objektorientierten Gedanken und macht allein schon jeden Ansatz bzgl Berechtigungen a priori zunichte.

„Relative Koordinatensysteme“ in aufeinander aufbauenden hierarchischen Objekten machen es dagegen kinderleicht. Einfach das Eltern-Objekt disablen, und alle Childs sind automatisch aus dem Weg. Ohne Hintertür.

Info-theoretisch ist es eine klassische Baum-Navigation, die ebenso struktureirte relative, quasi auf „Objekt“-Ebene gekapselte Unterbereiche anspricht.

Die Probleme, die dagegen eine lineare Struktur allein bei künftiger Softwarewartung macht, hast du ja schon selber angesprochen. (Man stelle sich vor, es soll eine Ebene zwischengeschoben werden / Unternehmen strukturiert um oder so: Neue Schicht einfügen, Zweig schieben per Drag and Drop, mehr darf das nicht sein!)

Das mit den „Baumkoordinaten“, also z.B. 2-3-1 oder so anzuspringen, ist doch das einzige was fehlt. Und offenbar hat balihannes das ja hinbekommen. Wenn ich Zeit habe, werd ichs auch mal so versuchen :wink: