Seite 1 von 2
Flag von Textgadget umschalten!
Verfasst: 20.05.2017 14:52
von Velindos
Hallo Leute!
Ich will das Textgadget von Links auf Center umschalten während des Betriebes!
Mit der Einstellung starte ich
TextGadget(#PSNOTE_Stichwort,xx,xx,xx,xx,Stichwort$,#SS_NOTIFY|#PB_Text_Center)
dann möchte ich umschalten wie folgt:
SetGadgetState(#PSNOTE_Stichwort,#PB_Text_Center)
bzw.
SetGadgetState(#PSNOTE_Stichwort,#PB_Text3D_Left)
... funzt aber nicht!
Jemand einen Tip!
Gruss ... Velindos!
Re: Flag von Textgadget umschalten!
Verfasst: 20.05.2017 15:05
von RSBasic
Mit PB wirst du das nicht ändern können, weil das nicht vorgesehen ist.
Du kannst nur die Schrift- und Hintergrundfarbe mit SetGadgetColor() ändern.
Da musst du schon die API-Schnittstelle des jeweiligen Betriebssystems verwenden.
Da ich mich nur mit WinAPI auskenne, kann ich dir nur einen Code für Windows schreiben:
Code: Alles auswählen
EnableExplicit
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget(1, 10, 10, WindowWidth(0)-20, 20, "Hallo Velindos", #SS_NOTIFY | #PB_Text_Center)
;SetWindowLongPtr_(GadgetID(1), #GWL_STYLE, GetWindowLongPtr_(GadgetID(1), #GWL_STYLE) &~#PB_Text_Center | #PB_Text_Right)
SetWindowLongPtr_(GadgetID(1), #GWL_STYLE, GetWindowLongPtr_(GadgetID(1), #GWL_STYLE) &~#PB_Text_Center | #SS_LEFT)
SetGadgetText(1, GetGadgetText(1))
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Aber das gibts schon in WinAPI Library:
http://www.rsbasic.de/aktualisierung/wi ... A4ndern.pb
Re: Flag von Textgadget umschalten!
Verfasst: 20.05.2017 15:15
von Velindos
Hallo RSBasic,
vielen Dank für den TIP, wäre gerade fast verzweifelt!
Ist ja ein bischen Weit weg von meiner Lösung, auf die muss man mal kommen! Also Danke, die Sache funzt!
Gruss ... Velindos!
Re: Flag von Textgadget umschalten!
Verfasst: 29.05.2017 09:55
von Fluid Byte
Velindos hat geschrieben:Ich will das Textgadget von Links auf Center umschalten während des Betriebes!
Code: Alles auswählen
OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget(0,10,10,WindowWidth(0)-20,20,"Hallo Velindos",#PB_Text_Border)
ButtonGadget(1,10,50,100,25,"Left")
ButtonGadget(2,120,50,100,25,"Center")
ButtonGadget(3,230,50,100,25,"Right")
Macro SetTextAlign(Flags)
TempText$ = GetGadgetText(0)
TextGadget(0,10,10,WindowWidth(0)-20,20,TempText$,Flags)
EndMacro
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case 1 : SetTextAlign(#PB_Text_Border)
Case 2 : SetTextAlign(#PB_Text_Border | #PB_Text_Center)
Case 3 : SetTextAlign(#PB_Text_Border | #PB_Text_Right)
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
Re: Flag von Textgadget umschalten!
Verfasst: 29.05.2017 17:44
von Velindos
Hallo Fluid Byte,
Danke für deinen Tip, eine elegante Lösung mit dem vollen Umfang.
Gruss ... Velindos!
Re: Flag von Textgadget umschalten!
Verfasst: 30.05.2017 08:36
von RSBasic
Das ist aber eher ein Workaround, das Gadget komplett neu zu erstellen statt zu ändern, aber der einzige Vorteil ist die Plattformunabhängigkeit.
Der Code ist außerdem unfertig. Was ist, wenn man ein zweites Fenster hat? Dann wird das neue Gadget im falschen Fenster angelegt. Da fehlt auf jeden Fall ein UseGadgetList().
Re: Flag von Textgadget umschalten!
Verfasst: 30.05.2017 10:19
von Bisonte
RSBasic hat geschrieben:Das ist aber eher ein Workaround, das Gadget komplett neu zu erstellen statt zu ändern, aber der einzige Vorteil ist die Plattformunabhängigkeit.
Der Code ist außerdem unfertig. Was ist, wenn man ein zweites Fenster har? Dann wird das neue Gadget im falschen Fenster angelegt. Da fehlt auf jeden Fall ein UseGadgetList().
Also in etwa so :
Code: Alles auswählen
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))
TextGadget(Gadget, x, y, w, h, TempText, Flags)
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
Re: Flag von Textgadget umschalten!
Verfasst: 30.05.2017 10:21
von RSBasic
Re: Flag von Textgadget umschalten!
Verfasst: 30.05.2017 10:42
von Kiffi
da fehlen noch Get/SetGadgetFont(), Get/SetGadgetColor() und Get/SetGadgetData()

Re: Flag von Textgadget umschalten!
Verfasst: 30.05.2017 10:51
von Bisonte
Kiffi hat geschrieben:da fehlen noch Get/SetGadgetFont(), Get/SetGadgetColor() und Get/SetGadgetData()

Jetzt besser

(Code im obigen post geändert)
Mannomann das artet in Arbeit aus
