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

如何在Form上畫線(要能在所有物件的最上方)

尚未結案
shinjie
資深會員


發表:12
回覆:275
積分:287
註冊:2003-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-13 10:23:14 IP:203.73.xxx.xxx 未訂閱
請問各位大大,如何在Form上面畫線要能覆蓋所有的元件,如Edit、Panel、Memo...等可視元件,也就是要在Form的最上方。 畫線的程式 Canvas.MoveTo(X,Y); Canvas.LineTo(X,Y); ========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-13 11:47:33 IP:218.170.xxx.xxx 未訂閱
用tpaintbox來作,在她的onpaint事件去canvas畫線 把這個tpaintbox bringtofront
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-13 11:49:36 IP:218.170.xxx.xxx 未訂閱
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-13 12:04:06 IP:61.222.xxx.xxx 未訂閱
另一種觀點,直接在螢幕上作畫
procedure TForm1.Button1Click(Sender: TObject);
var
  Hwn : HDC;
begin
  Hwn := GetDC(0);
  Try
    Windows.MoveToEx(Hwn, Left   2, Top   2, nil);
    Windows.LineTo(Hwn,Left    100,Top   100);
  Finally
    ReleaseDC(0,Hwn);
  end;
end;
建議使用 hahalin 兄 的方式 不過透空部分要自行思量。 ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~
shinjie
資深會員


發表:12
回覆:275
積分:287
註冊:2003-03-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-13 14:43:26 IP:203.73.xxx.xxx 未訂閱
引言: 用tpaintbox來作,在她的onpaint事件去canvas畫線 把這個tpaintbox bringtofront
hahalin大大我已經把tpaintbox bringtofront,但是還是會被其他元件蓋掉。 ========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-13 15:16:37 IP:220.132.xxx.xxx 未訂閱
shinjie 你好: 你可以把其他的元件做SendToBack的動作嗎?
------
======================
昏睡~
不昏睡~
不由昏睡~
shinjie
資深會員


發表:12
回覆:275
積分:287
註冊:2003-03-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-13 15:22:37 IP:61.59.xxx.xxx 未訂閱
引言: shinjie 你好: 你可以把其他的元件做SendToBack的動作嗎?
我都做過了,是我測試的方式不對嗎,因為我怎麼用,PaintBox還是沒有辦法在最上方,會被Memo、Edit等蓋過去。 ========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-13 16:56:45 IP:61.222.xxx.xxx 未訂閱
忘記 PaintBox 不是 TWinControl 還以為是 .......... 非 TWinControl 所繼承物件,是不可能蓋掉為TWinControl 物件。 在 Delphi 4.0 是可以的。在 Delphi 5.0 以後版本都不行了。 若在 TwinControl 所繼承物件上畫。 需解決透空問題。 ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-13 18:20:36 IP:61.218.xxx.xxx 未訂閱
to shinjie: 用騙的行不行?提供一個爛招:在form上擺一個TPanel,設為visible,要畫線時,把form.canvis上的內容copy到TPanel.canvis上,然後把TPanel設為True,並且把TPanel帶到最上面(bringtofront),藉以蓋掉所有的可視元件,然後在TPanel上畫線....
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-05-13 21:38:43 IP:211.74.xxx.xxx 未訂閱
procedure WMPaint(var msg:TMessage);message WM_PAINT;
...
...
procedure TForm1.WMPaint(var msg:TMessage);
var
  dc:THandle;
  fCanvas:TCanvas;
begin
  dc:=GetWindowDC(Handle);
  fCanvas:=TCanvas.Create;
  With fCanvas do begin
    Handle:=dc;
    MoveTo(0,0);
    LineTo(200,200);
    Free;
  end;
  ReleaseDC(Handle,dc);
end;
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-05-14 00:28:07 IP:218.174.xxx.xxx 未訂閱
障眼法, 把form上的物件存成圖片 當你需要顯示線時 改為show圖片 還是你把需求講清楚一點 大家來腦力激盪吧
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-05-14 09:59:48 IP:219.86.xxx.xxx 未訂閱
同意 jest0024 兄的作法。    不知 jest0024 兄,有無發現。 原 MEMO 或 EDIT 內容會顯示空白。 主要是少了 inherited 
procedure TForm1.WMPaint(var msg:TMessage);
var
  dc:THandle;
  fCanvas:TCanvas;
begin
  inherited; 
  dc:=GetWindowDC(Handle
...
不過既使是這樣,在編輯時也會被清掉一些。 改善方式,可改由透過 Application.OnMessage if Msg.message=WM_PAINT then 處理。 ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~
shinjie
資深會員


發表:12
回覆:275
積分:287
註冊:2003-03-19

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-05-14 10:34:20 IP:203.73.xxx.xxx 未訂閱
謝謝各位大大的幫忙,已有好的解法了。 採用jest0024大大的方法,再加上wameng大大的inherited與Application.OnMessage,已經可以達到需求了。 我在WMPaint與Application.OnMessage都有寫jest0024的方法,這樣比較符合想要的結果,又不會蓋掉原本元件的內容。 因為jest0024大大的方法比較符合,所以分數就給jest0024大大了,也謝謝其他大大的幫忙。 wameng大大的Windows Paint 其實也可以達到我的需求,但我是想在Form上面畫線,額外感謝wameng大大。 ========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-05-14 11:39:23 IP:211.74.xxx.xxx 未訂閱
剛試過wameng兄的方法,但是點擊時還是會造成線的不見@@?!!    在WM_PAINT事件中,
不加入
 Inherited
而改加入
 UpdateWindow(Handle);
但卻造成非TWinControl不能顯示及EDIT輸入游標不在閃爍!!
發表人 - jest0024 於 2005/05/14 11:41:36
系統時間:2024-11-25 22:30:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!