Farbiges Textgadget

Anfängerfragen zum Programmieren mit PureBasic.
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Farbiges Textgadget

Beitrag 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.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag 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 ;)
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag 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...
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag 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 ;)
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag 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
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag 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)
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag 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
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Antworten