Seite 2 von 2

Re: Flag von Textgadget umschalten!

Verfasst: 30.05.2017 10:53
von RSBasic
Da hast du Glück, dass TextGadget kein BindGadgetEvent unterstützt. :mrgreen:

Re: Flag von Textgadget umschalten!

Verfasst: 30.05.2017 10:56
von Bisonte
Jetzt wo du das erwähnst ;)

Aber bei der Gelegenheit, das Ganze hat doch noch einen Haken... !

Es funktioniert nur bei FESTER Gadgetnummerierung, nicht wenn #PB_Any bei der ersten Erstellung genutzt wurde....

Re: Flag von Textgadget umschalten!

Verfasst: 30.05.2017 11:02
von Kiffi
Jetzt besser
Bild

Re: Flag von Textgadget umschalten!

Verfasst: 30.05.2017 11:21
von NicTheQuick
Da könnte noch eine Compiler-Weiche rein, falls es auf Windows benutzt wird. :mrgreen:

Re: Flag von Textgadget umschalten!

Verfasst: 30.05.2017 11:22
von RSBasic
Bisonte hat geschrieben:Es funktioniert nur bei FESTER Gadgetnummerierung, nicht wenn #PB_Any bei der ersten Erstellung genutzt wurde....
Warum nicht? Scheint zu funktionieren:

Code: Alles auswählen

EnableExplicit

Define MyTextGadget1
Define MyTextGadget2
Define MyTextGadget3

