在Panel上绘图的实现
???? 近期制作了FDS的一個(gè)建模工具,由于知識(shí)有限,做出的效果是2D的。昨天上課的時(shí)候看老師畫一個(gè)長(zhǎng)方體,突然想到,為什么不給普通的2D圖形加畫上幾條直線,就能實(shí)現(xiàn)2D圖形的3D視覺(jué)效果呢?于是回來(lái)馬上做了嘗試,果然,效果很好,非常滿意。但是把測(cè)試程序代碼移植到FDS建模工具上的時(shí)候出現(xiàn)問(wèn)題了:Panel沒(méi)有Canvas屬性,也不能說(shuō)沒(méi)有,實(shí)際上在TPanel的實(shí)現(xiàn)源碼里有Canvas屬性,不過(guò)是Protected不允許外部訪問(wèn)。怎么辦?簡(jiǎn)單思考了一下,有這么幾個(gè)方向:
一、把Panel設(shè)置成透明的,在Form的Canvas上繪畫圖形
二、在Panel里面加一個(gè)有Canvas屬性的組件,然后在那上面繪圖
三、想辦法在Panel本身上實(shí)現(xiàn)畫圖的方法
通過(guò)查資料,改源程序代碼,發(fā)現(xiàn)方案一,畫出的圖形總是被Panel本身遮擋(這是由于我程序本身的需要,Panel里面也要套一層Panel),沒(méi)有找到好的解決辦法。
方案二:在Panel里面加了一個(gè)Image組件,但引發(fā)了更多問(wèn)題:由于組件是動(dòng)態(tài)生成了,產(chǎn)生了比如如何確定在哪個(gè)組件添加的Image,另外Image擋住了Panel的事件響應(yīng)。總之也是沒(méi)有很好的解決。
走了很多很多彎路后才最后走到第三步。最后在臺(tái)灣的一個(gè)Delphi論壇上找到了類似的問(wèn)題:如何在Panel組件上定點(diǎn)寫字http://delphi.ktop.com.tw/board.php?cid=168&fid=921&tid=70988源碼是C++的,我以前學(xué)過(guò)一點(diǎn)C++就根據(jù)自己的理解轉(zhuǎn)換成了Delphi的,可能有不對(duì)的地方,但沒(méi)想到一運(yùn)行居然成功了!
uses Math;procedure TForm1.pnl1Click(Sender: TObject); var Panel:TPanel; PanelCanvas:TControlCanvas; beginPanelCanvas:=TControlCanvas.Create;PanelCanvas.Control:=pnl5;Panel:=sender as TPanel;with PanelCanvas dobeginpen.Color:=clGreen;MoveTo(Panel.Left,Panel.Top);LineTo(Panel.left+round(Panel.Height/sqr(2)),Panel.top-round(Panel.Height/sqr(2)));LineTo(Panel.left+Panel.Width+round(Panel.Height/sqr(2)),Panel.top-round(Panel.Height/sqr(2)));LineTo(Panel.left+Panel.Width,Panel.top);MoveTo(Panel.Left+Panel.Width,Panel.Top+Panel.Height);LineTo(Panel.left+Panel.Width+round(Panel.Height/sqr(2)),Panel.top+Panel.Height-round(Panel.Height/sqr(2)));LineTo(Panel.left+Panel.Width+round(Panel.Height/sqr(2)),Panel.top-round(Panel.Height/sqr(2)));end;PanelCanvas.Free; end;?
成功的關(guān)鍵在TControlCanvas的使用,TControlCanvas的Control屬性使得Panel的Canvas屬性可以被訪問(wèn)使用。
看看TControlCanvas的Control屬性說(shuō)明:Specifies the control associated with the control canvas object.
轉(zhuǎn)載于:https://www.cnblogs.com/delphi7456/archive/2010/11/17/1880115.html
總結(jié)
以上是生活随笔為你收集整理的在Panel上绘图的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Sicily 1817 校歌手大奖赛
- 下一篇: 你若安好,便是晴天。