Seite 3 von 4

Re: Textgadget

Verfasst: 26.03.2014 12:58
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?

Re: Textgadget

Verfasst: 26.03.2014 13:17
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

Re: Textgadget

Verfasst: 26.03.2014 13:19
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... :|

Re: Textgadget

Verfasst: 26.03.2014 13:19
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.

Re: Textgadget

Verfasst: 26.03.2014 13:23
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:

Re: Textgadget

Verfasst: 26.03.2014 13:31
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 :/

Re: Textgadget

Verfasst: 26.03.2014 13:44
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?

Re: Textgadget

Verfasst: 26.03.2014 13:49
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...

Re: Textgadget

Verfasst: 26.03.2014 13:52
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)

Re: Textgadget

Verfasst: 26.03.2014 14:01
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 :/