相关疑难解决方法(0)

如何在更改某些非文本字符的字体时使TRichEdit在Windows 7上的行为类似于写字板?

借助于Sertac Akyuz它,似乎直接原因与charset有关\bullet:在我的本地化Windows中,\bullet输入Alt(0149)总是得到输入\fcharset134,并且尝试通过改变其字体EM_SETCHARFORMAT总是失败(好吧,颜色,大小,样式确实可以改变但不是字体系列名称).

因此,最简单的解决方法是首先重置字符集,然后更改字体.

注意:应该使用RichEdit (版本> = 4.1)!

注意:RichEdit版本可以在MSDN的About Rich Edit Controls,Murray Sargent的MSDN Blog RichEdit版本RichEdit版本更新到7.0中找到.后面的页面提到RichEdit版本高于4.1.作为测试,我将使用Office 2010的RICHED20.DLL与应用程序一起复制到Windows 2000,一切都像一个魅力!

procedure TMainForm.ButtonFontClick(Sender: TObject);
var
  format: TCharFormat2;
begin
  if dlgFontCdxTxt.Execute then
  begin
    FillChar(format, sizeof(format), 0);
    format.cbSize:= Sizeof(format);
    format.dwMask:= CFM_CHARSET;
    format.bCharSet := 1; // or 0;
    redtTextBlock.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Integer(@format));

    FillChar(format, sizeof(format), 0);
    format.cbSize:= Sizeof(format);
    format.dwMask:= CFM_FACE;
    StrPLCopy(format.szFaceName, dlgFontCdxTxt.Font.Name, High(format.szFaceName));
    redtTextBlock.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Integer(@format));
  end;
  redtTextBlock.SetFocus;
end;
Run Code Online (Sandbox Code Playgroud)

==================================================

根据维基百科,WordPad …

windows delphi fonts wordpad trichedit

53
推荐指数
1
解决办法
6285
查看次数

使用EnumFontFamiliesEx函数枚举时字体太多

我正在尝试创建一个字体列表供用户选择.我这样做是通过使用该EnumFontFamiliesEx函数但不幸的是,返回的字体列表太长了.有许多额外的字体看起来轻浮,重复,用于不同的语言,或者不希望向用户显示.我的截图最能说明我试图过滤掉的垃圾.

我的调用代码EnumFontFamiliesEx如下所示:

LOGFONT lf;
memset(&lf, 0, sizeof(lf));
lf.lfCharSet = DEFAULT_CHARSET;
// screenDC is result of CreateCompatibleDC(NULL)
EnumFontFamiliesEx(screenDC, &lf, GetFontsCallback, NULL, 0);
Run Code Online (Sandbox Code Playgroud)

在按字母顺序排序并删除具有重复面部名称的字体后,生成的列表如下所示:

在此输入图像描述

正如您所看到的,ChooseFont字体常用对话框显示了一个非常合理的字体列表,这些字体用户友好且有意义.另一方面,我的代码显示了一长串额外字体:以"@"开头的字体(为什么?它们甚至用于什么?),3种额外的Arial字体变体,以及其他一些未知用途的字体,如Aheroni, Andalus,Angsana New,AngsanaUPC等.这太疯狂了.

如何过滤返回的字体列表EnumFontFamiliesEx,使其与对话框中显示的列表完全匹配ChooseFont

c c++ windows winapi fonts

25
推荐指数
2
解决办法
4465
查看次数

如何使用外部字体?

是否可以直接从Delphi中的资源使用字体以及如何使用?

我的第一步有问题.例如我不能在项目资源中包含Segoe UI Light字体,会发生异常.只有当文件的扩展名为'ttf'时才会出现异常.

如果上面写的不可能,那么如何在不单独部署字体(来自可执行文件)的情况下使用外部字体?

提前致谢!

delphi resources fonts delphi-2009

12
推荐指数
2
解决办法
1万
查看次数

使用Delphi查找系统字体

找到用户可用的所有系统字体的最佳方法是什么,以便它们可以显示在下拉选择框中?

我还想区分Unicode和非Unicode字体.

我正在使用完全支持Unicode的Delphi 2009,并且想要一个Delphi解决方案.

delphi unicode fonts delphi-2009

5
推荐指数
2
解决办法
3840
查看次数

如何从字体文件中获取字体名称?

我想枚举中的所有文件 C:\Windows\Fonts\

首先我FindFirst&FindNext用来获取所有文件

码:

Path := 'C:\Windows\Fonts';
  if FindFirst(Path + '\*', faNormal, FileRec) = 0 then
    repeat

      Memo1.Lines.Add(FileRec.Name);

    until FindNext(FileRec) <> 0;
  FindClose(FileRec);
Run Code Online (Sandbox Code Playgroud)

它得到一些像在Windows字体文件夹中tahoma.ttf显示的 名称Tahoma regular.

但是我怎么能这样呢?

第二我为什么不能通过C:\Windows\Fonts\shell 枚举文件

代码:

var
  psfDeskTop : IShellFolder;
  psfFont : IShellFolder;
  pidFont : PITEMIDLIST;
  pidChild : PITEMIDLIST;
  pidAbsolute : PItemIdList;
  FileInfo : SHFILEINFOW;
  pEnumList : IEnumIDList;
  celtFetched : ULONG;
begin
  OleCheck(SHGetDesktopFolder(psfDeskTop));
  //Font folder path
  OleCheck(SHGetSpecialFolderLocation(0, CSIDL_FONTS, pidFont));
  OleCheck(psfDeskTop.BindToObject(pidFont, nil, IID_IShellFolder, psfFont));
  OleCheck(psfFont.EnumObjects(0, SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN
    or …
Run Code Online (Sandbox Code Playgroud)

windows delphi fonts

2
推荐指数
1
解决办法
3979
查看次数

标签 统计

fonts ×5

delphi ×4

windows ×3

delphi-2009 ×2

c ×1

c++ ×1

resources ×1

trichedit ×1

unicode ×1

winapi ×1

wordpad ×1