Selbstgemachte Control-Buttons

Für allgemeine Fragen zur Programmierung mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hm... danke soweit, aber ein Callback war eigentlich nicht was mir vorschwebte...
eine einfache zuweisung über diese WS_STYLE geschichten wäre das gesuchte gewesen.

bleibt die restliche Funktionalität der Buttons denn ungebrochen, wenn man die SetFocus MSG einfach verschluckt?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
NoUser

Beitrag von NoUser »

@marroh
> ChaNinja Skin

das is ja interessant... wieso disabled der skin die Webdings?
dass du die Font hast zeigt ja der andere Skin...
oder sind die shots von verschiedenen rechnern?

wenn ja, schau doch mal bitte nach, ob die Font auf dem Rechner mit dem Ninja skin überhaupt vorhanden ist...
Also beide Skins sind auf den selben Rechner. Ich habe mich auch gefragt warum ChaNinja den Webdings-Font nicht annimmt. Habe aber keine Ahnung warum dass so ist.

Gruss
Martin
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ok.. danke für die Info...

ich werde mir da keine weiteren Sorgen machen, wenn ein User einen Skin benutzt, der nicht zu den Basis-OS-Funktionen wie "Schriftart einstellen" kompatibel ist, hat er eben eingeschränkte Funktionalität.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
NoUser

Beitrag von NoUser »

Jepp, darüber würde ich mir auch keine Sorgen machen... gibt einfach zu viele verschiedene Skins.

Gruss
Martin
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Kaeru Gaman hat geschrieben:hm... danke soweit, aber ein Callback war eigentlich nicht was mir vorschwebte...
eine einfache zuweisung über diese WS_STYLE geschichten wäre das gesuchte gewesen.
Du kannst mit folgendem Code verhindern das man zwischen den Buttons mit der TAB-Taste wechseln kann und somit der Auswahlrahmen jedesmal neu gesetzt wird.

Code: Alles auswählen

For i=0 To 3
	SetWindowLong_(GadgetID(i),#GWL_STYLE,GetWindowLong_(GadgetID(i),#GWL_STYLE) ! #WS_TABSTOP)
Next
Aber nur mittels Callback wirst du den Auswahlrahmen wirklich los. Das Ding is' wenn der #WS_TABSTOP Stil durch den obigen Code entfernt wurde, wird trotzdem noch der Auswahlrahmen angezeigt wenn du mit der Maus auf einen Button klickst.
Kaeru Gaman hat geschrieben:Bleibt die restliche Funktionalität der Buttons denn ungebrochen, wenn man die SetFocus MSG einfach verschluckt?
Absolut. Der Auswahlrahmen wird durch das Callback komplett entfernt aber du kannst trotzdem noch zwischen den buttons mit der TAB-Taste switchen (sofern das im Einzelfall gewollt ist).
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

K! thnx 4 info.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Muss nicht unbedingt ein Button sein. Kann auch ein Text mit SS_NOTIFY werden.

Code: Alles auswählen

#Window = 0

Enumeration
#Button1
#Button2
#Button3
#Button4
EndEnumeration

#Font_Webdings = 0

If Not LoadFont( #Font_Webdings, "Webdings", 48 )
  MessageRequester( "Error", "Can't open Font 'Webdings'.", #MB_ICONERROR )
EndIf

If Not OpenWindow( #Window, #PB_Ignore, #PB_Ignore, 336, 96, "Button Test")
  MessageRequester( "Error", "Can't open a Window...?", #MB_ICONQUESTION )
EndIf

  CreateGadgetList( WindowID( #Window ) )
    TextGadget  ( #Button1,  16, 16, 64, 64, Chr( $30 ) , #SS_CENTER | #SS_NOTIFY); | #SS_SUNKEN)
    SetGadgetFont ( #Button1, FontID( #Font_Webdings ) )

    ButtonGadget  ( #Button2,  96, 16, 64, 64, Chr( $32 ) )
    SetGadgetFont ( #Button2, FontID( #Font_Webdings ) )

    ButtonGadget  ( #Button3, 176, 16, 64, 64, Chr( $31 ) )
    SetGadgetFont ( #Button3, FontID( #Font_Webdings ) )

    ButtonGadget  ( #Button4, 256, 16, 64, 64, Chr( $72 ) )
    SetGadgetFont ( #Button4, FontID( #Font_Webdings ) )


Repeat
  EvID = WaitWindowEvent()
  
  Select EvID
    Case #PB_Event_Gadget
         Select EventGadget()
           Case 0 : Debug "Schalter 0 angeklickt!"
           Case 1 : Debug "Schalter 1 angeklickt!"
           Case 2 : Debug "Schalter 2 angeklickt!"
           Case 3 : Debug "Schalter 3 angeklickt!"
         EndSelect
       
  EndSelect
  
Until Evid = #PB_Event_CloseWindow
FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

danke für das NOTIFY Flag... und auch für das CENTER, das zentriert wohl auch Vertikal.
muss mir wohl die ganzen SS_ konstanten mal reinziehen...

... aber für den Zweck ist das nich so dolle, es soll ja ein Button sein.
da würde ich wohl eher noch mit dem focusrahmen leben...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Mit #WM_KILLFOCUS verliert man den Rahmen

Code: Alles auswählen

#Window = 0

Enumeration
#Button1
#Button2
#Button3
#Button4
EndEnumeration

#Font_Webdings = 0

If Not LoadFont( #Font_Webdings, "Webdings", 48 )
  MessageRequester( "Error", "Can't open Font 'Webdings'.", #MB_ICONERROR )
EndIf

If Not OpenWindow( #Window, #PB_Ignore, #PB_Ignore, 336, 96, "Button Test")
  MessageRequester( "Error", "Can't open a Window...?", #MB_ICONQUESTION )
EndIf

  CreateGadgetList( WindowID( #Window ) )
    ButtonGadget  ( #Button1,  16, 16, 64, 64, Chr( $30 ))
    SetGadgetFont ( #Button1, FontID( #Font_Webdings ) )

    ButtonGadget  ( #Button2,  96, 16, 64, 64, Chr( $32 ))
    SetGadgetFont ( #Button2, FontID( #Font_Webdings ) )

    ButtonGadget  ( #Button3, 176, 16, 64, 64, Chr( $31 ) )
    SetGadgetFont ( #Button3, FontID( #Font_Webdings ) )

    ButtonGadget  ( #Button4, 256, 16, 64, 64, Chr( $72 ) )
    SetGadgetFont ( #Button4, FontID( #Font_Webdings ) )


Repeat
  EvID = WaitWindowEvent()
 
  Select EvID
    Case #PB_Event_Gadget
      gadget = EventGadget()
      Select gadget
        Case #Button1 To #Button4
           SendMessage_(GadgetID(gadget), #WM_KILLFOCUS, 0,0)
      EndSelect
         
      Select gadget
        Case #Button1 : Debug "Schalter 1 angeklickt!"
        Case #Button2 : Debug "Schalter 2 angeklickt!"
        Case #Button3 : Debug "Schalter 3 angeklickt!"
        Case #Button4 : Debug "Schalter 4 angeklickt!"
           
      EndSelect
       
  EndSelect
 
Until Evid = #PB_Event_CloseWindow
FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hm... ok. immerhin ohne Callback, in die normale Abfrage integrierbar...
aber leider taucht der Rahmen kurz auf, das ist die Callback-lösung eher chique...

ok... danke für die ganzen backgroundinfos, insgesamt wirklich hilfreich.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten