線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1941
推到 Plurk!
推到 Facebook!

座標的轉換 canvas.textout 與解析度的差異在哪

尚未結案
isthatu
初階會員


發表:80
回覆:47
積分:25
註冊:2002-06-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-13 19:40:17 IP:211.20.xxx.xxx 未訂閱
請問螢幕畫布上的座標點 如何正卻轉換成報表的座標 即便是我們更動螢幕解析度 或印表機紙張大 在螢幕上輸出的文字間的相對位置 呈現在報表上都是一樣的 我現在遇到預覽OK 列印卻出現文字變小 整個文字的對應位置都跑掉了 假設 我們都已經抓到了 報表解析度 XDPM := GetDeviceCaps(Printer.Handle, LOGPIXELSX ); YDPM := GetDeviceCaps(Printer.Handle, LOGPIXELSY ); 及螢幕幾析度 XDPM1 := GetDeviceCaps(canvas.Handle, LOGPIXELSX ); YDPM1 := GetDeviceCaps(canvas.Handle, LOGPIXELSY ); 那麼在兩著間轉換過程中 paintbox.canvas.textout(x,y,str) = printer.canvas.textout(x,y,str) x y 座標該如何做處理 是否有特定的常數 例 (X * 100/XDPM ) 來讓螢幕預覽與鰾表列印不致發生 不相對應的現象 問的很模糊 因為實際做法我也不懂 只是我預覽跟報表的CANVAS 都是相同跑一段FUNCTION來畫一張表單 Draw(MyCanvas : TCanvas ; XDPM,YDPM:integer) 其中 MyCanvas 就是傳入 螢幕paintbox 跟printer 的TCanvas 而 XDPM,YDPM 是已經靠GetDeviceCaps來算縱橫向的解析度了 問題我在MyCanvas.textout(20.30,'abcde')位置 預覽跟實際報表就是不同 不曉得對繪圖座標比較熟的朋友能否指點迷津!!!
------
BCDEFHIJKLMNOPQRSTUVWXZ
shieh2700
高階會員


發表:0
回覆:127
積分:100
註冊:2002-06-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-13 23:30:23 IP:61.229.xxx.xxx 未訂閱
針對上述問題:      印表機位置 = 螢幕位置 / 螢幕解析度 * 印表機解析度    假若下列情況:      螢幕解析度 96*96 DPI   印表機解析度 1440*1440 DPI   若在螢幕上顯示位置為 x=20,y=30    則在印表機上位置則應為:       x = 20 / 96 * 1440 = 300   y = 30 / 96 * 1440 = 450    
var
  res : TSize;
begin
  res.cx := 20;
  res.cy := 30;
  res := PosConvert( Form1.Canvas.Handle, Printer.Handle, res );
  ShowMessage( IntToStr( res.cx )   ', '   IntToStr( res.cy ) );
end;    function PosConvert(sourceHDC, targetHDC: HDC; xy: TSize): TSize;
var
  sDPI, tDPI : TSize;
begin
  sDPI.cx := GetDeviceCaps( sourceHDC, LOGPIXELSX );
  sDPI.cy := GetDeviceCaps( sourceHDC, LOGPIXELSY );
  tDPI.cx := GetDeviceCaps( targetHDC, LOGPIXELSX );
  tDPI.cy := GetDeviceCaps( targetHDC, LOGPIXELSY );
  Result.cx := ROUND( xy.cx / sDPI.cx * tDPI.cx );
  Result.cy := ROUND( xy.cy / sDPI.cy * tDPI.cy );
end;    
系統時間:2024-06-20 19:58:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!