Textgadget

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Textgadget

Beitrag von RSBasic »

Hm...

Code: Alles auswählen

EnableExplicit

Define EventID
Global TextGadgetBackground = GetStockObject_(#HOLLOW_BRUSH)

Procedure WinProc(hWnd, Msg, wParam, lParam)
  Protected GadgetNr
 
  Select Msg
    Case #WM_CTLCOLORSTATIC
      GadgetNr = GetProp_(lParam, "PB_ID")
      Select GadgetNr
        Case 0, 1, 2
          SetBkMode_(wParam, #TRANSPARENT)
          SetTextColor_(wParam, GetGadgetColor(GadgetNr, #PB_Gadget_FrontColor))
         
          ProcedureReturn TextGadgetBackground
      EndSelect
  EndSelect
 
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  TextGadget(0, 10, 10, 250, 20, "This TextGadget has a transparent background")
  TextGadget(1, 10, 30, 250, 20, "This TextGadget has a transparent background")
  TextGadget(2, 10, 50, 250, 20, "This TextGadget has a transparent background")
 
  SetGadgetColor(1, #PB_Gadget_FrontColor, RGB(0, 0, 255))
  SetGadgetColor(0, #PB_Gadget_FrontColor, RGB(255, 0, 0))
 
  SetWindowColor(0, RGB(255, 255, 0))
 
  SetWindowCallback(@WinProc())
  
  ;==================================================
  Debug GetGadgetText(1);Wird "This TextGadget has a transparent background" ausgegeben
  ;==================================================
  
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      DeleteObject_(TextGadgetBackground)
      End
    EndIf
  ForEver
EndIf
Kannst du deinen Code posten oder wie genau ermittelst du den Text?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: Textgadget

Beitrag von Moxl »

Code: Alles auswählen

Enumeration
  #Window_player
  
  #Canvas_player_hintergrund
  #Canvas_play
  #Canvas_kreuz
  #Canvas_einstellungen
  #Canvas_track
  #Text_interpret
  #Text_titel
  #Text_dj
  #Text_show
  
  #Font_Window_player_0
  #Font_Window_player_1
  #Font_Window_player_2
EndEnumeration

Global sender, TextGadgetBackground = GetStockObject_(#HOLLOW_BRUSH)

UseJPEGImageDecoder()
UsePNGImageDecoder()

LoadFont(#Font_Window_player_0,"Comic Sans MS", 8)
LoadFont(#Font_Window_player_1,"Comic Sans MS", 8, #PB_Font_Bold)
LoadFont(#Font_Window_player_2,"Comic Sans MS", 8, #PB_Font_Italic)

Procedure WinProc(hWnd, Msg, wParam, lParam)
  Protected GadgetNr
 
  Select Msg
    Case #WM_CTLCOLORSTATIC
      GadgetNr = GetProp_(lParam, "PB_ID")
      Select GadgetNr
        Case #Text_interpret, #Text_titel, #Text_dj, #Text_show
          SetBkMode_(wParam, #TRANSPARENT)
          SetTextColor_(wParam, GetGadgetColor(GadgetNr, #PB_Gadget_FrontColor))
         
          ProcedureReturn TextGadgetBackground
      EndSelect
  EndSelect
 
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

;Fenster ----------------------------------------------------------------------------------
Procedure OpenWindow_player(x = 500, y = 500, width = 267, height = 150)
  OpenWindow(#Window_player, x, y, width, height, "", #PB_Window_BorderLess)
  CanvasGadget(#Canvas_player_hintergrund, 0, 0, 267, 150)
  DisableGadget(#Canvas_player_hintergrund, 1)
  If  StartDrawing(CanvasOutput(#Canvas_player_hintergrund))<>0
    DrawImage(ImageID(#Image_player_hintergrund), 0, 0)
    StopDrawing()
  EndIf
  CanvasGadget(#Canvas_play, 10, 120, 20, 20)
  If  StartDrawing(CanvasOutput(#Canvas_play))<>0
    DrawImage(ImageID(#Image_play), 0, 0)
    StopDrawing()
  EndIf
  CanvasGadget(#Canvas_kreuz, 250, 0, 16, 16)
  If  StartDrawing(CanvasOutput(#Canvas_kreuz))<>0
    DrawImage(ImageID(#Image_kreuz), 0, 0)
    StopDrawing()
  EndIf
  CanvasGadget(#Canvas_einstellungen, 240, 120, 20, 20)
  If  StartDrawing(CanvasOutput(#Canvas_einstellungen))<>0
    DrawImage(ImageID(#Image_einstellungen), 0, 0)
    StopDrawing()
  EndIf
  CanvasGadget(#Canvas_track, 10, 60, 66, 11)
  If  StartDrawing(CanvasOutput(#Canvas_track))<>0
    DrawImage(ImageID(#Image_track), 0, 0)
    StopDrawing()
  EndIf
  TextGadget(#Text_interpret, 10, 75, 240, 20, "fdgdr && srgrthrtrtzj")
  SetGadgetFont(#Text_interpret, FontID(#Font_Window_player_0))
  SetGadgetColor(#Text_interpret, #PB_Gadget_FrontColor, RGB(240, 240, 240))
  TextGadget(#Text_titel, 10, 95, 240, 20, "")
  SetGadgetFont(#Text_titel, FontID(#Font_Window_player_0))
  SetGadgetColor(#Text_titel, #PB_Gadget_FrontColor, RGB(240, 240, 240))
  TextGadget(#Text_dj, 10, 10, 235, 20, "")
  SetGadgetFont(#Text_dj, FontID(#Font_Window_player_1))
  SetGadgetColor(#Text_dj, #PB_Gadget_FrontColor, RGB(255, 0, 255))
  TextGadget(#Text_show, 10, 30, 235, 20, "")
  SetGadgetFont(#Text_show, FontID(#Font_Window_player_2))
  SetGadgetColor(#Text_show, #PB_Gadget_FrontColor, RGB(255, 0, 255))
  SetWindowCallback(@WinProc())
EndProcedure
;Fenster ----------------------------------------------------------------------------------

OpenWindow_player()
Repeat
  event=WaitWindowEvent(20)
  Select  event
    Case  #PB_Event_Gadget
      Select  EventGadget()
        Case  #Canvas_einstellungen
          If  EventType()=#PB_EventType_MouseEnter
            SetGadgetAttribute(#Canvas_einstellungen, #PB_Canvas_Cursor, #PB_Cursor_Hand)
          EndIf
          If  EventType()=#PB_EventType_LeftClick
            ;Popupmenü
          EndIf
          
        Case  #Canvas_play
          If  EventType()=#PB_EventType_MouseEnter
            SetGadgetAttribute(#Canvas_play, #PB_Canvas_Cursor, #PB_Cursor_Hand)
          EndIf
          If  EventType()=#PB_EventType_LeftClick
            ;Streamplayer starten
          EndIf
          
        Case  #Canvas_track
          If  EventType()=#PB_EventType_MouseEnter
            SetGadgetAttribute(#Canvas_track, #PB_Canvas_Cursor, #PB_Cursor_Hand)
          EndIf
          If  EventType()=#PB_EventType_LeftClick
            ;Google öffnen
;-----------------------------------------------
            Debug GetGadgetText(#Text_interpret)
;-----------------------------------------------
          EndIf
          
        Case  #Canvas_kreuz
          If  EventType()=#PB_EventType_MouseEnter
            SetGadgetAttribute(#Canvas_kreuz, #PB_Canvas_Cursor, #PB_Cursor_Hand)
          EndIf
          If  EventType()=#PB_EventType_LeftClick
            ;Verschieben
          EndIf
          
      EndSelect
  EndSelect
Until event=#PB_Event_CloseWindow
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: Textgadget

Beitrag von Moxl »

hab den code ein bisschen zugeschnitten, die ganzen images weg gemacht und anderes zeug das eigentlich nix damit zu tun hat weg geschnitten, und jetzt funktionierts bei mir auf einmal...
versteh ich nich... :|
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Textgadget

Beitrag von RSBasic »

Nachdem ich den von dir geposteten Code hier zum Laufen gebracht habe, kann ich den Fehler, den du hast, hier nicht nachstellen. Bei mir funktioniert es. Sicher, dass der Fehler nicht woanders liegt?
Ansonsten versuchst du mal deinen Code zu minimieren, damit man den Fehler direkt sehen kann.

\\Edit:
Ich habe deine neue Nachricht gelesen. Dann muss der Fehler woanders liegen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: Textgadget

Beitrag von Moxl »

ok also wenn ich beim erstellen des gadget direkt einen text angebe, erkennt er ihn nicht. Aber wenn text irgendwann mittels setgadgettext() dazu kommt, erkennt er ihn auf einmal :mrgreen:
Ist ja egal jetzt da ich den text nur zu testzwecken direkt hingeschrieben habe, normalerweise wird er ja mittels setgadgettext() hinzufügt :)

vielen dank für deine hilfe ;) :allright:
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: Textgadget

Beitrag von Moxl »

Jetzt kommt folgendes problem /:->
wenn jetzt alle 3 minuten oder so der text mittels setgadgettext() geändert wird, dann wird der alte text nicht gelöscht sondern einfach überschrieben, sodass ich jetzt 2 strings übereinander sehe :/
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Textgadget

Beitrag von RSBasic »

Da ich das Problem grundsätzlich nicht nachvollziehen kann, zwei Fragen:
1. Könnte es sein, dass eventuell mehrere Gadgets sich in der Position überschneiden (Z-Order-Problem)?
2. Könnte es sein, dass du ein oder mehrere Threads verwendest, die den Gadgettext ändert?
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: 2476
Registriert: 01.04.2007 20:18

Re: Textgadget

Beitrag von Bisonte »

Moxl hat geschrieben:Jetzt kommt folgendes problem /:->
wenn jetzt alle 3 minuten oder so der text mittels setgadgettext() geändert wird, dann wird der alte text nicht gelöscht sondern einfach überschrieben, sodass ich jetzt 2 strings übereinander sehe :/
Klingt logisch. Textgadget ist ein statisches Ding.
Du greifst ja ein und fängst das setzen des Textes ab.... dann musst du auch dafür sorgen, dass der Hintergrund (bzw. das schon vorhandene) gelöscht wird.
Das was sonst das OS erledigt...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Textgadget

Beitrag von RSBasic »

Also wenn es das Neuzeichen-Problem ist, dann versuche mal nach Textänderung folgendes auszuführen:

Code: Alles auswählen

InvalidateRect_(GadgetID(#DeinSuperUltimateGadget), 0, #True)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: Textgadget

Beitrag von Moxl »

1. Könnte es sein, dass eventuell mehrere Gadgets sich in der Position überschneiden (Z-Order-Problem)?
2. Könnte es sein, dass du ein oder mehrere Threads verwendest, die den Gadgettext ändert?
Also mehrere gadgets hab ich nicht die sich überschneiden, dafür aber ein thread der den gadgettext ändern soll...

Code: Alles auswählen

InvalidateRect_(GadgetID(#DeinSuperUltimateGadget), 0, #True)
funktioniert leider nicht :/
Antworten