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

如何正確取得游標所在位置的字元

缺席
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-03-02 15:58:50 IP:59.112.xxx.xxx 訂閱
各位前輩:
小弟在 C Builder 2010 使用 TRichEdit 元件時,無法正確取得游標所在位置的字元,還請前輩們不吝賜教,謝謝!
問題描述:
在第一行取得字元是正確的,但是第二行之後就不正確,部份程式碼如下:
[code cpp]
void __fastcall TMainForm::RichEdit1SelectionChange(TObject *Sender)
{
wchar_t wa;
wa = RichEdit1->Text[RichEdit1->SelStart 1];
Caption = wa;
}
[/code]
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-03-02 16:33:15 IP:59.120.xxx.xxx 未訂閱
印象中應該不用考慮它的行數
假如您想要用到某一行的資料
我記得好像就直接算出文自內容的總長度
再去讀它的位置即可

以Delphi為例...
RichEdit的字串為:

RichEdit1asd213e23547j679k578
aqwd
以上僅供參考~


g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-03-02 20:08:47 IP:59.112.xxx.xxx 訂閱
老大仔感謝您的回覆:
小弟正在開發一個專案,構想在移動游標時取得當前字元,並將字元轉換成16進位碼及判斷有無Big5對應編碼,供user參考之用。
目前,就卡在無法正確取得游標當前字元,問題可能出在換行符(0x0D、0x0A),好像換行符越多,所取出字元差距就越大。
您所提供的方法,無法適用本案需求,請再幫忙看看,還有其他方法可用嗎?
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-03-05 18:10:05 IP:59.112.xxx.xxx 訂閱
我找到答案了!原來要取得游標所在字元,必須從行段陣列(TStrings)結構著手進行,部份程式碼參考如下:
(RichEdit1更名為src)
[code cpp]
//從游標位置取得行號
int line = SendMessageW(src->Handle,EM_LINEFROMCHAR,src->SelStart,0);
//取得所在行第幾個字
int ci = src->SelStart - SendMessageW(src->Handle,EM_LINEINDEX,line,0);
//從行段陣列中取回字元
wchar_t wa = src->Lines->Strings[line][ci 1];
[/code]
注意事項:
必須留意游標位置在行尾問題,以免誤取不存在的位置,而致系統發生錯誤。

編輯記錄
g6101 重新編輯於 2010-03-05 18:16:27, 註解 無‧
g6101 重新編輯於 2010-03-26 14:58:04, 註解 無‧
系統時間:2024-11-22 15:34:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!