Seite 1 von 1

DialogXML und #SS_NOTIFY

Verfasst: 02.08.2017 16:30
von Biozynotiker
Hallo Zusammen,

Ich verwende gerne auf TextGadgets das #SS_NOTIFY Flag,
da man somit ein TextGaget 'Klickbar' bzw. somit ein Event auslösen kann.

Nun Benutze ich seit geraumer Zeit für meine Projekte die DialogXML
und hier scheint es, als würden nur PureBasic eigene Konstanten als Flag erlaubt.

Ist es irgendwie möglich, das z.B. ein Doppelklick auf ein TextGadget das mit DialogXML
erstellt wurde ein Event auszulösen?

Für einen Tipp währe ich dankbar!

Re: DialogXML und #SS_NOTIFY

Verfasst: 02.08.2017 16:34
von RSBasic
Ohne getestet zu haben, kannst du mal folgendes ausprobieren:

Code: Alles auswählen

#PB_Text_Notify = #SS_NOTIFY
Wird #PB_Text_Notify ebenfalls ignoriert?

Re: DialogXML und #SS_NOTIFY

Verfasst: 02.08.2017 16:57
von Biozynotiker
RSBasic hat geschrieben:Ohne getestet zu haben, kannst du mal folgendes ausprobieren:

Code: Alles auswählen

#PB_Text_Notify = #SS_NOTIFY
Wird #PB_Text_Notify ebenfalls ignoriert?
Also #SS_NOTIFY verhinderte das OpenXMLDialog überhaupt öffnete, was mit #PB_Text_Notify nun funktioniert.
Allerdings löse ich damit kein Event aus, wenn ich auf das TextGadget klicke.

Ich verwende wie bei anderen Gadgets, BindGadgetEvent auf das TextGadget, jedoch wird wie beschrieben kein Event ausgelöst.

Re: DialogXML und #SS_NOTIFY

Verfasst: 02.08.2017 18:53
von Andesdaf
Biozynotiker hat geschrieben:Also #SS_NOTIFY verhinderte das OpenXMLDialog überhaupt öffnete, was mit #PB_Text_Notify nun funktioniert.
ich bekomme immer einen Dialog-Error (<text text='Text' flags='#PB_Text_Notify' />)

Dialog error: '#PB_Text_Notify' flag is not supported for the following gadget: text

Hätte mich auch gewundert, wenn das funktioniert hätte. Soweit ich weiß akzeptiert die Dialog-Lib
nur bestimmte (und teils nicht mal alle normal vorgesehenen) PB-Flags.

Re: DialogXML und #SS_NOTIFY

Verfasst: 02.08.2017 18:58
von GPI
zu faul eine kleine Demo zu schreiben, aber hast du die Konstante mal in mittels Runtime definiert?

Code: Alles auswählen

 #myflag=#ss_NOTIFY
runtime #myflag
dann könnte es gehen.

Re: DialogXML und #SS_NOTIFY

Verfasst: 02.08.2017 19:06
von Andesdaf
Hab ich schon probiert, funktioniert auch dann nicht.

Re: DialogXML und #SS_NOTIFY

Verfasst: 02.08.2017 19:14
von RSBasic
Und wenn man #SS_NOTIFY nachträglich hinzufügt?

Code: Alles auswählen

EnableExplicit

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  TextGadget(1, 10, 10, 480, 20, "Text Text Text Text Text Text Text Text Text Text", 0)
  
  SetWindowLongPtr_(GadgetID(1), #GWL_STYLE, GetWindowLongPtr_(GadgetID(1), #GWL_STYLE) | #SS_NOTIFY)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 1
            Debug "Klick"
        EndSelect
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf

Re: DialogXML und #SS_NOTIFY

Verfasst: 02.08.2017 19:22
von Kiffi
RSBasic hat geschrieben:Und wenn man #SS_NOTIFY nachträglich hinzufügt?
ja, das funktioniert:

Code: Alles auswählen

#Dialog = 0
#Xml = 0

Runtime Enumeration
  #myText
EndEnumeration

Runtime Procedure myTextEvent()
  Debug "clicked!"
EndProcedure

XML$ = "<window id='#PB_Any' name='test' text='test' minwidth='100' minheight='100' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu'>" +
       "  <text id='#myText' text='Click me!' onevent='myTextEvent()'  />" +
       "</window>"

If ParseXML(#Xml, XML$) And XMLStatus(#Xml) = #PB_XML_Success
  
  If CreateDialog(#Dialog) And OpenXMLDialog(#Dialog, #Xml, "test")
    
    SetWindowLongPtr_(GadgetID(#myText), #GWL_STYLE, GetWindowLongPtr_(GadgetID(#myText), #GWL_STYLE) | #SS_NOTIFY)
    
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow 
    
  Else  
    Debug "Dialog error: " + DialogError(#Dialog)
  EndIf
Else
  Debug "XML error: " + XMLError(#Xml) + " (Line: " + XMLErrorLine(#Xml) + ")"
EndIf
Grüße ... Peter

Re: DialogXML und #SS_NOTIFY

Verfasst: 03.08.2017 09:53
von Biozynotiker
Ja, nachträglich #SS_NOTIFY hinzufügen funktioniert!

Danke für den Tipp/Code.