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

有關TMemo中加入一個TPaintBox在Repaint時會閃爍..

答題得分者是:lcsboy
okiss
一般會員


發表:11
回覆:55
積分:13
註冊:2002-11-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-04 16:44:16 IP:163.28.xxx.xxx 未訂閱
我在TMemo上new TPaintBox...Align=alClient.. 在TPaintBox的Paint中作我想在Memo上顯示的顏色.. 但是在run時..只要滑鼠或鍵盤作sel或keyin..就會導致我畫的東西不見..因為Memo它repaint.. 所以我攔截Memo的WM_PAINT事件..在裡面加上PaintBox->Repaint();.. 嗚嗚....結果卻產生了一個超級閃爍的Memo...@@... 這該怎ㄇ解決...??@@..
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-04 23:48:10 IP:61.228.xxx.xxx 未訂閱
引言: 我在TMemo上new TPaintBox...Align=alClient.. 在TPaintBox的Paint中作我想在Memo上顯示的顏色.. 但是在run時..只要滑鼠或鍵盤作sel或keyin..就會導致我畫的東西不見..因為Memo它repaint.. 所以我攔截Memo的WM_PAINT事件..在裡面加上PaintBox->Repaint();.. 嗚嗚....結果卻產生了一個超級閃爍的Memo...@@... 這該怎ㄇ解決...??@@..
可以請教為什麼要這樣做嗎, 這很奇怪說 Jesse Chan
------
Jesse Chan
小貓
一般會員


發表:14
回覆:23
積分:12
註冊:2002-07-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-05 09:19:38 IP:211.74.xxx.xxx 未訂閱
可否說說你這麼做的目的為何?說不定有更好的解決方式.
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-05 10:15:01 IP:211.23.xxx.xxx 未訂閱
不知道這位仁兄是不是只想在TMemo上貼上一張自己要的圖, 可能是有顏色的文字..etc.    不管如何! 不知這位仁兄如何去處理這個WM_PAINT Message?    我的小經驗是...如果你是繼承物件然後去override OnPaint procedure! 好像你塞了什麼code之後, 最後還會去執行爸爸的OnPaint 如果你是攔劫Message的方式, 請先執行爸爸的WM_PAINT再來作自己要處理的事...如PaintBox->Repaint()    不然! 因為爸爸的WM_PAINT還沒執行完, 你又去run, PaintBox->Repaint() 因為你可能把PaintBox貼在TMemo上, PaintBox重繪後, 又觸發TMemo的WM_PAINT , 由此, 不斷的觸發TMemo的WM_PAINT, 而你又不讓爸爸的WM_PAINT先處理, TMemo就在那裡因為真正要處理的沒處理到, 就一直想要去處理原來的WM_PAINT要作的事, 一直不斷的作, 結果還是處理不到.....無窮循環    我的建議是:  1. 用攔劫Message的方式, 攔TMemo的WM_PAINT 2. 先執行爸爸的WM_PAINT 3. PainBox->Repaint()改成用PaintBox->Invalidate()
okiss
一般會員


發表:11
回覆:55
積分:13
註冊:2002-11-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-05 11:01:05 IP:163.28.xxx.xxx 未訂閱
引言: 我在TMemo上new TPaintBox...Align=alClient.. 在TPaintBox的Paint中作我想在Memo上顯示的顏色.. 但是在run時..只要滑鼠或鍵盤作sel或keyin..就會導致我畫的東西不見..因為Memo它repaint.. 所以我攔截Memo的WM_PAINT事件..在裡面加上PaintBox->Repaint();.. 嗚嗚....結果卻產生了一個超級閃爍的Memo...@@... 這該怎ㄇ解決...??@@..
恩..就是..我要在Memo上作一個Canvas...可以讓整行的底色變色-->>主要功能 或是文字變色-->>次要功能..^^ 我要用寫的..不要用別人的元件..該怎麼做??
okiss
一般會員


