如何以中文习惯计算出光标所在的列(richedit)?(100分)

  • 主题发起人 主题发起人 tianyu717
  • 开始时间 开始时间
T

tianyu717

Unregistered / Unconfirmed
GUEST, unregistred user!
如何以中文习惯计算出光标所在的列(在richedit中)?
比如:"1234我的家" 总共是7列。
 
将光标前的串转成WideString,再计算数量。
 
可不可以说详细一些。如何把前边的串转成widestring;
还有就是widestring是什么意思????
 
看一下以下程序你就会明白:

procedure TForm1.Button1Click(Sender: TObject);
var
ws:WideString;
s:string;
begin
ws:='在地ABC一上上';
s:='在地ABC一上上';
showmessage('Length of WideString WS:'+inttostr(length(ws)));
// Return 8

showmessage('Length of String S:'+inttostr(length(s)));
// Return 13

showmessage('Length of String WideString(S):'+inttostr(length(WideString(s))));
// Also Return 8
end;
 
这个我我也会的。我是说在RICHEDIT中。如何以中文习惯。
测出光标所在的列。而不是给出的串的长度。

重点是我不知如何找出光标前边的串。
 

// Editor 为TRichEdit
// Statusbar 为状态栏TStatusbar

procedure TMainForm.UpdateCursorPos;
var
CharPos: TPoint;
s:widestring;
begin
CharPos.Y := SendMessage(Editor.Handle, EM_EXLINEFROMCHAR, 0,
Editor.SelStart);
CharPos.X := (Editor.SelStart -
SendMessage(Editor.Handle, EM_LINEINDEX, CharPos.Y, 0));
s:=copy(editor.Lines [CharPos.Y],1,CharPos.X);
CharPos.x:=Length(s);
Inc(CharPos.Y); //将第一行由0变为1
Inc(CharPos.X); //将第一列由0变为1

StatusBar.Panels[0].Text := Format(sColRowInfo, [CharPos.Y, CharPos.X]);
end;
 
非常非常感谢。
s:=copy(editor.Lines [CharPos.Y],1,CharPos.X);
其实我早该想到了。看来还是经验值不够。忘了这个函数。没转过来。
为什么要用TPoint,而不是Integer。
widestring,我了解的不多。 可不可以给说一下。
 
后退
顶部