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

canvas 預覽 與列印的問題

尚未結案
isthatu
初階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-11 18:48:15 IP:211.20.xxx.xxx 未訂閱
請問 我在paintbox.cancas 建了一個矩形區塊 同時用textout 放入相關文字的對應位置後 為何在最後列印的時候矩形大小及文字位置會跑掉? 我想請教一下 在螢幕解析度 與印表解析度 中間的轉換關係為何 因為是拿別家公司的報表來改 只不過是把橫式報表改成直式 程式裡相關螢幕解析度轉印表解析度的東西原本都寫好了 雖然我看的是一頭霧水 不過 我目前逮的不過是利用TEXTOUT把文字擺放位置做調整 多了一個矩形範圍框架而已 結果螢幕預覽正常 列印出來文字矩形就完全跑掉 唯報表下方原程式的矩形框內的圖文卻很正常的列印及顯示 是否我在設這個矩形框架 是還要做些啥麼設定 ????
------
BCDEFHIJKLMNOPQRSTUVWXZ
shieh2700
高階會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-11 23:02:20 IP:218.161.xxx.xxx 未訂閱
一個簡單範例, 在表單及印表機上分別劃出十公分的尺. 僅供參考.    
procedure TForm1.Button1Click(Sender: TObject);
var
  DPI:  TSize;
  i, x : integer;
begin
  //輸出至螢幕
  DPI.cx  := 96; //螢幕解析度(橫向)
  DPI.cy  := 96; //螢幕解析度(縱向)
  for i := 0 to 100 do begin
    x:=Round(i*DPI.cx/25.39998) 5;
    if i mod 10 = 0 then begin
      Canvas.Polyline([Point(x,10),Point(x,25)]);
      Canvas.TextOut(x 1,20,IntToStr(i div 10));
    end else if i mod 5 = 0 then
      Canvas.Polyline([Point(x,10),Point(x,20)])
    else
      Canvas.Polyline([Point(x,10),Point(x,15)]);
  end;      //輸出至印表機
  DPI.cx  := GetDeviceCaps( Printer.Handle, LOGPIXELSX );//印表機解析度(橫向)
  DPI.cy  := GetDeviceCaps( Printer.Handle, LOGPIXELSY );//印表機解析度(縱向)
  Printer.BeginDoc;
  for i := 0 to 100 do begin
    x:=Round(i*DPI.cx/25.39998) 5;
    if i mod 10 = 0 then begin
      Printer.Canvas.Polyline([Point(x,10),Point(x,25)]);
      Printer.Canvas.TextOut(x 1,20,IntToStr(i div 10));
    end else if i mod 5 = 0 then
      Printer.Canvas.Polyline([Point(x,10),Point(x,20)])
    else
      Printer.Canvas.Polyline([Point(x,10),Point(x,15)]);
  end;
  Printer.EndDoc;
end;
系統時間:2024-06-02 0:45:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!