Textgadget

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag 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 :) )
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

JUHU es geht!!!
:D

Getestet mit Skinwin^^

Sowas gehört doch ins Codearchiv.
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1767
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Konne hat geschrieben:Sowas gehört doch ins Codearchiv.
Wird schon... :mrgreen:
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: Textgadget

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

Re: Textgadget

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

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

Re: Textgadget

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

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

Re: Textgadget

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

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:
Antworten