Procedure SetTextGadgetAlign(Window, Gadget, Flags)
  
  Protected OldGadgetList, TempText.s, x, y, w, h, Result = #False
  Protected TempFont, TempValue, BColor.l, FColor.l
  
  If IsWindow(Window) And IsGadget(Gadget)
    If GadgetType(Gadget) = #PB_GadgetType_Text
      TempText = GetGadgetText(Gadget)   
      TempFont = GetGadgetFont(Gadget)
      x = GadgetX(Gadget) : y = GadgetY(Gadget) : w = GadgetWidth(Gadget) : h = GadgetHeight(Gadget)
      TempValue = GetGadgetData(Gadget)
      BColor = GetGadgetColor(Gadget, #PB_Gadget_BackColor) : FColor = GetGadgetColor(Gadget, #PB_Gadget_FrontColor)
      OldGadgetList = UseGadgetList(WindowID(Window))
      FreeGadget(Gadget)
      DisableDebugger
      TextGadget(Gadget, x, y, w, h, TempText, Flags)
      EnableDebugger
      SetGadgetFont(Gadget, TempFont) : SetGadgetData(Gadget, TempValue)
      If BColor > -1
        SetGadgetColor(Gadget, #PB_Gadget_BackColor, BColor)
      EndIf
      If FColor > -1
        SetGadgetColor(Gadget, #PB_Gadget_FrontColor, FColor)
      EndIf
      UseGadgetList(OldGadgetList)
      Result = #True
    EndIf
  EndIf
  
  ProcedureReturn Result
  
EndProcedure

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  MyTextGadget1 = TextGadget(#PB_Any, 10, 10, 480, 20, "Einmal hin, alles drin", 0)
  MyTextGadget2 = TextGadget(#PB_Any, 10, 30, 480, 20, "Nichts ist unmöglich", 0)
  MyTextGadget3 = TextGadget(#PB_Any, 10, 50, 480, 20, "Ich bin doch nicht blöd", 0)
  
  SetTextGadgetAlign(0, MyTextGadget1, #PB_Text_Right)
  SetTextGadgetAlign(0, MyTextGadget2, #PB_Text_Center)
  SetTextGadgetAlign(0, MyTextGadget3, #PB_Text_Border)
  SetTextGadgetAlign(0, MyTextGadget1, #PB_Text_Border | #PB_Text_Right)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
Oder gibt es eine Einschränkung, die ich übersehen habe?

Re: Flag von Textgadget umschalten!

Verfasst: 30.05.2017 11:34
von Bisonte
Es war eigentlich immer so, das PB bei z.B.
G = TextGadget(#PB_Any...) G oft einen Wert hat, den der Compiler bei Neuerstellung anmeckert.

Und irgendwas anderes war da noch...

NicTheQuick hat geschrieben:Da könnte noch eine Compiler-Weiche rein, falls es auf Windows benutzt wird. :mrgreen:
Oder wir bauen gleich ein Canvas draus ;)

Re: Flag von Textgadget umschalten!

Verfasst: 30.05.2017 11:50
von RSBasic
Bisonte hat geschrieben:G = TextGadget(#PB_Any...) G oft einen Wert hat, den der Compiler bei Neuerstellung anmeckert.
Diesen Fehler (IMA) konnte ich feststellen, wenn man das Fenster schließt. Deshalb habe ich vor Gadgetneuerstellung noch ein FreeGadget hinzugefügt.

Re: Flag von Textgadget umschalten!

Verfasst: 30.05.2017 13:00
von mk-soft
Vielleicht mit Auswertung auf ByRef...

Code: Alles auswählen

EnableExplicit

Define MyTextGadget1
Define MyTextGadget2
Define MyTextGadget3

Procedure _SetTextGadgetAlign(Window, *Gadget.Integer, Flags)
  
  Protected Gadget, OldGadgetList, TempText.s, x, y, w, h, Result = #False
  Protected ByRef, TempFont, TempValue, BColor.l, FColor.l
  
  If *Gadget <= 10000
    Gadget = *Gadget
    ByRef = #False
  Else
    Gadget = *Gadget\i
    If Gadget > 10000
      ByRef = #True
    Else
      ByRef = #False
    EndIf
  EndIf
  
  If IsWindow(Window) And IsGadget(Gadget)
    If GadgetType(Gadget) = #PB_GadgetType_Text
      TempText = GetGadgetText(Gadget)   
      TempFont = GetGadgetFont(Gadget)
      x = GadgetX(Gadget) : y = GadgetY(Gadget) : w = GadgetWidth(Gadget) : h = GadgetHeight(Gadget)
      TempValue = GetGadgetData(Gadget)
      BColor = GetGadgetColor(Gadget, #PB_Gadget_BackColor) : FColor = GetGadgetColor(Gadget, #PB_Gadget_FrontColor)
      OldGadgetList = UseGadgetList(WindowID(Window))
      If ByRef
        FreeGadget(Gadget)
        Gadget = TextGadget(#PB_Any, x, y, w, h, TempText, Flags)
        *Gadget\i = Gadget
      Else
        TextGadget(Gadget, x, y, w, h, TempText, Flags)
      EndIf
      SetGadgetFont(Gadget, TempFont) : SetGadgetData(Gadget, TempValue)
      If BColor > -1
        SetGadgetColor(Gadget, #PB_Gadget_BackColor, BColor)
      EndIf
      If FColor > -1
        SetGadgetColor(Gadget, #PB_Gadget_FrontColor, FColor)
      EndIf
      UseGadgetList(OldGadgetList)
      Result = #True
    EndIf
  EndIf
  ProcedureReturn Result
  
EndProcedure

Macro SetTextGadgetAlign(Window, Gadget, Flags)
  CompilerIf Defined(Gadget, #PB_Variable)
    _SetTextGadgetAlign(Window, @Gadget, Flags)
  CompilerElse
    _SetTextGadgetAlign(Window, Gadget, Flags)
  CompilerEndIf
EndMacro   

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  MyTextGadget1 = TextGadget(#PB_Any, 10, 10, 480, 20, "Einmal hin, alles drin", 0)
  ;MyTextGadget2 = TextGadget(#PB_Any, 10, 30, 480, 20, "Nichts ist unmöglich", 0)
  MyTextGadget2 = TextGadget(2, 10, 30, 480, 20, "Nichts ist unmöglich", 0)
  MyTextGadget3 = TextGadget(#PB_Any, 10, 50, 480, 20, "Ich bin doch nicht blöd", 0)
  
  SetTextGadgetAlign(0, MyTextGadget1, #PB_Text_Right)
  ;SetTextGadgetAlign(0, MyTextGadget2, #PB_Text_Center)
  SetTextGadgetAlign(0, 2, #PB_Text_Center)
  SetTextGadgetAlign(0, MyTextGadget3, #PB_Text_Border)
  SetTextGadgetAlign(0, MyTextGadget1, #PB_Text_Border | #PB_Text_Right)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
Geht so leider nicht mit Struktur-Variablen.

Muss noch an CompilerIf gebastelt werden.

Re: Flag von Textgadget umschalten!

Verfasst: 30.05.2017 13:41
von Bisonte
:o

Da könnte man glatt mit sowas banalem wie einer Textgadget Neuerstellung ganze wissenschaftliche
Abhandlungen und Doktorarbeiten verfassen :D