PDA

View Full Version : different font for a label



sandyrepope
03-03-2007, 00:02
Is it possible to have two labels and have each label use a different font?

Thanks
Sandy

Petr Schreiber
03-03-2007, 00:21
Hi,

I think yes. For some reason I could not make "Wingdings" working, but maybe I am just too tired :)

Try this working sample for Courier and Arial Black:



uses "UI"

DIM hDlg AS DWORD
dim Msg, wparam,lparam as dword

DIALOG NEW 0, "Sample dialog with multiple fonts", -1, -1, 150, 100, _
%WS_DLGFRAME OR %DS_CENTER OR %WS_CAPTION OR %WS_SYSMENU OR %WS_OVERLAPPEDWINDOW, _
0 TO hDlg


' Two test labels
CONTROL ADD LABEL, hDlg, 1001,"Courier", 5, 5, 150, 20
CONTROL ADD LABEL, hDlg, 1002,"Arial Black", 5,25, 150, 20

' This way of handle declaration assures automatic resource deletion on end of program
DIM hFont1 AS DWORD resource = Font_Create("Courier New", 9)
DIM hFont2 AS DWORD resource = Font_Create("Arial Black", 12)

' Useful messages for setting the font
CONTROL SEND hDlg, 1001, %WM_SETFONT, hFont1, 0
CONTROL SEND hDlg, 1002, %WM_SETFONT, hFont2, 0


DIALOG SHOW modeless hDlg

while isWindow(hDlg)
Msg = GetMessage(hDlg, wParam, lParam)

select case Msg
CASE %WM_SYSCOMMAND

SELECT CASE wParam

CASE %SC_CLOSE
EXIT WHILE

END SELECT
END SELECT

wend

DIALOG END hDlg



Bye,
Petr

TomC
14-09-2011, 12:53
Hi Petra,


Thanks for the example – it works fine. I also have found that it doesn't work with any of the “symbols” fonts (e.g. Wingdings & the one I want to use! – I'll have to create a none symbol version!!)

I'm trying to use it to change the fonts of multiple labels within a Tab; e.g.

For Count = 0 To Cad_Items - 1
lWidth = 15 : Control Add Label, hDlg_AuspDates, Cad_Font_Id + Count, Cad_head (Count + 1) , xPos ,yPos + 4, lWidth ,15, %SS_LEFT
Control Send hDlg_AuspDates, Cad_Font_Id + Count, %WM_SETFONT, hFont5, 0
lWidth = 15 : Control Add Checkbox, hDlg_AuspDates, CAD_Start_Id + Count , "", xPos, yPos1 + 4, lWidth, 15 : xPos += lWidth + %Input_Bar_X_Gap
Next

The problem is that only the first label has the font applied to it. The font for the second label gets applied to an early item defined for the tab, the next to the second (more or less) and so forth.

Is it something I'm doing wrong, or have I found a bug ?

Kind regards,

Tom Coxon

Petr Schreiber
14-09-2011, 15:19
Hi TomC,

without more code, it seems to me that what you experience seems like a collision on control ids, you must make sure they are unique.
To generate unique IDs on the fly, you might use this routine:


Function controlID_GetUnique() As Long
Static controlID_New As Long = %WM_USER

controlID_New += 1

Return controlID_New
End Function

But it is necessary you use it for generating of all the IDs, otherwise it won't work of course.

Complete demo, where you can see I set font to 5 labels and each of them is set correctly follows.
Warning: The previous code in this thread used old way of processing messages, I recommend to adapt the callback technique ASAP. More info in article in ThinBASIC Journal #2 (http://www.thinbasic.com/community/showthread.php?9450-ThinBasic-Journal-Issue-2).



Uses "UI"

' -- ID numbers of controls
Begin Const
%bClose = controlID_GetUnique()
End Const

' -- Create dialog here
Function TBMain()
Local hDlg As DWord
Local count, cad_items, stepY As Long
Local ctlId As Long

cad_items = 5
stepY = 15


Dialog New Pixels, 0, "Test of font assignment",-1,-1, 250, cad_items * stepY + 40, _
%WS_POPUP Or %WS_VISIBLE Or %WS_CAPTION Or %WS_SYSMENU Or %WS_MINIMIZEBOX To hDlg

' -- Place controls here
Control Add Button, hDlg, %bClose, "Click to close", 5, 5, 100, 25

DWord hFont = Font_Create("Courier", 10)
Long firstLabel, lastLabel

For count = 1 To cad_items
' -- Creating id on the fly
ctlID = controlID_GetUnique()

Control Add Label, hDlg, ctlID, "Test text", 5, 35 + (count-1)*stepY, 100 , 15, %SS_LEFT
Control Send hDlg, ctlID, %WM_SETFONT, hFont, 0

If count = 1 Then firstLabel = ctlID
If count = cad_items Then lastLabel = ctlID
Next

Dialog Show Modal hDlg, Call cbDialog

End Function

' -- Callback for dialog
CallBack Function cbDialog()

' -- Test for messages
Select Case CBMSG

Case %WM_INITDIALOG
' -- Put code to be executed after dialog creation here

Case %WM_COMMAND
' -- You can handle controls here

Select Case CBCTL

Case %bClose
If CBCTLMSG = %BN_CLICKED Then
Dialog End CBHNDL
End If

End Select


Case %WM_CLOSE
' -- Put code to be executed before dialog end here

End Select

End Function

' -- ID generator
Function controlID_GetUnique() As Long
Static controlID_New As Long = %WM_USER

controlID_New += 1

Return controlID_New
End Function



Petr

TomC
26-02-2012, 19:48
Thanks Petr.

You were spot on in suspecting that the control Id's were getting duplicated (when I eventually tracked it down).

I also "confirmed" (unless I've missed something) that you can't use Symbol fonts. I eventually persuaded things to work by creating a duplicate font with the character code tables specified as "1252 Western ANSI". With the codes tables specified as "Symbol", it just defaulted to standard characters from somewhere or other - probably its default font.

Kind regards,

TomC