全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1935
推到 Plurk!
推到 Facebook!

用TImage實作文字方塊

答題得分者是:RedSnow
meatfoot
一般會員


發表:2
回覆:2
積分:0
註冊:2005-04-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-11 19:43:11 IP:61.61.xxx.xxx 未訂閱
小弟現在在嘗試寫一個畫圖小程式 小弟以一class繼承TImage 欲實作出類似MS Word(or photoshop)能夠拖曳的文字方塊 在接收到使用者給予的字串後 用Canvas->TextOut來顯示字串 小弟遇到的疑問是 該如何做出像Word的文字方塊 能夠在滑鼠雙擊方塊後 能夠直接修改文字 尚請各位先進給予意見與指點 謝謝~~~~ p.s. 小弟現在是用一個TStringGrid來讓使用者輸入字串與選擇字型 當然這也產生另一個問題 就是字串無法分行..........
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-11 20:44:53 IP:218.19.xxx.xxx 未訂閱
meatfoot 您好:    我前幾週正好寫了一支程式,裡邊也有用到類似的動作,我的做法如下: 1. 建立一個文字處理視窗,就是使用一個 Form 配合 Memo 問鍵來做輸入文字的動作,這樣子就可以有多行文字。 2. 產生文字圖像 (文字框) 時,要記錄下對應該圖像的原有文字內容,並且設定圖像的 OnMouseDown, OnMouseMove, OnMouseUp....等事件,以便處理拖曳文字框調整位置和其它的相關動作。 3. 修改文字框內容時,再次叫出第 1 項所述的那個文字輸入視窗,將對應該文字框的原有文字內容導入供修改,修改文字完畢後,重新繪製文字框。 另設一個 Form 來處理文字輸入及修改動作的好處是 - 可以在該 Form 上放置字型種類、大小、顏色....等的選擇與設定項目。 如果您要做到類似 MS Word 那種文字框的效果,那麼您可以將我上述作法中的那個 Form 略過,然後在建立文字框或是編修文字框時,將 Memo 物件放在要處理的位置,再設定 Visible 屬性為 true 即可 (文字部分處理完畢後,再將 Visible 設為 false),不過這麼一來,您就得另外找地方設置處理文字時的字型、大小、顏色....等選擇項目了。 您參考一下吧,若有不清楚的地方,我們再來交換意見。 發表人 - RedSnow 於 2005/04/11 20:50:55
meatfoot
一般會員


發表:2
回覆:2
積分:0
註冊:2005-04-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-12 00:46:55 IP:211.74.xxx.xxx 未訂閱
ReadSnow兄您好   先謝謝您熱心的幫忙,然小弟仍有部分不解.   第一個使用另外一個Form的方法小弟能夠了解,但是第二個方法詳細是指怎樣,小弟 就有點不清楚了.   下圖是小弟自OpenOffice擷取出的圖,是在雙擊方塊後所成之效果,也正小弟希望達 成的目標,不知兄所言之另一個方法是不是就能做到這樣? 再次叨擾您,尚請見諒~~
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-12 02:12:20 IP:219.137.xxx.xxx 未訂閱
meatfoot 您好:    當您將 Memo 物件的屬性設為:Ctl3D = false,而且 ScrollBars = ssNone、BorderStyle = bsSingle 之後,Memo 物件的外觀 "大致上" 看起來就像您貼上來的圖一樣,只是沒有調整大小的那八個小方塊。    如果您想做到與 MS Word 或是 OpenOffice 那種方式完全一樣的話,您就還得寫一段程式來處理 "調整 Memo 大小" 的動作,很巧的是 - 這個動作我也做過,但不是寫在前篇所講的那支程式裡,而是另外的一支程式,當時是因為看到本站上有人討論到 "Runtime 調整物件大小和位置" 的話題,而自己也對該話題產生了一些興趣,所以動手做了些測試。    我自己寫的方式是使用八個 Panel 物件來做 DragSpot,然後透過 OnMouseDown, OnMouseMove, OnMouseUp 這三個事件來處理 "調整物件大小及位置" 的動作,前述事件除了被調整物件本身要設定之外,另外還要在那八個 Panel 物件也設定,調整物件位置是由物件本身的事件來完成,調整物件大小則是由那八個 Panel 物件的事件來完成。    另外您也可以參考一下站上的一些相關討論:    http://delphi.ktop.com.tw/topic.php?topic_id=25473 http://delphi.ktop.com.tw/topic.php?topic_id=31256 http://delphi.ktop.com.tw/topic.php?topic_id=31513 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=31557 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=63002 http://delphi.ktop.com.tw/topic.php?topic_id=32021
meatfoot
一般會員


發表:2
回覆:2
積分:0
註冊:2005-04-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-12 17:28:42 IP:61.61.xxx.xxx 未訂閱
ReadSnow兄您好     小弟大概了解您的意思了,小弟現在是利用OnMouseXXX事件來處理縮放,    而至於輸入部分則還沒完成,但是已經有初步想法了,謝謝您的回答~~     順道一提,小弟在實作縮放時,一直苦為畫出的東西有問題,現象是在產    生繼承自TImage的物件後,雖能夠處理縮放的事件,但在重繪字串時卻發現    會有方塊被截的的現象,後來找到該是Canvas->ClipRect所限制.然    ClipRect為一readonly屬性,小弟苦於無法直接變動,最後才試出以    Picture->Bitmap->Width & Height可以間接改變ClipRect,才算解決了這    個問題.(由於小弟時間不夠,加上object-pascal不熟,雖想自    vcl source裡trace真正的原因已是有點力不從心了)   
系統時間:2024-05-12 2:22:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!