計算座標的程式 |
尚未結案
|
sun_chih_yen
一般會員 ![]() ![]() 發表:40 回覆:33 積分:13 註冊:2003-10-03 發送簡訊給我 |
以下這個是計算座標的程式碼
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 發送簡訊給我 |
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 發送簡訊給我 |
我整個程式碼是
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 發送簡訊給我 |
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), 這些字型只需要取一個字便可, 無須取多字的平均寬. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |