全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1586
推到 Plurk!
推到 Facebook!

如何顯示固定寬度的字串?

尚未結案
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-10 16:25:32 IP:61.56.xxx.xxx 未訂閱
請教各位先進:    我想要在 Canvas 中顯示一個指定的寬度字串, 下列程式中使用在固定寬度字型 (Fixed) 中沒有問題, 但選用調合字型 (TrueType 'i' 與 'w' 寬度不同) 時, 就無法依指定的寬度來顯示, 不知道有什麼方法可以讓調合字型顯示固定寬度, 謝謝.    
procedure TForm1.PaintBox1Paint(Sender: TObject);
var LogRec: TLOGFONT;
    OldFont, NewFont: HFONT;
begin
     with PaintBox1.Canvas do
     begin
          Brush.Style := bsClear;
          GetObject(Font.Handle, SizeOf(LogRec), @LogRec);
          with LogRec do
          begin
               lfOutPrecision := OUT_DEFAULT_PRECIS;
               lfEscapement   := 0;
               lfHeight       := 30;
               lfWidth        := 30;
               NewFont        := CreateFontIndirect(LogRec);
               OldFont        := SelectObject(Handle, NewFont);
               TextOut(x, y, 'i');
               NewFont        := SelectObject(Handle, OldFont);
               DeleteObject(NewFont);
          end;
          Rectangle(x, y, x   30, y   30);
     end;
end;
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-11 07:48:02 IP:61.219.xxx.xxx 未訂閱
那就是為什麼Fixed Font叫做Fixed Font 吧. 不是FixedFont 當然每個字寬度不一, 你只好一個個由TEXTMETRIC取得 可試試改 lfPitchAndFamily 設成FIXED_PITCH看看, 不過我記得好像用處也不大 不過你倒是可以用Canvas.TextWidth 簡單測出總長
aip999
初階會員


發表:10
回覆:63
積分:44
註冊:2002-03-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-13 19:06:57 IP:218.187.xxx.xxx 未訂閱
引言: 請教各位先進: 我想要在 Canvas 中顯示一個指定的寬度字串, 下列程式中使用在固定寬度字型 (Fixed) 中沒有問題, 但選用調合字型 (TrueType 'i' 與 'w' 寬度不同) 時, 就無法依指定的寬度來顯示, 不知道有什麼方法可以讓調合字型顯示固定寬度, 謝謝.
procedure TForm1.PaintBox1Paint(Sender: TObject);
var LogRec: TLOGFONT;
    OldFont, NewFont: HFONT;
begin
     with PaintBox1.Canvas do
     begin
          Brush.Style := bsClear;
          GetObject(Font.Handle, SizeOf(LogRec), @LogRec);
          with LogRec do
          begin
               lfOutPrecision := OUT_DEFAULT_PRECIS;
               lfEscapement   := 0;
               lfHeight       := 30;
               lfWidth        := 30;
               NewFont        := CreateFontIndirect(LogRec);
               OldFont        := SelectObject(Handle, NewFont);
               TextOut(x, y, 'i');
               NewFont        := SelectObject(Handle, OldFont);
               DeleteObject(NewFont);
          end;
          Rectangle(x, y, x   30, y   30);
     end;
end;
由於windows 有很多字型滿多字型寬高都不一樣 但也有寬高字型一樣的字型例如: Courier 你自己試看看吧
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-26 23:27:36 IP:61.70.xxx.xxx 未訂閱
我都用字型為[細明體]就可以了 try try see
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-26 23:27:51 IP:61.70.xxx.xxx 未訂閱
對不起多按了一次,可否刪除 發表人 - jeffreck 於 2004/02/26 23:30:06
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-27 02:25:56 IP:203.204.xxx.xxx 未訂閱
Main Chen 你好
procedure TForm1.PaintBox1Paint(Sender: TObject);
var LogRec: TLOGFONT;
    OldFont, NewFont: HFONT;
begin
     with PaintBox1.Canvas do
     begin
          Brush.Style := bsClear;
          GetObject(Font.Handle, SizeOf(LogRec), @LogRec);
          Font.Pitch := fpFixed ; //加入這行
          with LogRec do
          begin
               lfOutPrecision := OUT_DEFAULT_PRECIS;
               lfEscapement   := 0;
               lfHeight       := 30;
               lfWidth        := 30;
               NewFont        := CreateFontIndirect(LogRec);
               OldFont        := SelectObject(Handle, NewFont);
               TextOut(x, y, 'i');
               NewFont        := SelectObject(Handle, OldFont);
               DeleteObject(NewFont);
          end;
          Rectangle(x, y, x   30, y   30);
     end;
end;
看看可以嗎?
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-27 06:57:35 IP:203.204.xxx.xxx 未訂閱
感謝大家的回答, 我已使用 Path 功能達到這部份的功能了, 謝謝.
系統時間:2024-05-13 14:16:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!