發表:11
回覆:55
積分:13
註冊:2002-11-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-05 11:05:00 IP:163.28.xxx.xxx 未訂閱
反正就是像我之前說的.. 我要做一個與C Builder..coding區類似或一樣的元件.. 因為上次抓了SynEdit後還是不會用..@@. 所以還是想自己寫算了.. 現在只差Memo區了..^^.. 麻煩各位大大幫幫忙囉..^^
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-05 13:32:35 IP:203.75.xxx.xxx 未訂閱
算你狠, 我查了一下, TMemo 是從 TWidgetControl 生出來的, 所以應該是有 Canvas, 我認為您不該去 new 一個 paintbox, 而是要用原有 Canvas 的 FillRect 去做才對, 但是被蓋掉的字可能要再以 Text... 的方法重畫, 我光是用想的就覺得很複雜, 所以沒有去實作, 不知道這樣對您有沒有幫助 Jesse Chan
------
Jesse Chan
okiss
一般會員


發表:11
回覆:55
積分:13
註冊:2002-11-27

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-12-05 14:00:41 IP:163.28.xxx.xxx 未訂閱
引言: 我查了一下, TMemo 是從 TWidgetControl 生出來的, 所以應該是有 Canvas, 我認為您不該去 new 一個 paintbox, 而是要用原有 Canvas 的 FillRect 去做才對, 但是被蓋掉的字可能要再以 Text... 的方法重畫, 我光是用想的就覺得很複雜, 所以沒有去實作, 不知道這樣對您有沒有幫助
謝謝你..^^.. 你打的那個TWidgetControl好像在C Builder中我查不到耶..@@.. 有沒有比較方便的方法呀??
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-12-05 15:15:07 IP:211.23.xxx.xxx 未訂閱
oksis: 1. 我只能說, 我敬愛你........因為這部份後來我不敢再去作了....因為小弟 覺得太難了, 所以投降了    2. 既然你有一個有Canvas的元件在畫面上(如TBitmap, TPaintBox..etc) 我之前的想法是.....乾脆不要用TMemo, 因為你要自己控制的話, 幹嘛還要 他!? 只要自己在TPaintBox畫出游標, 和文字的前景和背景顏色. 然後自己 控制KeyDown, ScrollUP/Down, 相信, 就是一個可以變色的同類TMemo    3. 加油! 我精神上支持你
okiss
一般會員


發表:11
回覆:55
積分:13
註冊:2002-11-27

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-12-09 23:13:52 IP:61.223.xxx.xxx 未訂閱
現在只差抓Memo的ScrollBar的訊息了.. 要怎樣抓到在TMemo裡的ScrollBar變動的訊息.. 因為我用CaretPos的話...在按Shift Home或Shift Up(或Left)時.. 它的CaretPos是存最右下的點..而不是SelStart.. 但如果以SelStart為Focus的話.. 卻又在Shift End或Shift Down(或Right)時.會出錯..@@ 我用GETSCROLL試過..好像抓鼻到...還是我的寫法有錯ㄇ??? 舅舅我ㄅ...@@^^ 感恩喔...^^
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-12-10 00:11:14 IP:61.221.xxx.xxx 未訂閱
引言: 現在只差抓Memo的ScrollBar的訊息了.. 要怎樣抓到在TMemo裡的ScrollBar變動的訊息..
okiss 你好: 試試攔截 WM_VSCROLL, WM_HSCROLL 這兩個 Message --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
okiss
一般會員


發表:11
回覆:55
積分:13
註冊:2002-11-27

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-12-10 01:26:47 IP:61.223.xxx.xxx 未訂閱
引言:
引言: 現在只差抓Memo的ScrollBar的訊息了.. 要怎樣抓到在TMemo裡的ScrollBar變動的訊息..
okiss 你好: 試試攔截 WM_VSCROLL, WM_HSCROLL 這兩個 Message -- >< face="Verdana, Arial, Helvetica"> 我有TRY過說..但是它不理我..@@.. 它只會抓當你打PageDn或PageUp等等的... 在一般的情形...像是用Enter去NewLine時的捲動.. 按Up,Down,Left,Right等等的捲動.. 它鼻會送這些的訊息說... 也就是說..不完全的攔截..@@
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-12-10 08:08:22 IP:210.58.xxx.xxx 未訂閱
又不是都攔不到! 只是部份攔到! 既然你都知道有那些動作會造成這些現象 就在攔WM_KEYDOWN自己處理掉吧! VCL不是你寫的, 所以有些動作你奈他何
系統時間:2024-11-24 9:28:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!