Seite 4 von 4

Re: Textgadget

Verfasst: 26.03.2014 14:03
von RSBasic
Sorry, ich meine natürlich das Neuzeichnen des Fensters und nicht nur des jeweiligen Gadgets:

Code: Alles auswählen

InvalidateRect_(WindowID(#DeinSuperHammerGeilesFenster), 0, #True)
Beispielcode:

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())
  
  ButtonGadget(10, 10, 80, 100, 20, "Text ändern")
  
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
        Case 10
          SetGadgetText(1, "saf sdfsdf sd")
          InvalidateRect_(WindowID(0), 0, #True);Wenn man diese Zeile rausnimmt, dann kann man dein Problem nachvollziehen.
      EndSelect
    EndIf
    If EventID = #PB_Event_CloseWindow
      DeleteObject_(TextGadgetBackground)
      End
    EndIf
  ForEver
EndIf

Re: Textgadget

Verfasst: 26.03.2014 14:12
von Moxl
oh jeah es hat funktioniert :bounce:

vielen dank an euch :mrgreen: :allright:

Re: Textgadget

Verfasst: 26.03.2014 15:14
von Moxl
Und noch eine kleine Aufgabe :mrgreen:

wenn ich das programm starte dann ist manchmal ein canvasgadget weg. Die maus ändert sich zwar wenn ich drüber gehe und ich könnte noch drauf klicken aber der hintergrund überlappt es anscheinend. Ist aber auch nicht immer der fall.

Re: Textgadget

Verfasst: 26.03.2014 15:39
von RSBasic
Möchtest du ein Hintergrundbild im Fensters festlegen?
Ein Gadget als Hintergrund zu nehmen, ist meiner Meinung nach nicht so gut.
Ich würde lieber so machen:

Code: Alles auswählen

EnableExplicit

Define EventID
Define hBrush
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

;Erstellung und Zeichnung des Hintergrundbildes
CreateImage(1, 500, 400)
If StartDrawing(ImageOutput(1))
  DrawingMode(#PB_2DDrawing_Gradient)
  BackColor(RGB(50, 150, 255))
  FrontColor(RGB(0, 100, 255))
  BoxedGradient(0, 0, ImageWidth(1), ImageHeight(1))
  Box(0, 0, ImageWidth(1), ImageHeight(1))
  
  StopDrawing()
EndIf

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, 255, 0))
  SetGadgetColor(0, #PB_Gadget_FrontColor, RGB(255, 0, 0))
 
  ButtonGadget(10, 10, 80, 100, 20, "Text ändern")
  
  hBrush = CreatePatternBrush_(ImageID(1))
  SetClassLong_(WindowID(0), #GCL_HBRBACKGROUND, hBrush)
  InvalidateRect_(WindowID(0), #Null, #True)
  SetWindowCallback(@WinProc())
 
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
        Case 10
          SetGadgetText(1, "saf sdfsdf sd")
          InvalidateRect_(WindowID(0), 0, #True)
      EndSelect
    EndIf
    If EventID = #PB_Event_CloseWindow
      DeleteObject_(TextGadgetBackground)
      DeleteObject_(hBrush)
      End
    EndIf
  ForEver
EndIf
Ich hoffe, du meinst ein komplettes Fensterhintergrundbild oder nur ein Teil deines Fensters?

Re: Textgadget

Verfasst: 26.03.2014 15:46
von Moxl
Ja ich hab ein CanvasGadget als hintergrund wo ich ein image lade mit farbverläufen undso :)
soweit ich das jetzt herausfinden konnte liegt es an dem

Code: Alles auswählen

InvalidateRect_(WindowID(#DeinSuperHammerGeilesFenster), 0, #True)
das manchmal ein gadget ausgeblendet wird...

Re: Textgadget

Verfasst: 26.03.2014 15:59
von RSBasic
Kannst du einen minimalen und lauffähigen Beispielcode bauen, den man ohne Aufwand ausführen kann und womit man den Fehler sehen kann? Sonst müsste ich jetzt wieder ein Code von dir nehmen, umbauen und versuchen, den Fehler nachzustellen.
Ich habs zwar versucht, aber bei mir tritt das Problem nicht auf:

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
  
  #Image_player_hintergrund
  #Image_play
  #Image_kreuz
  #Image_einstellungen
  #Image_track
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)

CreateImage(#Image_player_hintergrund, 500, 400)
If StartDrawing(ImageOutput(#Image_player_hintergrund))
  DrawingMode(#PB_2DDrawing_Gradient)
  BackColor(RGB(50, 150, 255))
  FrontColor(RGB(0, 100, 255))
  BoxedGradient(0, 0, ImageWidth(#Image_player_hintergrund), ImageHeight(#Image_player_hintergrund))
  Box(0, 0, ImageWidth(#Image_player_hintergrund), ImageHeight(#Image_player_hintergrund))
 
  StopDrawing()
EndIf
CreateImage(#Image_play, 32, 32, 24, RGB(255, 0, 0))
CreateImage(#Image_kreuz, 32, 32, 24, RGB(255, 255, 0))
CreateImage(#Image_einstellungen, 32, 32, 24, RGB(255, 0, 255))
CreateImage(#Image_track, 32, 32, 24, RGB(255, 0, 255))

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
            SetGadgetText(#Text_interpret, Str(Random(9999999999999)))
            InvalidateRect_(WindowID(#Window_player), 0, #True)
          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
Hier wird nichts ausgeblendet o.ä.