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 »

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
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 »

oh jeah es hat funktioniert :bounce:

vielen dank an euch :mrgreen: :allright:
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: Textgadget

Beitrag 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.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Textgadget

Beitrag 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?
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 »

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...
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Textgadget

Beitrag 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.ä.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten