我现在在做一个模拟计算机的软件,显示用memo控件,键盘用button控件。现在有两个问题请教各位:
1.如何使光标一直在memo中显示,我在运行时,刚开始光标在memo中,可是一单击模拟键盘的button,memo中的光标就看不见了。
2.如何得到光标在么memo中的位置,我是想在单击模拟键盘的方向健,光标可以象按键盘的方向健一样,上下左右移动,而且可以在光标的位置插入文字。

解决方案 »

  1.   

    1、使用setfocus
    2、很麻烦,好象需要一些api来处理插字符
      

  2.   

    1,在BUTTON的ONCLICK中写memo1.setfocus;
    2, VK_LEFT = 37;
      {$EXTERNALSYM VK_UP}
      VK_UP = 38;
      {$EXTERNALSYM VK_RIGHT}
      VK_RIGHT = 39;
      {$EXTERNALSYM VK_DOWN}
      VK_DOWN = 40;
    你只要在你的BUTTON中ONCLICK写上;
    keybd_event(vk_UP,0,KEYEVENTF_KEYUP,0)就可以了模拟向MEMO发送小箭头的按键
      

  3.   

    procedure TForm1.Button2Click(Sender: TObject);
    begin
      memo1.SetFocus ;
      keybd_event(VK_DOWN,0,KEYEVENTF_EXTENDEDKEY,0);
    end;
    刚才错了;SORRY;
      

  4.   

    用 outer2000(天外流星) 的方法
      

  5.   

    哇!一说是妹妹有问题,带双星的都冒出来了!呵呵!
    我同意“天外流星”的思路,但是我想提出不用的想法!他的代码可以相应的应用,就是在keyup的事件时候memo1.setfocus,也就是说无论你的键盘事件是敲击的哪个位置都能回到memo中,因为如果别人动了鼠标之后焦点既不在button上也不在memo的时候,光标就回不去了!当然!要排出你的方向键!
      

  6.   

    多谢out2000,这样基本可以实现光标在文字区域自由移动,可不能在没有文字区的位置移动。我的意思是光标在程序运行时,可以移动到memo中的任何位置,包括没有文字的区域。
      

  7.   

    为什么一定要用TButton,用TSpeedButton就不行吗
      

  8.   

    对呀,用TSpeedButton就不行吗???
      

  9.   

    用TSpeedButton能实现光标在任何位置,包括没有文字的区域移动吗?
      

  10.   

    问题一,使用SpeedButton而不使用普通的Button
    问题二,使用API函数SetCaretPos(x, y)来设置光标坐标位置。
      

  11.   

    在MEMO.LINE中加无数个空行就可以!
      

  12.   

    定义一个有数组
    str:array [0..1000] of string;在窗体显示时
    for i:=1 to 1000 do
    begin
     str[i]:='';
     memo1.lines.add(str[i]);
    end;1000如果太大就用richedit