Seite 1 von 1

Konversation mit dem Debbuger?! "...are you sure of that?"

Verfasst: 06.05.2010 17:02
von Olaf.Renns
Hallo liebe PB'ler,

ich wollte die Möglichkeit nutzen, ein vorhandenes und bereits erstelltes Gadget mit der gleichen Gadget-Nummer neu zu erstellen. Dabei ist mir bei der Verwendung von #PB_Any eine Debugger-Error-Meldung hochgekommen. Hat jemand vielleicht eine Idee, warum der Fehler Auftritt und wie man diesen umgehen kann? Die PB-Nummer gibt PB ja selber vor, also warum hat er dann damit ein Problem?

Anbei ein einfaches Beispiel, um das Problem zu verdeutlichen. Die Suche hat mir zu dem Thema nichts ausgespuckt.

Code: Alles auswählen

  If OpenWindow(0, 0, 0, 322, 205, "StringGadget Flags", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    a=StringGadget(#PB_Any,8,10,306,20,"Normal StringGadget...")
    StringGadget(a,8,10,306,20,"Normal StringGadget...")
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
Generell funktioniert ja auch das einfache Überschreiben vorhandener Gadgets:

Code: Alles auswählen

  If OpenWindow(0, 0, 0, 322, 205, "StringGadget Flags", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    StringGadget(1,8,10,306,20,"Normal StringGadget...")
    StringGadget(1,8,10,306,20,"Normal StringGadget...")
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
Grüße Olaf

Re: Konversation mit dem Debbuger?! "...are you sure of that

Verfasst: 06.05.2010 17:07
von Kaeru Gaman
weil du keine ID die du per #PB_Any angefordert hattest, wiederverwenden darfst um ein neues Objekt zu erzeugen.

wiederverwenden darfst du nur Nummern, die du direkt angegeben hast.

Rückgabe-IDs von #PB_Any sind interne Handles, die musst du neu erzeugen lassen, also nochmal per #PB_Any.

Re: Konversation mit dem Debbuger?! "...are you sure of that

Verfasst: 06.05.2010 17:56
von helpy
Mit FreeGadget():

Code: Alles auswählen

  If OpenWindow(0, 0, 0, 322, 205, "StringGadget Flags", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    a=StringGadget(#PB_Any,8,10,306,20,"Normal StringGadget...")
    FreeGadget(a)
    a=StringGadget(#PB_Any,8,10,306,20,"Normal StringGadget...")
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

Re: Konversation mit dem Debbuger?! "...are you sure of that

Verfasst: 06.05.2010 21:45
von Olaf.Renns
weil du keine ID die du per #PB_Any angefordert hattest, wiederverwenden darfst um ein neues Objekt zu erzeugen.

wiederverwenden darfst du nur Nummern, die du direkt angegeben hast.

Rückgabe-IDs von #PB_Any sind interne Handles, die musst du neu erzeugen lassen, also nochmal per #PB_Any.
Das hat in der Hinsicht aber nichts mit #PB_Any und deren Anforderung zu tun. PB kann nur keine indexierten Gadget-Nummern verarbeiten, die größer sind als 10000. Mich wundert es nur, das #PB_Any aber Gadget-Nummern erstellt, die genau dieser Regeln nicht entsprechen. Scheinbar sind #PB_Any und #Gadget zwei unterschiedliche Dinge (Handle und ID). Wieder was gelernt oder eher bisher unbewusst wahrgenommen :-)

Re: Konversation mit dem Debbuger?! "...are you sure of that

Verfasst: 06.05.2010 21:52
von Kaeru Gaman
weil eben, wie gesagt, #PB_Any keine Nummern erstellt sondern Handles.
die Nummern bis 10000 sind Indices auf eine Handle-Tabelle.
wenn das Handle direkt erstellt wird, braucht es keinen Platz in dieser Tabelle.

Re: Konversation mit dem Debbuger?! "...are you sure of that

Verfasst: 06.05.2010 21:52
von ts-soft
Nimm einfach den Tip von Helpy an.

Fixe IDs werden in einer Art LinkList gespeichert, dynamische IDs sind Objectpointer in dieser List. Damit sich diese nicht überlappen, gibts da eine begrenzung der id höhe, aber nicht nur deswegen.

Diese pointer können nicht einfach durch die pointerangabe überschrieben werden, die müssen freigegeben werden.

Gruß
Thomas

Re: Konversation mit dem Debbuger?! "...are you sure of that

Verfasst: 07.05.2010 09:32
von helpy
Grundsätzlich mal ne Frage:

In welcher Situation will man denn ein Gadget neu erstellen und überschreiben? Ich kann mir jetzt keine Anwendung vorstellen, wo ich das so anwenden würde.

lg,
guido

Re: Konversation mit dem Debbuger?! "...are you sure of that

Verfasst: 07.05.2010 12:33
von Kaeru Gaman
stimmt irgendwie schon. bei dynamisch erzeugten Formularen würde man von Anfang an von einer dynamisch erzeugten Handle-Liste ausgehen.

... aber wenn man das nicht weiß, das mit den Handles und den Nummern, dann wird man sich natürlich zuerst eine Lösung mit Nummernkreisen ausdenken, bevor man merkt, dass das unnötig ist.

Re: Konversation mit dem Debbuger?! "...are you sure of that

Verfasst: 07.05.2010 12:40
von Olaf.Renns
Da einfache Überschrieben ist ja ein nettes Feature von PB. Das man das vielleicht nicht so nutzen sollte, (genauso wie Goto, nicht verwenden der Free... Befehle usw.) ist ja eine bekannte Regeln. Hat mich nur gewundert im Moment des Aufkommens. Einen einfachen Workarround gibt es ja in jedem Fall:Sauberes Arbeiten :bounce:

Re: Konversation mit dem Debbuger?! "...are you sure of that

Verfasst: 07.05.2010 13:04
von Kaeru Gaman
Zitatwürdig.