Foro | | | | Erasmus.Herold | Hallöchen ...
Ich benutzte folgenden Ansatz, um Schriftart und Dimensione zu bestimmen.
hFont& = create("Font", "Arial",14,0,0,0,0)
setdialogfont hFont&
create("text", fenster_darueber%, "Hallöchen ...", 115, 310, 150, 18)
Wie kann ich die Textfarbe auf einen von mir gewählten RGB Wert setzen? Leider keinen passenden Ansatz gefunden.
Saluto Erasmus |
| | | | |
| | Georg Teles | Hallo, schau mal in der Aiuto
'-Begin-----------------------------------------------------------------
'-HeaderFiles---------------------------------------------------------
$H Windows.ph
$H Messages.ph
'-Variables Declaration-----------------------------------------------
Declare Ende%, OldWndProc&, hButton%
Declare hText1%, TextBk1&, hText2%, TextBk2&, hText3%, TextBk3&
'-CallBack Routine----------------------------------------------------
Proc ColorText
Parameters hWnd&, Message&, wParam&, lParam&
If Message& = ~WM_CTLCOLORSTATIC
'-Fuer Text1 Farbe setzen---------------------------------------
If lParam& = hText1%
~SetBkMode(wParam&, ~TRANSPARENT)
~SetTextColor(wParam&, @RGB($FF, $00, $00))'-Rot-----------
Return TextBk1&
'-Fuer Text2 Farbe setzen---------------------------------------
ElseIf lParam& = hText2%
~SetBkMode(wParam&, ~TRANSPARENT)
~SetTextColor(wParam&, @RGB($00, $00, $FF))'-Blau----------
Return TextBk2&
'-Fuer Text3 Farbe setzen---------------------------------------
ElseIf lParam& = hText3%
~SetBkMode(wParam&, ~TRANSPARENT)
~SetTextColor(wParam&, @RGB($00, $FF, $00))'-Gruen---------
Return TextBk3&
EndIf
Else
Return ~CallWindowProc(OldWndProc&, hWnd&, Message&, \
wParam&, lParam&)
EndIf
EndProc
'-Main----------------------------------------------------------------
'-Hintergrundfarben festlegen---------------------------------------
TextBk1& = ~CreateSolidBrush(@RGB($00, $FF, $FF))'-Cyan----------
TextBk2& = ~CreateSolidBrush(@RGB($FF, $FF, $00))'-Gelb----------
TextBk3& = ~CreateSolidBrush(@RGB($FF, $00, $FF))'-Magenta-------
'-Erweitertes MessageHandling abschalten----------------------------
Set("FastMode", 1)
'-Fenster oeffnen---------------------------------------------------
Window 0, 0 - 640, 480
'-ProgramMainRoutine mit CallBack umleiten auf eigene---------------
OldWndProc& = ~GetWindowLong(%hWnd, ~GWL_WNDPROC)
~SetWindowLong(%hWnd, ~GWL_WNDPROC, @ProcAddr("ColorText", 4))
'-GUI aufbauen------------------------------------------------------
hButton% = @Create("Button", %hWnd, "Ende", 10, 10, 100, 24)
'-Textfelder------------------------------------------------------
hText1% = @Create("Text", %hWnd, " Farbiger Text1", 10, 50, \
110, 18)
hText2% = @Create("Text", %hWnd, " Farbiger Text2", 10, 70, \
110, 18)
hText3% = @Create("Text", %hWnd, " Farbiger Text3", 10, 90, \
110, 18)
'-Dialog-Schleife---------------------------------------------------
Clear Ende%
WhileNot Ende%
WaitInput
If %Key = 2
Ende% = 1
ElseIf @Clicked(hButton%)
Ende% = 1
EndIf
EndWhile
'-Fuellmuster freigeben---------------------------------------------
~DeleteObject(TextBk1&)
~DeleteObject(TextBk2&)
~DeleteObject(TextBk3&)
'-Urspruengliche ProgramMainRoutine wieder herstellen---------------
~SetWindowLong(%hWnd, ~GWL_WNDPROC, OldWndProc&)
'-End-------------------------------------------------------------------
End
Alternativ kannst Du die SKControl.dll von Sebastian benutzen
Grüße |
| | | | |
| | p.specht
| Ich bin offenbar zu einfach gestrickt: Wieso nicht einfach UseFont und TextColor? |
| | | XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 21.08.2019 ▲ |
| |
| | Erasmus.Herold | @Georg - so ein Monster nur per Farbe? |
| | | | |
| | Georg Teles | Nunja, Windows macht das einfach so hier die kürzere Variante
$H Windows.ph
$H Messages.ph
Declare Ende%, OldWndProc&, Text1&, Text2&, Text3&, BG&
Proc ColorText
Parameters hWnd&, Message&, wParam&, lParam&
If Message& = ~WM_CTLCOLORSTATIC
If (lParam& = Text1&) | (lParam& = Text2&) | (lParam& = Text3&)
'Statt SetBKMode + Return kann folgende Zeile alternativ verwendet werden
'~SetBkColor(wParam&, RGB($00, $00, $00))
~SetBkMode(wParam&, ~TRANSPARENT)
~SetTextColor(wParam&, RGB($FF, $00, $00))
Return BG&'per Hintergrundfarbe
'Return 0 'per Transparenz
EndIf
Else
Return ~CallWindowProc(OldWndProc&, hWnd&, Message&, wParam&, lParam&)
EndIf
EndProc
' Hintergrundfarbe = Grün
BG& = ~CreateSolidBrush(RGB($00,$FF,$00))
Set("FastMode", 1)
Window 0, 0 - 640, 480
OldWndProc& = ~GetWindowLong(%hWnd, ~GWL_WNDPROC)
~SetWindowLong(%hWnd, ~GWL_WNDPROC, @ProcAddr("ColorText", 4))
Text1& = @Create("Text", %hWnd, " Farbiger Text1", 10, 50, 110, 18)
Text2& = @Create("Text", %hWnd, " Farbiger Text2", 10, 70, 110, 18)
Text3& = @Create("Text", %hWnd, " Farbiger Text3", 10, 90, 110, 18)
Clear Ende%
WhileNot Ende%
WaitInput
If %Key = 2
Ende% = 1
EndIf
EndWhile
~DeleteObject(BG&)
~SetWindowLong(%hWnd, ~GWL_WNDPROC, OldWndProc&)
End
Grüße |
| | | | |
| | p.specht
| Hallöchen ...
Ich benutze folgenden Ansatz, um Schriftart und Dimensione zu bestimmen:
Cls
UseFont "ARIAL",14,8,0,0,0
TextColor Rgb(255,0,0),Rgb(100,255,100)
DrawText 10,100," Farbiger Text1 "
TextColor Rgb(0,0,255),Rgb(100,255,255)
DrawText 10,120," Farbiger Text2 "
TextColor Rgb(0,25,0),Rgb(250,0,250)
DrawText 10,140," Farbiger Text3 "
WaitInput
Um die Farbe im Nachhinein zu ändern, schreibe ich drüber. Naiv, klappt aber. |
| | | Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 21.10.2020 ▲ |
| |
|
AnswerThemeninformationenDieses Thema hat 3 subscriber: |