代码之家  ›  专栏  ›  技术社区  ›  Mohammed Nasman

在delphi中使用scriptgetproperties

  •  0
  • Mohammed Nasman  · 技术社区  · 14 年前

    如何在Delphi中使用Uniscribe dll(usp10.dll)中的ScriptGetProperties API

    我在C++中找到了一个例子,但是我不知道如何翻译它,因为我不擅长C。

    const SCRIPT_PROPERTIES **g_ppScriptProperties;
    int g_iMaxScript;
    
    WCHAR *pwcInChars = L"Unicode string to itemize";
    int cInChars = wcslen(pwcInChars);
    const int cMaxItems = 20;
    SCRIPT_ITEM si[cMaxItems + 1];
    SCRIPT_ITEM *pItems = si;
    int cItems;
    
    ScriptGetProperties(&g_ppScriptProperties,
                        &g_iMaxScript);
    
    HRESULT hResult = ScriptItemize(pwcInChars,
                                    cInChars,
                                    cMaxItems,
                                    NULL,
                                    NULL,
                                    pItems,
                                    &cItems);
    if (hResult == 0) {
        for (int i=0; i<cItems; i++) {
            if (g_ppScriptProperties[pItems[i].a.eScript]->fComplex) {
    
                // Item [i] is complex script text
                // requiring glyph shaping.
    
            } else {
    
                // The text may be rendered legibly without using Uniscribe. 
                // However, Uniscribe may still be used as a means of accessing 
                // font typographic features. 
            }
        }
    } else {
        // Handle the error.
    }
    

    Delphi代码应符合Turbo Delphi 2006或更高版本。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Adam Markowitz    14 年前

    在开始使用库之前,需要将其头文件转换为.pas文件。见 Dr. Bob's header converter 作为起点。要转换的头应该只有结构、函数、枚举、简单类型等。如果有类声明、全局变量、宏等,则很可能需要有一个转换为Delphi的中间.h。

    祝你好运。