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

請問如何在文字編輯的物件裡,得知他的行列數

尚未結案
phoenix_csie
一般會員


發表:6
回覆:15
積分:4
註冊:2005-10-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-25 21:24:19 IP:218.162.xxx.xxx 未訂閱
想請問如何在文字編輯的物件裡例如Memo,RichEdit,得知他的行列數, 並在StatusBar裡頭顯示出來。 假設StatusBar有3個Panels 我要顯示"行在"第1個,列在第2個 PS:第3個是個人喜好,才加上的。 謝謝!!
haman
中階會員


發表:46
回覆:137
積分:56
註冊:2005-03-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-25 21:55:44 IP:211.76.xxx.xxx 未訂閱
就我所知Memo跟RichEdit只能取得行,第幾"列"的話就得把該行的資料讀出來自行判斷了 一般Memo跟RichEdit很少有人會去判斷列的吧?? 會用到列的話多半是項目式的字串如 "金額" "名稱" "地址"等等 而這類的東西通常都會用StringGrid或ListView來實做 至於加到Panel中的話,直接以 StatusBar->Panels->Items[0]->Text = 行數; StatusBar->Panels->Items[1]->Text = 列數; 就行了 ==================================== 懂的不多,卻想學的更多,搞得不自覺的將問題複雜化@@
RedSnow
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-26 09:39:30 IP:59.115.xxx.xxx 未訂閱
phoenix_csie 您好:    Memo 與 RichEdit 物件都繼承自 TCustomMemo,因此我們可以透過 TCustomMemo 的 CaretPos 屬性來獲得您想要的資訊,我將您要的動作寫成一個自定函式,這樣子比較方便使用,您參考看看吧:
// 於 .h 檔案:
private:
        void __fastcall ShowEditPos(TObject *Sender);    // 於 .cpp 檔案:
void __fastcall TForm1::ShowEditPos(TObject *Sender)
{
    int col  = ((TCustomMemo*)Sender)->CaretPos.x   1;
    int line = ((TCustomMemo*)Sender)->CaretPos.y   1;        StatusBar1->Panels->Items[0]->Text = "Line: " IntToStr(line);
    StatusBar1->Panels->Items[1]->Text = "Col: " IntToStr(col);
}    // Memo 物件使用範例
void __fastcall TForm1::Memo1KeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
    ShowEditPos(Memo1);
}    // RichEdit 物件使用範例
void __fastcall TForm1::RichEdit1KeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
    ShowEditPos(RichEdit1);
}
7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/10/26 09:44:25
phoenix_csie
一般會員


發表:6
回覆:15
積分:4
註冊:2005-10-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-26 18:15:46 IP:218.162.xxx.xxx 未訂閱
引言: // Memo 物件使用範例 void __fastcall TForm1::Memo1KeyUp(TObject *Sender, WORD &Key, TShiftState Shift) { ShowEditPos(Memo1); } // RichEdit 物件使用範例
void __fastcall TForm1::RichEdit1KeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
    ShowEditPos(RichEdit1);
}
謝謝你的程式範例 不過我想請問以上的2個部分不用加入.h檔裡頭嗎? 如果我單純的加入到
void __fastcall TForm1::RichEdit1Change(TObject *Sender)
{
      ShowEditPos(RichEdit1);
} 
則只會一直顯示Line:1 col:1 發表人 - phoenix_csie 於 2005/10/26 20:58:18 發表人 - phoenix_csie 於 2005/10/26 21:00:00
RedSnow
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-27 13:16:59 IP:59.115.xxx.xxx 未訂閱
phoenix_csie 您好:    很抱歉,我誤認您會透過點擊 Object Inspector 視窗的事件表,來讓 BCB 自動產生 "OnKeyUp 事件" 處理程序的框架宣告,因此僅將 "自定函式" 的宣告特別列出來。 不清楚您的測試為何會無效?我剛才也對 OnChange 事件做了測試,結果是 OK 的,我不知道您的測試過程是如何的?因此我僅能用猜測的來提出可能狀況供您參考: 1. 請確認您瞭解了 OnChange 事件的作用,並且是依據它的觸發時機來做的測試。 2. 請確定一下您的設定與實際操作都是在 RichEdit1 這個元件上面。 雖然我在前一篇是以 OnKeyUp 事件來作為呼叫自定函式的範例,但是這並不代表著您 "僅能" 使用該事件來呼叫,自定函式已經寫好了,您可以依據您的實際需求來運用它。 7 天天敲鍵盤 v 時時按滑鼠 8
懷舊的人
高階會員


發表:28
回覆:152
積分:141
註冊:2003-01-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-27 17:01:30 IP:211.78.xxx.xxx 未訂閱
我用 Delphi 寫了範例讓您參考看看,不過我 C 不熟無法幫您寫成 C 版本,尚請見諒。 (請到下載區下載)
phoenix_csie
一般會員


發表:6
回覆:15
積分:4
註冊:2005-10-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-10-27 17:34:11 IP:218.162.xxx.xxx 未訂閱
不好意思,是我自己壞習慣,看到有範例就直接複製上去,沒有想到OnKeyUp。 程式本身沒有問題,只是因為我用滑鼠來確認功能才造成這樣的誤解。 程式本身只對鍵盤移動的位置作處理而已,所以滑鼠沒有功能在。 想請問如何抓滑鼠的座標值給CaretPos來做這樣的功能呢?
RedSnow
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-10-27 18:36:17 IP:59.115.xxx.xxx 未訂閱
phoenix_csie 您好:
引言:想請問如何抓滑鼠的座標值給CaretPos來做這樣的功能呢?
我不是很確定您這句話的意思耶,您是想要透過 CaretPos 來設定游標的位置嗎?如果是的話,直接將座標值設給要處理物件 CaretPosxy 即可。 如果我誤解了您的意思,請您換個方式再描述一下您的問題。 7 天天敲鍵盤 v 時時按滑鼠 8
phoenix_csie
一般會員


發表:6
回覆:15
積分:4
註冊:2005-10-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-10-27 19:03:19 IP:218.162.xxx.xxx 未訂閱
不好意思我的敘述不明白! 說明白一點就是滑鼠點到哪,就顯示那一位置的行列數。
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-10-27 19:25:52 IP:211.72.xxx.xxx 未訂閱
一樣阿~ 把它放在 OnMouseUp 事件裡頭就行了。 Caret 就是那支垂直的游標。 不過我想藉這問題問一下,CaretPos 能夠正確偵測到中文字是雙位元嗎 ? -- http://www.csie.nctu.edu.tw/~chtai/software.php 好用免費軟體的收集網頁
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
phoenix_csie
一般會員


發表:6
回覆:15
積分:4
註冊:2005-10-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-10-27 21:20:05 IP:218.162.xxx.xxx 未訂閱
引言: 不過我想藉這問題問一下,CaretPos 能夠正確偵測到中文字是雙位元嗎 ?
可以的,我剛測出來了,EX:"A檔"為3個字元 也謝謝你敎的MouseUp
系統時間:2024-06-29 16:34:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!