Seite 2 von 4

Verfasst: 17.07.2005 23:07
von vonTurnundTaxis
Es ist gut, einen Account beim englischen Forum zu haben.
Ich habe dort das gefunden:

Code: Alles auswählen

; Original code by Danilo and Num3 (thanks, guys).
; Modified by PB to get a transparent TextGadget.

Global TextGadgetBackground,TextGadgetForeground

TextGadgetBackground=GetStockObject_(#HOLLOW_BRUSH)
TextGadgetForeground=RGB($FF,$00,$00)

Procedure WinProc(hWnd,Msg,wParam,lParam)
  If Msg=#WM_CTLCOLORSTATIC And lParam=GadgetID(0)
    SetBkMode_(wParam,#TRANSPARENT)
    SetTextColor_(wParam,TextGadgetForeground)
    ProcedureReturn TextGadgetBackground
  Else
    ProcedureReturn #PB_ProcessPureBasicEvents
  EndIf
EndProcedure

OpenWindow(0,0,0,250,100,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"test")
SetWindowCallback(@WinProc()) : CreateGadgetList(WindowID())
TextGadget(0,0,0,225,13,"This TextGadget has a transparent background")
r=LoadImage(1,"Babe.bmp") : ImageGadget(1,0,0,0,0,r)
Repeat : Until WaitWindowEvent()=#PB_EventCloseWindow

DeleteObject_(TextGadgetBackground) 
(Ich habe den Code nicht getestet; er ist allerdings von Danilo und müsste also funktionieren :) )

Verfasst: 17.07.2005 23:11
von Konne
JUHU es geht!!!
:D

Getestet mit Skinwin^^

Sowas gehört doch ins Codearchiv.

Verfasst: 18.07.2005 00:08
von Andre
Konne hat geschrieben:Sowas gehört doch ins Codearchiv.
Wird schon... :mrgreen:

Re: Textgadget

Verfasst: 26.03.2014 00:20
von Moxl
Hallo :allright:

habe eben nach nem Code gesucht den Hintergrund von einem TextGadget transparent zu machen und da bin ich auf den Code von vonTurnundTaxis gestoßen :allright:
Jetzt habe ich aber 4 Textgadget, mit 2 verschiedenen schriftfarben, die transparent gemacht werden müssen und mit dem Code funktioniert das bei mir leider immer nur mit einem textgadget :/
kann mir das jemand so umschreiben das sich die transparenz auf alle 4 textgadget auswirkt?
kenn mich leider keinen meter mit callbacks aus :|

danke schonmal im vorraus :allright:

Re: Textgadget

Verfasst: 26.03.2014 00:27
von RSBasic

Code: Alles auswählen

; Original code by Danilo and Num3 (thanks, guys).
; Modified by PB to get a transparent TextGadget.

Global TextGadgetBackground,TextGadgetForeground

TextGadgetBackground=GetStockObject_(#HOLLOW_BRUSH)
TextGadgetForeground=RGB($FF,$00,$00)

Procedure WinProc(hWnd,Msg,wParam,lParam)
  If Msg=#WM_CTLCOLORSTATIC
    Select lParam
      Case GadgetID(0), GadgetID(1), GadgetID(2)
        SetBkMode_(wParam,#TRANSPARENT)
        SetTextColor_(wParam,TextGadgetForeground)
        ProcedureReturn TextGadgetBackground
    EndSelect
  Else
    ProcedureReturn #PB_ProcessPureBasicEvents
  EndIf
EndProcedure

OpenWindow(0,0,0,250,100,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
SetWindowCallback(@WinProc()); : CreateGadgetList(WindowID(0))
TextGadget(0,0,0,225,13,"This TextGadget has a transparent background")
TextGadget(1,0,20,225,13,"This TextGadget has a transparent background")
TextGadget(2,0,40,225,13,"This TextGadget has a transparent background")
;r=LoadImage(1,"Babe.bmp") : ImageGadget(1,0,0,0,0,r)
SetWindowColor(0,65000)
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow

DeleteObject_(TextGadgetBackground)

Re: Textgadget

Verfasst: 26.03.2014 00:48
von Moxl
Vielen Dank :allright:

also funktionieren tut es nur leider hab ich noch das problem das ich 2 verschiedene schriftfarben in einem fenster habe.
und in dem code wird ja nur eine farbe definiert.

Re: Textgadget

Verfasst: 26.03.2014 11:14
von RSBasic

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())
  
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      DeleteObject_(TextGadgetBackground)
      End
    EndIf
  ForEver
EndIf

Re: Textgadget

Verfasst: 26.03.2014 12:39
von Moxl
sehr schön funktioniert bestens :) :allright:

jetzt hab ich nur noch ein einziges problem :lol:
und zwar wenn ein string angezeigt wird wo ein "&" <--- zeichen drin vorkommt, dann zeigt er mir nur ein " _" <--- an :/ string hab ich schon mit debug überprüft und ist aber soweit korrekt.

Re: Textgadget

Verfasst: 26.03.2014 12:42
von RSBasic
Das ist ein Windows-Standardverhalten. Das Zeichen wird u.a. für Tastenkombination in Menüs verwendet, damit der Benutzer weiß, dass er die Taste mit diesem Zeichen drücken muss, um es aufzurufen.
Wenn du das Und-Zeichen darstellen möchtest, dann schreibe das Und-Zeichen doppelt.

Re: Textgadget

Verfasst: 26.03.2014 12:54
von Moxl
ah okay danke :D

aber jetzt hat sich noch ein problem eingeschlichen :bounce:
und zwar wenn ich den text mittels GetGadgetText() wieder ermitteln will bekomme ich nichts raus /:->
Also einen leeren string.. :freak: