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

canvas左上角的原點座標(0,0) 是否可行定義

尚未結案
isthatu
初階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-22 19:59:41 IP:211.20.xxx.xxx 未訂閱
請問各位對繪圖有經驗的朋友     canvas左上角的原點座標(0,0)     可否強制改變成我們定義的座標 EX:(150,0)    我想把整個繪出圖的座標系 往下shift    不是切齊top線出圖.....    抱歉 問的有點攏統 因為我對繪圖完全沒概念    但接到的程式 就是要把報表由a3橫式改直式a4    btw    如果沒辦法如此定義 可否提供方向    是這樣我有個地籍圖線呈現在畫面上 改成直式後 在preview時    因為在paintbox 原本在右側文字 需改到上方 結果整個圖變成如圖例這樣    我想把繪製出來的圖整個座標系 往下拉第二個圖框裡面 BUT就是試不出來          發表人 - src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=19420098&CC=434322"> 發表人 - isthatu 於 2004/12/22 20:14:45
------
BCDEFHIJKLMNOPQRSTUVWXZ
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-22 20:42:14 IP:61.62.xxx.xxx 未訂閱
試試
SetViewportOrgEx
The SetViewportOrgEx function specifies which device point maps to the window origin (0,0).     BOOL SetViewportOrgEx(
  HDC hdc,        // handle to device context
  int X,          // new x-coordinate of viewport origin
  int Y,          // new y-coordinate of viewport origin
  LPPOINT lpPoint // original viewport origin
);    Parameters
hdc : Handle to the device context. 
X : Specifies the x-coordinate, in device units, of the new viewport origin. 
Y : Specifies the y-coordinate, in device units, of the new viewport origin. 
lpPoint : Pointer to a POINT structure that receives the previous   viewport origin, in device coordinates. If lpPoint is NULL, this   parameter is not used.     Example: 
//map the logical point (0,0) to the device point (xViewOrg, yViewOrg)
SetViewportOrgEx ( hdc, xViewOrg, yViewOrg, NULL)    
elvis1000
一般會員


發表:6
回覆:50
積分:16
註冊:2004-12-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-23 01:08:37 IP:220.134.xxx.xxx 未訂閱
你可以把PAINTBOX放到SCROLLBOX上,PAINTBOX的ALIGN設為alNone,PAINTBOX再大都沒問題! ----------------------- God bless you! I am Dark_Angel.
------
-----------------------
God bless you!
I am Dark_Angel.
isthatu
初階會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-23 10:47:21 IP:211.20.xxx.xxx 未訂閱
引言: 試試
SetViewportOrgEx
The SetViewportOrgEx function specifies which device point maps to the window origin (0,0).     Example: 
//map the logical point (0,0) to the device point (xViewOrg, yViewOrg)
SetViewportOrgEx ( hdc, xViewOrg, yViewOrg, NULL)    
謝謝! 不過我試不太出來 SetViewportOrgEx ( hdc, xViewOrg, yViewOrg, NULL) 我想把previewform上面 paintbox的canvas原點改成(150,0) 不曉的該怎麼去做 尤其參數HDC hdc, // handle to device context 是個 integer型態 不曉得該給啥麼 我試過 SetViewportOrgEx ( paintbox.canvas1, 150, 0, nil) 會顯示paintbox.canvas1 Tcanvas與integer型態不符 如果說隨便給個integer compile 可以過 EX: SetViewportOrgEx ( 1, 150, 0, nil) 但我不曉得 1對這fucntion到底在定義啥 同理下2,3,4....也一樣!
------
BCDEFHIJKLMNOPQRSTUVWXZ
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-23 11:13:00 IP:211.20.xxx.xxx 未訂閱
HDC 傳入 Paintbox.Canvas.Handle 請參閱 TCanvas.Handle 的 online help 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
isthatu
初階會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-23 12:46:28 IP:211.20.xxx.xxx 未訂閱
引言: HDC 傳入 Paintbox.Canvas.Handle 請參閱 TCanvas.Handle 的 online help 加油喔,喵~
謝謝 不過好像無法達到我預期的 如圖例 我要把線段A 重新定意原點座標 再畫一次到線條粗的位置 結果試了 (線段C) SetViewPortorgEx(PaintBox1.Canvas.Handle,0,100,nil); paintBox1.Canvas.MoveTo (0,0); PaintBox1.Canvas.LineTo (100,100); (線段B) SetViewPortorgEx(PaintBox1.Canvas.Handle,100,100,nil); paintBox1.Canvas.MoveTo (0,0); PaintBox1.Canvas.LineTo (100,100); 就時無法把整個Y軸往下SHIFT 100 ----------------------------------------------------- (A) procedure TForm1.Button1Click(Sender: TObject); var i :integer; begin paintBox1.Canvas.MoveTo (0,0); PaintBox1.Canvas.LineTo (0,500); for i:=0 to 50 do begin paintBox1.Canvas.MoveTo (0,i*10); PaintBox1.Canvas.LineTo (100,i*10); end; paintBox1.Canvas.MoveTo (0,0); PaintBox1.Canvas.LineTo (100,100); end; (C) procedure TForm1.Button2Click(Sender: TObject); begin SetViewPortorgEx(PaintBox1.Canvas.Handle,100,100,nil); paintBox1.Canvas.MoveTo (0,0); PaintBox1.Canvas.LineTo (100,100); end; (B) procedure TForm1.Button3Click(Sender: TObject); begin SetViewPortorgEx(PaintBox1.Canvas.Handle,0,100,nil); paintBox1.Canvas.MoveTo (0,0); PaintBox1.Canvas.LineTo (100,100); end; 發表人 - isthatu 於 2004/12/23 12:51:39
------
BCDEFHIJKLMNOPQRSTUVWXZ
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-23 14:03:04 IP:211.20.xxx.xxx 未訂閱
試試看,用以下程式
procedure TForm1.Button1Click(Sender: TObject);
begin
  OffsetViewportOrgEx(PaintBox1.Canvas.Handle, 0, 100, nil);
  PaintBox1.Canvas.MoveTo(0,0);
  PaintBox1.Canvas.LineTo(100,100);
end;
加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
isthatu
初階會員


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-23 19:05:29 IP:211.20.xxx.xxx 未訂閱
引言: 試試看,用以下程式
procedure TForm1.Button1Click(Sender: TObject);
begin
  OffsetViewportOrgEx(PaintBox1.Canvas.Handle, 0, 100, nil);
  PaintBox1.Canvas.MoveTo(0,0);
  PaintBox1.Canvas.LineTo(100,100);
end;
加油喔,喵~
謝謝 用你的提供方法確實 可以把座標往下移 不過 這張報表好像沒有我想像的簡單 整個地圖的原始座標點 經計算方式 再轉到preview螢幕上 不單只改變原點座標 往下shift就好....總之 是個很麻煩的東西 不過 還是謝謝各位高手回答 3Q
------
BCDEFHIJKLMNOPQRSTUVWXZ
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-24 10:28:25 IP:211.20.xxx.xxx 未訂閱
建議研究一下 GDI 中與座標系相關的幾個 API 從 Delphi 內附的說明文件中,打開 "Win32 Developer's References" 用 "Coordinate Space and Transformation Functions" 關鍵字搜尋 例如:如果要縮放座標系的話,可以用 ScaleViewportExtEx(hdc, Xnum, Xdenom, Ynum, Ydenom, nil); 就可以把 X 軸 * Xnum / Xdenom,Y 軸 * Ynum / Ydenom 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
系統時間:2024-06-02 16:41:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!