Aktuelle Zeit: 17.02.2020 06:22

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: [Module] Text mit Farbverlauf als Hintergrund
BeitragVerfasst: 25.03.2014 17:42 
Offline
Benutzeravatar

Registriert: 04.02.2005 15:40
Wohnort: Kaufbeuren
Nachdem sich "TextControlEx" von ProGUI hartnäckig geweigert hat, meinen Resize bzw. Move - Anweisungen nachzukommen, habe ich mir ein eigenes "Gadget" gebastelt, das als Texthintergrund einen Farbverlauf verwendet und v.a. auf mich hört (sprich: sich nachträglich verschieben lässt). :mrgreen:

Code:
;/ === GradientTextModule.pbi [PB 5.6x] ===
;/ Text with gradient background 
;/ March 2014 by Thorsten1867

DeclareModule GradientText
  Declare SetBackColor(GadgetID.i, StartColor.i, EndColor.i)
  Declare SetTextColor(GadgetID.i, Color.i)
  Declare SetFont(GadgetID.i, Font.i)
  Declare SetText(GadgetID.i, Text.s)
  Declare Gadget(GadgetID.i, WinID.i, X.i, Y.i, Width.i, Height.i, Text.s, StartColor.i, EndColor.i, Flags.l=#False)
EndDeclareModule

Module GradientText
 
  EnableExplicit
 
  Structure GradientTextStructure
    Text.s
    TextColor.i
    StartColor.i
    EndColor.i
    Font.i
    Flags.l
    Width.i
    Height.i
  EndStructure
  Global NewMap GradTxt.GradientTextStructure()

  Procedure CreateGradientText(GadgetID.i, Width.i, Height.i, Text.s, TextColor.i, StartColor.i, EndColor.i, Font.i=#False, Flags.l=#False)
    Protected ImageID.i, TxtX.f, TxtY.f
    If StartDrawing(CanvasOutput(GadgetID))
        DrawingMode(#PB_2DDrawing_Gradient)
        BackColor(StartColor)
        FrontColor(EndColor)
        LinearGradient(0, 0, Width, Height)
        Box(0, 0, Width, Height)
        If Flags & #PB_Text_Border
          DrawingMode(#PB_2DDrawing_Outlined)
          Box(0, 0, Width, Height, RGB(180,180,180))
        EndIf
        If Text
          DrawingMode(#PB_2DDrawing_Transparent)
          If Font : DrawingFont(Font) : EndIf
          If Flags & #PB_Text_Center ;{
            TxtX = (Width - TextWidth(Text))/2
          ElseIf Flags & #PB_Text_Right
            TxtX = Width - TextWidth(Text) - 3
          Else
            TxtX = 3
          EndIf
          TxtY = (Height - TextHeight(Text))/2 ;}
          DrawText(TxtX, TxtY, Text, TextColor)
        EndIf
      StopDrawing()
    EndIf
  EndProcedure 


  Procedure SetBackColor(GadgetID.i, StartColor.i, EndColor.i)
    Protected GId.s = Str(GadgetID)
    CreateGradientText(GadgetID, GradTxt(GId)\Width, GradTxt(GId)\Height, GradTxt(GId)\Text, GradTxt(GId)\TextColor, StartColor, EndColor, GradTxt(GId)\Font, GradTxt(GId)\Flags)
    GradTxt(GId)\StartColor = StartColor
    GradTxt(GId)\EndColor   = EndColor
  EndProcedure

  Procedure SetTextColor(GadgetID.i, Color.i)
    Protected GId.s = Str(GadgetID)
    CreateGradientText(GadgetID, GradTxt(GId)\Width, GradTxt(GId)\Height, GradTxt(GId)\Text, Color, GradTxt(GId)\StartColor, GradTxt(GId)\EndColor, GradTxt(GId)\Font, GradTxt(GId)\Flags)
    GradTxt(GId)\TextColor = Color
  EndProcedure

  Procedure SetFont(GadgetID.i, Font.i)
    Protected GId.s = Str(GadgetID)
    CreateGradientText(GadgetID, GradTxt(GId)\Width, GradTxt(GId)\Height, GradTxt(GId)\Text, GradTxt(GId)\TextColor, GradTxt(GId)\StartColor, GradTxt(GId)\EndColor, Font, GradTxt(GId)\Flags)
    GradTxt(GId)\Font = Font
  EndProcedure

  Procedure SetText(GadgetID.i, Text.s)
    Protected GId.s = Str(GadgetID)
    CreateGradientText(GadgetID, GradTxt(GId)\Width, GradTxt(GId)\Height, Text, GradTxt(GId)\TextColor, GradTxt(GId)\StartColor, GradTxt(GId)\EndColor, GradTxt(GId)\Font, GradTxt(GId)\Flags)
    GradTxt(GId)\Text = Text
  EndProcedure

  Procedure Free(GadgetID.i)
    DeleteMapElement(GradTxt(), Str(GadgetID))
  EndProcedure

  Procedure Gadget(GadgetID.i, WinID.i, X.i, Y.i, Width.i, Height.i, Text.s, StartColor.i, EndColor.i, Flags.l=#False)
    Define Result.i, GadgetList.i, GId.s = Str(GadgetID)
   
    If IsWindow(WinID)
     
      GadgetList = UseGadgetList(WindowID(WinID))
     
      Result = CanvasGadget(GadgetID, X, Y, Width, Height)
      If Result
        If GadgetID = #PB_Any : GadgetID = Result : EndIf
        CreateGradientText(GadgetID, Width, Height, Text, RGB($0,$0,$0), StartColor, EndColor, GetGadgetFont(#PB_Default), Flags)
        GradTxt(GId)\Text       = Text
        GradTxt(GId)\TextColor  = RGB($0,$0,$0)
        GradTxt(GId)\StartColor = StartColor
        GradTxt(GId)\EndColor   = EndColor
        GradTxt(GId)\Font       = GetGadgetFont(#PB_Default)
        GradTxt(GId)\Flags      = Flags
        GradTxt(GId)\Width      = Width
        GradTxt(GId)\Height     = Height
      EndIf
     
      UseGadgetList(GadgetList)
     
    EndIf
   
    ProcedureReturn GadgetID
  EndProcedure
 
EndModule

CompilerIf #PB_Compiler_IsMainFile
  #Text = 1
  #Font = 1
  LoadFont(#Font, "Arial", 10, #PB_Font_Bold)
  If OpenWindow(0, 0, 0, 180, 60, "Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
     
      GradientText::Gadget(#Text, 0, 5, 5, 170, 20, "Gradient Background", RGB(10,59,118), RGB(153,180,209), #PB_Text_Center)
      GradientText::SetFont(#Text, FontID(#Font))
      GradientText::SetTextColor(#Text, RGB($FF,$FF,$FF))
      MessageRequester("Test GradientText", "Change Background", #MB_OK)
      GradientText::SetBackColor(#Text, RGB($0,$62,$0), RGB($0,$E8,$0))
     
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf
CompilerEndIf

_________________
Download der Module

Bild


Zuletzt geändert von Thorsten1867 am 06.01.2018 20:24, insgesamt 6-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Text mit Farbverlauf als Hintergrund (Module)
BeitragVerfasst: 25.03.2014 18:16 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
:allright:

Sehr nützlich!

Hättest Du EnableExplicit genutzt (im Modul), wäre Dir aufgefallen, das in Zeile 89 TextColor genutzt wird,
welches nicht deklariert ist und somit immer den Wert 0 haben wird. Solange schwarzer Text angesagt ist,
wird das ja nichts ausmachen, aber ...

Gruß
Thomas

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Text mit Farbverlauf als Hintergrund (Module)
BeitragVerfasst: 25.03.2014 18:50 
Offline
Benutzeravatar

Registriert: 04.02.2005 15:40
Wohnort: Kaufbeuren
ts-soft hat geschrieben:
Hättest Du EnableExplicit genutzt (im Modul), wäre Dir aufgefallen, das in Zeile 89 TextColor genutzt wird,
welches nicht deklariert ist und somit immer den Wert 0 haben wird. Solange schwarzer Text angesagt ist,
wird das ja nichts ausmachen, aber ...


Einmal vergessen und schon rächt es sich .... :wink:

PS: @ts-soft
Der Versuch daraus ein "echtes" Gadget zu basteln ist leider bisher gescheitert. Irgendwie hat der Handle, der neben der ID übergeben werden muss, immer einen Speicherfehler provoziert.
Irgendwie bin ich wohl noch nicht ganz bei den Geheimnissen des Registieren eines Gadgets durchgestiegen. :(

_________________
Download der Module

Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Text mit Farbverlauf als Hintergrund (Module)
BeitragVerfasst: 25.03.2014 19:28 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Das mit den echten Gadgets ist sowieso nicht mehr so interessant. Höchstens für UserLibs, aber die
will ja auch keiner, solange keine Sourcen bei sind, zumindest ich nicht. Als Modul braucht man keine
"echte" Gadgets <)

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye