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

繪圖軟體的選擇元件功能

尚未結案
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-08 17:11:26 IP:61.220.xxx.xxx 未訂閱
如圖一所示.是用photoimpact做的.以一個長方形跟一個文字元件來舉例. 當我滑鼠點選文字時.此時文字會出現被選取到的八個小方框在周圍. 選擇長方形時也一樣.當點選其一的元件時.還可以做修改或內容資料設定等等. 目前還是指開啟一個新畫面.如果開啟很多畫面.很多畫面裡面又有很多元件.    問題1: 假設我畫面開好幾個.在每個畫面都有新增長方形或文字的元件. 如果我將畫面建立一個類別.長方形一個類別.文字一個.每元件各一個類別. 該用什麼方法去知道目前選擇哪個畫面的哪個元件?    問題2: 如果用指標去指向元件.那該怎麼指到正確的元件? 用動態增加指標方式嗎?那如果一直故意新增刪除那不是會有問題嗎?    問題3: 有前輩能提供簡單點的範例嗎?    圖一:
RedSnow
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-10 17:31:07 IP:59.115.xxx.xxx 未訂閱
pireer 您好:
引言:問題1: 假設我畫面開好幾個.在每個畫面都有新增長方形或文字的元件. 如果我將畫面建立一個類別.長方形一個類別.文字一個.每元件各一個類別. 該用什麼方法去知道目前選擇哪個畫面的哪個元件? 問題2: 如果用指標去指向元件.那該怎麼指到正確的元件? 用動態增加指標方式嗎?那如果一直故意新增刪除那不是會有問題嗎? 問題3: 有前輩能提供簡單點的範例嗎?
1. 您可以透過各個元件的 OnClick 或是 OnMouseDown、OnMouseUp 這樣的滑鼠事件來探知何者被圈選了? 2. 不是很瞭解您第二個問題的前半段是指甚麼?後半段所指的問題就要看程式的寫作是否嚴謹了?如果程式各個處理流程都考慮得很周詳,那麼動態的任意增刪元件應該不成問題的。 3. 您的需求並不是描述得很明確,難以提供範例。 7 天天敲鍵盤 v 時時按滑鼠 8
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-10 17:55:38 IP:220.132.xxx.xxx 未訂閱
引言: 1. 您可以透過各個元件的 OnClick 或是 OnMouseDown、OnMouseUp 這樣的滑鼠事件來探知何者被圈選了? 2. 不是很瞭解您第二個問題的前半段是指甚麼?後半段所指的問題就要看程式的寫作是否嚴謹了?如果程式各個處理流程都考慮得很周詳,那麼動態的任意增刪元件應該不成問題的。 3. 您的需求並不是描述得很明確,難以提供範例。 7 天天敲鍵盤 v 時時按滑鼠 8
先感謝RedSnow前輩的回覆. 關於第一個問題.如第一樓的敘述.長方形與文字都是用"畫"的方式畫出來. 目前想到是用滑鼠移到範圍的座標內.並且按下左鍵.就表示選取到.. 第二個問題是. 延續第一個問題.如果我點選兩下長方形.則會叫出設定屬性畫面. 那必須要有個方法儲存這些資料.目前是想到用類別去儲存資料. 但長方形有可能在一個畫面上有很多個.要怎麼準確知道目前點選的長方形. 它的類別是哪個?所以才說如果用指標去指類別.怎麼才能知道指向的類別是否是選取到的長方形的類別. 第三個問題是請前輩能做個範例.大約如同畫面中繪圖軟體的功能.
RedSnow
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-10 20:00:41 IP:59.115.xxx.xxx 未訂閱
pireer 您好:    您這次的描述明確多了,我原先並不知道您是用 "直接繪製" 在畫布上的方式來處理您所說的那些元件,因此未能瞭解您實際的問題。    如果是這樣子的話,我建議您換個方式來處理,您可以用動態的方式建立 Image 物件,無論是矩形、文字....等,都以 Image 物件來存放內容,這樣子您會比較好處理與調整這些物件,例如:調整大小、位置、顏色、字樣....等等,當您要儲存整張畫布時,再將各個動態建立的 Image 物件與當作底圖的 Image 內容合併成一張全圖,這樣子會比較方便些。    如果您可以接受前述的方式,那麼您可以先試著寫寫看,您在第一篇提到使用八個小方框,以及建立文字圖像的處理方式,可以參考下列這一篇,該篇裡邊我另外有列出幾篇相關討論的連結: 用TImage實作文字方塊 http://delphi.ktop.com.tw/topic.php?topic_id=68832 您先參考看看,若有問題的話,我們再來討論好了。 7 天天敲鍵盤 v 時時按滑鼠 8
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-11 09:53:14 IP:220.132.xxx.xxx 未訂閱
RedSnow前輩: 如果要達成下圖畫面中出現的長方形文字.且只能直接在FORM上用畫的方式表達. 動作有八個小方框.改變大小.移動長方形文字.且雙擊此長方形文字要跳出該屬性設定畫面.屬性設定畫面的資料還要儲存起來. 不太能適用於用IMAGES去做. 也就是說只能用Canvas去達到photoimpact畫圖.文字功能. 目前沒什麼方向..    
RedSnow
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-11 10:33:25 IP:59.115.xxx.xxx 未訂閱
pireer 您好:
引言:如果要達成下圖畫面中出現的長方形文字.且只能直接在FORM上用畫的方式表達. 動作有八個小方框.改變大小.移動長方形文字.且雙擊此長方形文字要跳出該屬性設定畫面.屬性設定畫面的資料還要儲存起來. 不太能適用於用IMAGES去做. 也就是說只能用Canvas去達到photoimpact畫圖.文字功能. 目前沒什麼方向..
您可以參考我在前一篇所提供那一篇連結內的討論,使用 Memo 物件來做輸入及調整大小時的處理,確認文字的輸入或修改後再製作成 Image 物件來顯示,文字圖片被雙擊後,再將 Image 暫時隱藏起來,將前述的 Memo 物件及調整方框的八個 DragSpot 顯示出來,以便作編修時的處理。 或者您也可以仍使用 Image 物件來做文字框的調整,只不過您必須要在文字框被雙擊時,另外在那個 Image 物件加上繪製邊框的動作就是了。 至於您所描述的 "屬性設定畫面的資料還要儲存起來" 這個部份,這都是技術性的問題,可以處理的方法也很多,一般的圖檔並不包含這些資料,您可以自己訂定一套檔案格式 (或採用其它著名程式所制定的現成格式) 來儲存那些資訊,然後在您的程式中的儲存動作中,可以讓使用者選擇將前述的屬性資料儲存成特定的格式檔案,或者是儲存成一般的圖檔。 7 天天敲鍵盤 v 時時按滑鼠 8
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-11-11 13:36:58 IP:220.132.xxx.xxx 未訂閱
RedSnow前輩: 您說的Memo與Image方式都很方便. 但目前我在"畫"長方形或文字方面. 等於是說畫面上出現的全部只能用畫的. 不能用任何Component達成.. 所以第二個圖完全要用畫的. 因此小弟才那麼頭痛. 目前卡在除了畫出第二圖那樣之外. 如果一個畫面有兩個圖二這樣的圖. 那在MouseDown事件怎麼分辨現在點選到的是哪一個. 以及移動畫出來的圖.與大小可縮放之類..
RedSnow
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-11-11 17:34:20 IP:61.230.xxx.xxx 未訂閱
pireer 您好:
引言:但目前我在"畫"長方形或文字方面. 等於是說畫面上出現的全部只能用畫的. 不能用任何Component達成.. 所以第二個圖完全要用畫的.
我不太理解這一段的說明,不能使用任何元件來達成的意思是某種限制嗎?還是您不想透過元件來處理?
引言:目前卡在除了畫出第二圖那樣之外. 如果一個畫面有兩個圖二這樣的圖. 那在MouseDown事件怎麼分辨現在點選到的是哪一個. 以及移動畫出來的圖.與大小可縮放之類..
如果可以使用元件來處理,在 OnMouseDown 事件中可以透過傳入的 Sender 參數來識別觸發事件的來源,如果要處理的對象全部都是畫在同一張畫布上,那麼可能就較難了,或許可以建立一個對應的結構資料陣列,裡邊存放各個處理對象的相關資訊,例如所在位置、大小、層次編號....等等,但是處理起來可能會有些麻煩,尤其是處理對象有重疊且又有透明底色的現象時。 7 天天敲鍵盤 v 時時按滑鼠 8
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-11-11 18:39:33 IP:220.132.xxx.xxx 未訂閱
引言: 我不太理解這一段的說明,不能使用任何元件來達成的意思是某種限制嗎?還是您不想透過元件來處理
是限制...被限制不能使用任何元件達成.只能用畫的方式表達.
引言: 如果可以使用元件來處理,在 OnMouseDown 事件中可以透過傳入的 Sender 參數來識別觸發事件的來源,如果要處理的對象全部都是畫在同一張畫布上,那麼可能就較難了,或許可以建立一個對應的結構資料陣列,裡邊存放各個處理對象的相關資訊,例如所在位置、大小、層次編號....等等,但是處理起來可能會有些麻煩,尤其是處理對象有重疊且又有透明底色的現象時。
目前想到用類別格式去儲存相關資訊.但... 後續一堆問題...這就是一直頭痛的地方..
RedSnow
版主


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-11-11 22:57:18 IP:59.115.xxx.xxx 未訂閱
pireer 您好:
引言:是限制...被限制不能使用任何元件達成.只能用畫的方式表達.
原來是這麼回事啊~這種限制似乎有點奇怪,不過既然是限制,那我也只能祝您好運囉。
引言:目前想到用類別格式去儲存相關資訊.但... 後續一堆問題...這就是一直頭痛的地方..
只要您能先釐清頭緒、確認處理方向,後續的問題應該就不難解決了,以您前一個問題來講,您可以在 OnMouseDown 事件中,以迴圈檢查各個 "處理對象" 記錄資料中 Rect 值 (上、下、左、右) 的方式來判定被圈選的對象,但是就如我前一篇所提及的,若有處理對象處於重疊的狀態時,可能就會比較麻煩些了,另外對於移動、調整大小等處理的話,可能需要有一塊 Buffer 記錄下底圖的內容 (Image 原圖的副本),在被圈選的對象移動位置或調整大小時,先恢復該對象所覆蓋的底圖部分,然後再於新的位置重新繪製該對象,當然啦~隨著處理對象與處理效果的不同,也應該運用不同的技巧來處理。 其實若是沒有您所描述的限制,或者是限制範圍仍有彈性的話,您可以考慮採用提供圖層 (Layer) 功能的畫布元件 (例如 Graphics32) 來代替原有的 Image 元件,這樣子真的會方便多了。 7 天天敲鍵盤 v 時時按滑鼠 8
系統時間:2024-05-11 13:09:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!