我想编程实现当双击Memo3的某一行时选中Memo1控件中的某一行,Memo3中的格式是这样的:
XXX[ABCD]QWERT
上面的XXX是数字,代表要选中的memo1中的行号,我现在是用以下代码,发现没用:procedure TForm1.Memo3DblClick(Sender: TObject);
var
  CurrentLine:string;
  Line:Integer;
begin
  CurrentLine := Memo3.Lines[Memo3.CaretPos.Y];
  Line := StrToInt(Copy(CurrentLine,0,Pos('[',CurrentLine) - 1));//取得XXX所对应的数字,即行号
  Memo1.SelStart := Pos(Memo1.Lines[Line],Memo1.Lines.Text) - 1;
  Memo1.SelLength := Length(Memo1.Lines[Line]);
  //SendMessage(Memo1.Handle,EM_SETSEL,Memo1.SelStart,Memo1.SelLength + Memo1.SelStart);
  //ShowMessage(IntToStr(Memo1.SelLength));
end;

解决方案 »

  1.   

    Memo应该有一个selected属性,memo.lines.selected还有一个是selectedindex看看..不太记得,我用LISTBOX时用过,MEMO也有相应的.
      

  2.   

    直接这样,双击某行,可以选中整行的字符:procedure TForm1.Memo1DblClick(Sender: TObject);
    var
     k,i,j:integer;
    begin
     j:=0; {这里要初始化j)
     k:=Memo1.CaretPos.y; {取得行值}
     for i:=0 to k do
       j:=j+length(Memo1.Lines.Strings[i]);  {计算0-K行的字符长度}
     memo1.SelStart:=j-Length(Memo1.Lines.Strings[k])+k*2; {选择起点=总长度(j)-当行长度(k)+K*2(回车+换行字符的总数}
     memo1.SelLength:=Length(Memo1.Lines.Strings[k]);   {选择长度为当行(K)长度}
    end;
      

  3.   

    LZ修改一下就能达到你的要求.不用理会Memo3里面的内容格式
    改一下K是从Memo3中取值就行;
    也可以先判断一下,K是否大于memo1的行数,大于就不处理了!!procedure TForm1.Memo1DblClick(Sender: TObject); 
    var 
     k,i,j:integer; 
    begin 
     j:=0;
     k:=Memo3.CaretPos.y;
     if k>memo1.Lines.Count then exit;
     for i:=0 to k do 
       j:=j+length(Memo1.Lines.Strings[i]); 
     memo1.SelStart:=j-Length(Memo1.Lines.Strings[k])+k*2; 
     memo1.SelLength:=Length(Memo1.Lines.Strings[k]);  
    end;
      

  4.   

    再改进一下:procedure TForm1.Memo3DblClick(Sender: TObject);
    var
    k,i,j:integer;
    begin
     j:=0;
     k:=Memo3.CaretPos.y;
     k:=strToint(copy(Memo3.Lines.Strings[k],1,pos('[',Memo3.Lines.Strings[k])-1))-1; {最后面的减1,是把Memo1的第0行当第1行看)
     if k>memo1.Lines.Count then exit;
     Memo1.SetFocus;
     for i:=0 to k do
      j:=j+length(Memo1.Lines.Strings[i]);
     memo1.SelStart:=j-Length(Memo1.Lines.Strings[k])+k*2;
     memo1.SelLength:=Length(Memo1.Lines.Strings[k]);
    end;