Seite 1 von 1

Farbiges Textgadget

Verfasst: 11.02.2006 22:20
von real
Hi,

wie ich ein TextGadget einfärben kann hab ich im PureArea CodeArchiv bereits gefunden. Meine Frage ist: Wie bekomme ich den Text in einem Textgadget rot hin, ohne die Hintergrundfarbe zu ändern??? Ich setze den Text mit SetGadgetText, nicht mit DrawText.

Verfasst: 12.02.2006 00:16
von scholly
meinst Du das so:

Code: Alles auswählen

  If OpenWindow(0,0,0,322,275,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"StringGadget Flags") And CreateGadgetList(WindowID(0))
    StringGadget(0,8, 10,306,20,"Normal StringGadget...")
    SetGadgetColor(0, #PB_Gadget_FrontColor,$0000ff)
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf
Dafür brauchts aber PB 4.00b1|2 ;)

Verfasst: 12.02.2006 05:25
von real
Tatsächlich - passt... Danke! :D

Und wie bekomme ich den Text in dem TextGadget jetzt noch Fett? Ich nutze Standardschriftarten und will jetzt auf keinen Fall eine fixe Schriftart (z.B. "MS Sans Serif") in Schriftgröße XY mit Stil Fett per LoadFont laden, wenn der User evtl. eine andere Systemschriftart gewählt hat. Soll also ganz "normale" Schrift sein, "nur" fett halt...

Verfasst: 12.02.2006 15:20
von scholly
Such Dich mal durch die diversen Foren und Beispielsourcen.
IMHO sollte das so gehen:
- Systemfont ermitteln
- mit dem Flag "#PB_Font_Bold" laden.
Ersteres ginge mit defaultfontid = GetStockObject_(#SYSTEM_FONT), aber das gibt nur eine ID zurück, wohingegen LoadFont zusätzlich noch Name und Höhe braucht.
Deswegen steh ich auch aufm Schlauch, aber vielleicht stolpert ja einer von den Kundigeren hier drüber und erleuchtet uns ;)

Verfasst: 12.02.2006 19:28
von scholly
moin, moin...
Das hat mich nich in Ruhe gelassen, da hab ich mein Englisch mal zusammengekratzt, im englischen Forum nachgefragt und glaube daraus Folgendes gelernt zu haben:

Code: Alles auswählen

;works with PB 4.00 beta 2

Procedure.s getsysfontname(hWnd)
   Protected fnt.l,fntName$,fntWeight.l,fntHeight.l,fntStyle.l,fntInfo.LOGFONT
   Protected result.l
   fnt.l = SendMessage_(hWnd, #WM_GETFONT, 0, 0)
   If fnt
      GetObject_(fnt, SizeOf(LOGFONT), @fntInfo) 
      fntName$ = PeekS(@fntInfo\lfFacename)
    result$=fntName$
   EndIf
   ProcedureReturn result$
EndProcedure

Procedure getsysfontheight(hWnd)
   Protected fnt.l,fntName$,fntWeight.l,fntHeight.l,fntStyle.l,fntInfo.LOGFONT
   Protected result.l
   fnt.l = SendMessage_(hWnd, #WM_GETFONT, 0, 0)
   If fnt
      GetObject_(fnt, SizeOf(LOGFONT), @fntInfo) 
      fntHeight.l = Round(-fntInfo\lfHeight*72/GetDeviceCaps_(GetDC_(hWnd),#LOGPIXELSY),1)
    result=fntHeight.l
   EndIf
   ProcedureReturn result
EndProcedure
  
If OpenWindow(0,0,0,322,275,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"StringGadget Flags") And CreateGadgetList(WindowID(0))
  StringGadget(0,8,10,306,20,"Normal...")
  
    sys_fontID=LoadFont(2, getsysfontname(GadgetID(0)), getsysfontheight(GadgetID(0)), #PB_Font_Bold)
    Debug getsysfontname(GadgetID(0))
    Debug getsysfontheight(GadgetID(0))
  
  StringGadget  (1,8,35,306,20,"ROT") 
  SetGadgetColor(1, #PB_Gadget_FrontColor,$0000ff)
 
  StringGadget  (2,8,60,306,20, "BOLD")
  SetGadgetFont (2,sys_fontID)
  
  StringGadget  (3,8,85,306,20, "ROT und BOLD")
  SetGadgetColor(3, #PB_Gadget_FrontColor,$0000ff)
  SetGadgetFont (3,sys_fontID)
  
  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
Sieht vielleicht nicht schön aus, läuft aber bei mir unter 400.b2 und benutzt den System_Font.
Dabei würd mich allerdings mal interessieren, wo ich unter W98 oder WXP diesen Font einsehen/festlegen kann.
Ist das nach Deinem Geschmack ?
gespannt...
scholly

Verfasst: 13.02.2006 15:11
von real
Danke - dass gefällt mir richtig gut!!! :) Hab's eingebaut und was soll ich sagen... Läuft!

Was ich schade irritierend finde ist, wie oft ich trotz der tollen Befehlsvielfalt von PureBasic noch auf die WinAPI zurückgreifen muss. Gut, dass ich dazu die Möglichkeit habe. (Andere Basic-Dialekte verzweifeln hier)

Verfasst: 13.02.2006 16:09
von scholly
real hat geschrieben:Was ich schade irritierend finde ist, wie oft ich trotz der tollen Befehlsvielfalt von PureBasic noch auf die WinAPI zurückgreifen muss.
Tja, das ist halt der "Nachteil", wenns nich nur für WinTendo, sonden auch für MacOS und Linux konzipiert ist - was nicht für alle 3 als PB-internes Kommando umgesetzt werden kann, bleibt vor der Tür und muß über die jeweilige API realisiert werden.
Hat mich anfangs auch gestört, aber nun mach ich nur nen Vermerk in den Source und überlaß das Ersetzen den Leuten, die meine App eventuell später mal für Mac oder Linux haben wollen.
Bin erst seit November auf dem PB-Zug und habe (besonders jetzt nach der 4.0) " die paar Mark Fuffzich" nicht bereut: prima Basic, tolle Community und besonders durch letztere Klasse Support.
bis denne...
scholly