ListIconGadget aktives Element/Eintrag (SetGadgetState)

Anfängerfragen zum Programmieren mit PureBasic.
Freizeitcoder
Beiträge: 35
Registriert: 24.09.2009 13:31
Wohnort: München

ListIconGadget aktives Element/Eintrag (SetGadgetState)

Beitrag von Freizeitcoder »

Hallo zusammen,

so siehts aus:
In meinem ListIconGadget kann ich Einträge markieren und auf Wunsch entfernen oder bearbeiten. Daraus ergibt sich der Umstand, daß die Liste nach dieser Veränderung gelöscht und neu geschrieben werden muß. (Der "Remove" Befehl bringt mich an dieser Stelle nicht weiter.)

Problem:
Wenn die Liste gelöscht und neu geschrieben wird, verliere ich die Markierung des aktiven Elementes. Mit "SetgadgetItemState" oder "SetGadgetState" kann ich zwar die Markierung wieder herstellen, aber ab dem Zeitpunkt nimmt mein Programm keine Eingaben mehr an. Es scheint als wird der Fokus und sämtliche Eingaben auf einen toten Punkt geschoben. Das Programm läuft, ist aber für den Nutzer faktisch tot.

"SetGadgetItemState" halte ich für einen wichtigen Befehl den ich noch öfter brauchen werde. Kann mir bitte jemand erklären was mit diesem Befehl ausgeführt wird, und wie ich mein Problem lösen kann. Die PB-Hilfe, welche mir verät, daß damit ein Eintrag markiert weden kann, bringt mich hier nicht weiter!

Gruß
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ListIconGadget aktives Element/Eintrag (SetGadgetState)

Beitrag von ts-soft »

Bahnhof
Code?
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ListIconGadget aktives Element/Eintrag (SetGadgetState)

Beitrag von Kiffi »

Freizeitcoder hat geschrieben:(Der "Remove" Befehl bringt mich an dieser Stelle nicht weiter.)
der ist aber genau für diese Funktionalität da: RemoveGadgetItem(). Alles andere ist kappes.

Schreib doch mal kurz, warum das für Dich nicht geeignet scheint.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ListIconGadget aktives Element/Eintrag (SetGadgetState)

Beitrag von ts-soft »

Wie werden die Daten verwaltet? LinkList, Array oder im Gadget?
Wieviele Daten?
Wie sieht das Eventloop aus?

Sagen: Das geht nicht, dieses ist nicht geeignet usw. ohne Code ist sinnlos.
Freizeitcoder hat geschrieben:Es scheint als wird der Fokus und sämtliche Eingaben auf einen toten Punkt geschoben. Das Programm läuft, ist aber für den Nutzer faktisch tot.
Das liegt doch an Deinem Code, den ich hier nicht entdecken kann.

Man sollte schon versuchen sein Problem genauestens zu beschreiben und einen
ausführbaren Code zu entwickeln, der dieses verdeutlicht.
Es gibt hier keine Hellseher, Dein fehlendes Codebeispiel kostet dem Helfer extra Zeit,
aber was schreibe ich hier, es ist wohl sinnlos, werde ich mich wieder anderen
Dingen zuwenden /:->

Gruß
Thomas
Freizeitcoder
Beiträge: 35
Registriert: 24.09.2009 13:31
Wohnort: München

Re: ListIconGadget aktives Element/Eintrag (SetGadgetState)

Beitrag von Freizeitcoder »

einen kleinen Beispielcode kann ich leider nicht extrahieren.

Der Umstand den ich Beschreibe liegt aber auch nicht im Code, sondern in der grundsätzlichen Funktionalität des Befehles "SetGadgetItemState".

Gehen wir mal davon aus, daß ich irgend ein dahergelaufenes "ListIconGadget" habe. In diesem Gadget markiere ich nun mit der Maus einen Eintrag. Anschließend lösche ich die Liste, und fülle sie erneut mit den gleichen Einträgen. Die Markierung eines Elementes fliegt dadurch natürlich raus.
Mit "SetGadgetItemState" kann ich nun einen Eintrag wieder markieren lassen. So weit ist ja alles klar und funktioniert auch prächtig.

