Flag von Textgadget umschalten!

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Flag von Textgadget umschalten!

Beitrag von RSBasic »

Da hast du Glück, dass TextGadget kein BindGadgetEvent unterstützt. :mrgreen:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Flag von Textgadget umschalten!

Beitrag 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....
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Flag von Textgadget umschalten!

Beitrag von Kiffi »

Jetzt besser
Bild
Hygge
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Flag von Textgadget umschalten!

Beitrag von NicTheQuick »

Da könnte noch eine Compiler-Weiche rein, falls es auf Windows benutzt wird. :mrgreen:
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Flag von Textgadget umschalten!

Beitrag 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?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Flag von Textgadget umschalten!

Beitrag 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 ;)
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Flag von Textgadget umschalten!

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Flag von Textgadget umschalten!

Beitrag 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.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Flag von Textgadget umschalten!

Beitrag von Bisonte »

:o

Da könnte man glatt mit sowas banalem wie einer Textgadget Neuerstellung ganze wissenschaftliche
Abhandlungen und Doktorarbeiten verfassen :D
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Antworten