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
:allright:

Re: Flag von Textgadget umschalten!

Verfasst: 30.05.2017 10:42
von Kiffi
da fehlen noch Get/SetGadgetFont(), Get/SetGadgetColor() und Get/SetGadgetData() :twisted:

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() :twisted:
Jetzt besser ;) (Code im obigen post geändert)

Mannomann das artet in Arbeit aus :mrgreen: