请教大虾一个棘手的问题:我想把数据库中字符内容按自己的格式用程序动态输入到memo或richedit控件,不过这两个控件没有提供关标定位和在

tingst 2002-07-30 09:54:10
请教大虾一个棘手的问题:我想把数据库中字符内容按自己的格式用程序动态输入到memo或richedit控件,不过这两个控件没有提供关标定位和在指定位置输出功能,好像可以用消息的方法解决,请高手们发表意见^_^
...全文
4 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
tingst 2002-07-30
top
回复
tingst 2002-07-30
当memo中还没有输入能容时,以上方法定位无效阿,只能在第一行第一列,
回复
debussy 2002-07-30
procedure SetCaret(RTF: TRichEdit; var row, col: word);
var
i,iStopLine,iSelStart:integer;
Strings:TStrings;
begin
if (RTF=nil) then exit;
Strings:=RTF.Lines;
if Row=0 then Row:=1;
if Col=0 then Col:=1;
//到第Row列,Col行共几个字元
iStopLine:=Row-1;
iSelStart:=0;
for i:=0 to Strings.Count-1 do
begin
if i=iStopLine then
begin
if Length(Strings[i])>Col then
Inc(iSelStart,Col)
else
Inc(iSelStart,Length(Strings[i])+2);
Break;
end;
Inc(iSelStart,Length(Strings[i])+2);
end;
if iSelStart>0 then Dec(iSelStart);
//以设定标记的方式指定游标位置
RTF.SelStart :=iSelStart;// + Length(RTF.Lines[i])+2;
//再次侦测游标位置
Row:=SendMessage(RTF.Handle,EM_LINEFROMCHAR,RTF.SelStart,0);
Col:=RTF.SelStart-SendMessage(RTF.Handle,EM_LINEINDEX,Row,0);
//卷到游标所在位置
SendMessage(RTF.Handle,EM_SCROLLCARET,0,0);

end;
回复
debussy 2002-07-30
Delphi中有控件MEMO,当使用应控件输入内容或编辑时,如何确定光标当前的位置呢?这时就可以调用WINDOWS API中的EM_LINEFROMCHAR和EM_LINEINDEX消息来确定MEMO控件中光标的当前行和列,具体调用方法的过程如下:

procedure TForm1.Button1Click(Sender: TObject);
var
LineNum:longint;
CharsBeforeLine:longint;
begin
LineNum := SendMessage(Memo1.Handle,EM_LINEFROMCHAR,
            Memo1.SelStart,0);
CharsBeforeLine:=SendMessage(Memo1.Handle,EM_LINEINDEX,
            LineNum,0);
Label1.Caption:='Line: '+IntToStr(LineNum + 1);
Label2.Caption:='Position: '+IntToStr((Memo1.SelStart -
                 CharsBeforeLine)+1);
end;

//另一种方法
定义变量iLine: Integer;
{ 使用em_LineFromChar消息 }
iLine := Memo1.Perform(em_LineFromChar, $FFFF, 0);
{ 第一行为0 }
messageDlg('行号: ' + IntToStr(iLine), mtInformation,[mbOK], 0 ) ;
回复
相关推荐
发帖
数据库相关
创建于2007-08-02

2454

社区成员

Delphi 数据库相关
申请成为版主
帖子事件
创建了帖子
2002-07-30 09:54
社区公告
暂无公告