Flag von Textgadget umschalten!

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Flag von Textgadget umschalten!

Beitrag 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!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Flag von Textgadget umschalten!

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Flag von Textgadget umschalten!

Beitrag 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!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: Flag von Textgadget umschalten!

Beitrag 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
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Flag von Textgadget umschalten!

Beitrag von Velindos »

Hallo Fluid Byte,
Danke für deinen Tip, eine elegante Lösung mit dem vollen Umfang.

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Flag von Textgadget umschalten!

Beitrag 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().
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: 2430
Registriert: 01.04.2007 20:18

Re: Flag von Textgadget umschalten!

Beitrag 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
Zuletzt geändert von Bisonte am 30.05.2017 10:50, insgesamt 1-mal geändert.
PureBasic 6.10 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 »

:allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Flag von Textgadget umschalten!

Beitrag von Kiffi »

da fehlen noch Get/SetGadgetFont(), Get/SetGadgetColor() und Get/SetGadgetData() :twisted:
Hygge
Benutzeravatar
Bisonte
Beiträge: 2430
Registriert: 01.04.2007 20:18

Re: Flag von Textgadget umschalten!

Beitrag 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:
PureBasic 6.10 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