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

計算座標的程式

尚未結案
sun_chih_yen
一般會員


發表:40
回覆:33
積分:13
註冊:2003-10-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-08 21:27:10 IP:211.74.xxx.xxx 未訂閱
以下這個是計算座標的程式碼 var i:integer; buffer:array[0..51] of char; //為什麼要用陣列呢??? begin for i:=0 to 25 do buffer[i]:=chr(I ORD('A')); FOR I:=0 TO 25 DO BUFFER[I 26]:=CHR(I ORD('a')); GETTEXTEXTENTPOINT(CANVAS.HANDLE,BUFFER,52,TSIZE(RESULT)); //這一句和下一句是在說什麼 RESULT.X:=RESULT.X DIV 52; END;
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-09 11:18:34 IP:218.32.xxx.xxx 未訂閱
sun_chih_yen 你好:    看起來, 這是計算 52 個英文字母(大寫+小寫)的平均單一字母的寬與高.    
引言: GETTEXTEXTENTPOINT(CANVAS.HANDLE,BUFFER,52,TSIZE(RESULT)); //這一句和下一句是在說什麼 RESULT.X:=RESULT.X DIV 52; END;
GETTEXTEXTENTPOINT 是 Windows API 函數, 你可在 Delphi -> Help -> Windows SDK 中, 找到該說明, 是取出在 Form 上, 寫出52個字母, 的總寬度與高度, 然後將總寬度取平均值.
sun_chih_yen
一般會員


發表:40
回覆:33
積分:13
註冊:2003-10-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-09 13:37:44 IP:211.74.xxx.xxx 未訂閱
我整個程式碼是 function sss(canvas:tcanvas):tpoint; var i:integer; buffer:array[0..51] of char; begin for i:=0 to 25 do buffer[i]:=chr(I ORD('A')); FOR I:=0 TO 25 DO BUFFER[I 26]:=CHR(I ORD('a')); GETTEXTEXTENTPOINT(CANVAS.HANDLE,BUFFER,52,TSIZE(RESULT)); RESULT.X:=RESULT.X DIV 52; END; procedure TForm1.Button1Click(Sender: TObject); VAR FORM:TFORM; ddd:tpoint; begin FORM:=TFORM.CREATE(APPLICATION); WITH FORM DO BEGIN position:=poscreencenter; ddd:=sss(canvas); clientwidth:=muldiv(180,ddd.x,4); clientheight:=muldiv(60,ddd.y,8); SHOW; 這些程式碼我都搞不太懂我只知道是要建立一個form元件然後要設立座標而為什麼要用計算 52 個英文字母(大寫 小寫)的平均單一字母的寬與高!!我不太清楚那麼我可不用52個英文字母嗎那麼我應要怎麼做???而為什麼也要用陣列呢可以不用陣列做出來嗎???謝謝~~~~~
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-10 11:07:02 IP:218.163.xxx.xxx 未訂閱
sun_chih_yen 你好:    當然可以不用 array of char, 戲法是隨人變的. 當然也可以不用英文字母(以下 Remark 的部分). 我只能幫忙看程式做了什麼, 至於"為何"要這樣做...小弟也無法知曉.
function sss(canvas:tcanvas):tpoint;
var
  i:integer;
  buffer:pchar;
  s : string;
begin
  s := '';
  for i:=0 to 25 do
    s := s   chr(I ORD('A'));
  FOR I:=0 TO 25 DO
    s := s   CHR(I ORD('a'));
  buffer := pchar(s);
  GETTEXTEXTENTPOINT(CANVAS.HANDLE,BUFFER,52,TSIZE(RESULT));
  RESULT.X:=RESULT.X DIV 52;
// 用中文字元
//  s := '不知道要做什麼';
//  buffer := pchar(s);
//  GETTEXTEXTENTPOINT(CANVAS.HANDLE,BUFFER,7,TSIZE(RESULT));
//  RESULT.X:=RESULT.X DIV 7;
END;    procedure TForm1.Button1Click(Sender: TObject);
VAR
  FORM:TFORM;
  ddd:tpoint;
begin
  FORM:=TFORM.CREATE(APPLICATION);
  WITH FORM DO
  BEGIN
    position:=poscreencenter; // 將該 Form 置放於螢幕中心點
    ddd:=sss(canvas);
    clientwidth:=round(180*ddd.x/4); // 依據單一字元的寬度設定 From 的工作區域寬度
    clientheight:=round(60*ddd.y/8); // 依據單一字元的高度設定 From 的工作區域高度
    SHOW;
  END;
end;
註: 有些字型(如"細明體"/"FixedSys"...)是每個字都是相同寬/高的(FixedPitch), 這些字型只需要取一個字便可, 無須取多字的平均寬.
系統時間:2024-05-19 11:39:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!