Mein Problem besteht darin, daß nun sämtliche Eingaben und Interaktionsmöglichkeiten mit dem Programm nicht mehr angenommen werden. Ich besitze nur noch einen ScreenShot von meinem Program.

Das heißt, der Befehl "SetGadgetitemState" setzt den Fokus, nach der Markierung des Elementes, irgend woander hin!

Ich denke es ist tatsächlich so, daß der Befehl das Programm auf den angegebenen Listeneintrag "Fokusiert". Dadurch ist nur noch der Listeneintrag interessant, und der Rest des Programmes wird, hinsichtlich der Eingaben, nicht mehr beachtet. Frage ist, wie kann ich ausdrücken, daß nach dieser Aktion das Programm wieder ganz normal fortfahren soll. Nach dem Motto: "Brav, schön hast Du das gemacht, und jetzt gib mir bitte die Kontrolle des restlichen Programmes wieder".

Gruß
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ListIconGadget aktives Element/Eintrag (SetGadgetState)

Beitrag von ts-soft »

Code: Alles auswählen

SetActiveGadget()
Benutzeravatar
jojo1541
Beiträge: 431
Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo

Re: ListIconGadget aktives Element/Eintrag (SetGadgetState)

Beitrag von jojo1541 »

SetGadgetItemState() fokusiert doch nicht das ganze Programm nurnoch auf das Item im Gadget, dann würde ja kein Programm, dass diesen Befehl benutzt weiterlaufen und dafür hab ich selbst schon zu viele mit diesem Befehl geschriebenl. Ein Code, der dein Problem beschreibt, währe sehr hilfreich.
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
Freizeitcoder
Beiträge: 35
Registriert: 24.09.2009 13:31
Wohnort: München

Re: ListIconGadget aktives Element/Eintrag (SetGadgetState)

Beitrag von Freizeitcoder »

Nachdem ich einige Stunden versucht hatte das Programm zu einen Beispielcode umzuwandeln, bin ich selbst darauf gekommen. Ich habe mir eine schöne Schleife gebastelt! Eingaben wurden nicht mehr angenommen, nur die Maus konnte ich noch bewegen.

Die EventType Abfrage war der Auslöser: Flag - #PB_EventType_Change (meldet Veränderungen im gesamten Programm)
Ich habe mit der System-Konstante " #PB_EventType_Change" nach Veränderungen suchen lassen, und führte bei positiver Rückmeldung einen refresh() der gesamten Listen in allen Panelen des Programms durch. Am Ende des refresh() kam das "SetGadgetState" um die Zeile wieder zu markieren. Dies wiederum wurde von der EventType-Abfrage sogleich als Veränderung erkannt, und ein erneuter refresh() wurde eingeleitet...... usw. usw. usw. Ein Klassiker eben!

Sorry für die dämliche Frage.... war mir sicher es hätte etwas mit dem Befehl zu tun. Das ist eben das Schwierige wenn man neue Sprachen lernt. Man kann sich zu Anfang bei nichts sicher sein, und muß die Fehler erstmal überall suchen.

Trotzdem danke.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ListIconGadget aktives Element/Eintrag (SetGadgetState)

Beitrag von ts-soft »

Nachdem ich einige Stunden versucht hatte das Programm zu einen Beispielcode umzuwandeln, bin ich selbst darauf gekommen
Das ist eins der Vorteile, wenn man so verfährt, wie ich sagte.
#PB_EventType_Change darf naturlich nur nach einem GadgetEvent, das dieses supported abgefragt werden,
niemals darüber in der Hierarchie!

Ohne ausführbares Codebeispiel ist helfen im allg. nicht möglich und mit ist es manchmal garnicht mehr
erforderlich :mrgreen:

Gruß
Thomas
Antworten