怎麼知道有沒有裝某一套字型? |
|
lcsboy
版主 ![]() ![]() ![]() ![]() ![]() 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
|
ddy
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
procedure TForm1.Button1Click(Sender: TObject); var ts:TStrings; i:Integer; flag:Boolean; begin ts:=TStringList.Create; ts:=Screen.Fonts; for i:=0 to ts.Count-1 do begin if ts.Strings[i]= '細明體' then begin flag:=True; Break; end; end; if not flag then ShowMessage('系統不存在細明體'); end;呵呵…Sorry BCB 不熟…用Delphi 表示應該也差不了多少吧^^ 噓~~~~~~沉思中… 發表人 - ddy 於 2002/08/01 23:06:38 |
lcsboy
版主 ![]() ![]() ![]() ![]() ![]() 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
居然忘了Screen, 在Application建好時就可以用了, 哎!
幫你翻成BCB, 我是Delphi不會~~~噓
void __fastcall TForm1::Button1Click(TObject *Sender)
{
bool Flag=false;
TStringList *ts=new TStringList;
for (int i=0; i
|
lcsboy
版主 ![]() ![]() ![]() ![]() ![]() 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
不過, 我已經Try出用API呼叫的方式 ^^, 可以問一個字型也可以抓出全部的,
更可以知道是不是True Type字, 畢竟是API嘛, 而且我是從BCB的範例偷出來的
想玩的人請跟著我這樣作囉 1. New一個Application
2. 放一個ComboBox, 名字叫FontList
3. 放一個Edit, 名字叫Edit1 (只是方便, 要用Static隨便你)
4. 我們先玩Unit.cpp 1)在 TForm1 *Form1; 前, 貼上
int __stdcall EnumFontsProc(TLogFontA &LogFont, TTextMetricA &/*TextMetric*/,
int FontType, Pointer Data)
{
TCharsetObject *FontCharset;
FontCharset = new TCharsetObject((int)LogFont.lfCharSet);
String Getft;
// Getft=IntToStr(FontType); //想知道是不是True Type字型, 就不要點掉這一行
((TStrings *)Data)->AddObject(Getft (AnsiString)LogFont.lfFaceName, FontCharset);
return 1;
} 2)在OnFormShow裡, 貼上
HDC hDC=GetDC(0);
void *AllFont=(void *)FontList->Items;
TStringList *AA=new TStringList;
void *SingleFont=(void *)AA; //詢問所有字型, 請傳NULL
EnumFonts(hDC, NULL, (FONTENUMPROC) EnumFontsProc, (long) AllFont);
//詢問一個字型, 請傳字型名稱, 可忽略大小寫
EnumFonts(hDC, "fixedsys", (FONTENUMPROC) EnumFontsProc, (long) SingleFont); ReleaseDC(0, hDC);
FontList->Sorted=true;
if (AA->Count>0) //如果有找到會大於0
Edit1->Text=AA->Strings[0];
delete AA; 3)在這個Unit1.cpp的最後面, 貼上
__fastcall TCharsetObject::TCharsetObject(int FCharset)
: TObject()
{
Charset = FCharset;
} 5. 搞定Unit1.cpp後, 現在來玩Unit1.hpp
請在 extern PACKAGE TForm1 *Form1; 前 貼上
class TCharsetObject : public TObject
{
public:
int Charset;
__fastcall TCharsetObject(int FCharset);
}; 6.按Run ^_^ 7.解說
在你call EnumFonts這個API時, 會去call EnumFontsProc
(所以EnumFontsProc是個callback function) 如果你想知道每個字型是不是True Type字型, 就把EnumFonts裡, 我remark
掉的地方, 照我的方式拿掉就行囉 好不好玩? 不好玩別打我 ^O^
|
lcsboy
版主 ![]() ![]() ![]() ![]() ![]() 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
Source Code:Unit1.cpp //--------------------------------------------------------------------------- #include
|
lcsboy
版主 ![]() ![]() ![]() ![]() ![]() 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
Source Code:Unit1.hpp #ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include
|
lcsboy
版主 ![]() ![]() ![]() ![]() ![]() 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
|
lcsboy
版主 ![]() ![]() ![]() ![]() ![]() 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
|
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
|
lcsboy
版主 ![]() ![]() ![]() ![]() ![]() 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
|
CrazyHunter
一般會員 ![]() ![]() 發表:1 回覆:1 積分:0 註冊:2007-01-24 發送簡訊給我 |
|
syntax
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |