Characters in LCL always working.
In Castle Game Engine "TTextureFont.Create(ApplicationData('msyh.ttc'), 15, False, Characters);" not working.
"TTextureFont.Create(TextureFont_msyh_24());" is right, but seems no antialiasing.
Looking at the code and screen, you confused which label is which:)
* The RIGHT label is actually LabelA. It has no antialiasing, because you explicitly turn off anti-aliasing --- it is the 3rd boolean parameter to TTextureFont.Create. You pass there "False" which means "no antialiasing". Also, the local characters work there. If you change 3rd parameter to true, you will have local characters + with antialiasing, all working

* The left label is LabelB. There, the local characters are missing. To tell what's wrong, I would have to see how do you generate TextureFont_msyh_24. If you use texturefont2pascal with correct --sample-text parameter it should work. Remember that the shell script where you do it must correctly understand your string as UTF-8 too, otherwise our code will not see the original UTF-8 codes. I know that bash on Linux works fine for this.
BTW only when I click the CastleControl1, the OnTimer will effect. Why?
You mean that OnTimer sometimes does not work? That is an unfortunate problem of LCL that we really cannot avoid. See castle_game_engine/src/components/castlecontrol.pas , at TCastleApplicationIdle.ApplicationIdle , comment "With Done := true..." for explanation. This is a wontfix, until LCL provides a better API to control this.
I advice using our own OnUpdate methods (like TCastleControl.OnUpdate) for continous work. Do perform something every X miliseconds, just measure the time passed (in TCastleControl.OnUpdate you have the amount of seconds passed since last TCastleControl.OnUpdate, in CastleControl1.Fps.UpdateSecondsPassed). This way you can easily do your own timed events, without the need for LCL OnTimer.