有若干个EDIT控件,有4个BUTTON控件,这4个BUTTON分别为上下左右,点击上下按钮为控制EDIT上下移动,左右按钮为移动输入EDIT的内容,就是比如EDIT1的text是qeqwe,现在光标停留在e后面,想左就移动到w的后面。这些功能该如何实现呢?
本人白天不能上网,晚上回来看到答案结帖!

解决方案 »

  1.   

    利用的EDIT控件的属性TabOrder来实现焦点在文本框之间的移动。
      

  2.   

    上下移动用:
    Edit1.Top := Edit1.Top + 1;
    Edit1.Top := Edit1.Top - 1;
    光标左右移动用:
    Edit1.SelStart := Edit1.SelStart + 1;
    Edit1.SelStart := Edit1.SelStart - 1;
    但是光标移动时你得保证Edit1不会失去焦点,例如在SpeedButton的点击事件中执行该操作。
      

  3.   

    点击上下按钮为控制EDIT上下移动的代码:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Edit5: TEdit;
        Edit6: TEdit;
        Edit7: TEdit;
        Edit8: TEdit;
        LeftBtn: TButton;
        RightBtn: TButton;
        UpBtn: TButton;
        DownBtn: TButton;
        Edit9: TEdit;
        Edit10: TEdit;
        Edit11: TEdit;
        Edit12: TEdit;
        procedure FormCreate(Sender: TObject);
        procedure UpBtnClick(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure DownBtnClick(Sender: TObject);
      private
        { Private declarations }
        CurrentTag : integer;
        EditBoxCount : integer;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      //给窗口上所有的Edit组件的的属性TabOrder
      CurrentTag := 1;
      EditBoxCount := 0;
    end;
    //向上移动
    procedure TForm1.UpBtnClick(Sender: TObject);
    var
      i : integer;
    begin
      if(CurrentTag > 1) then
        Dec(CurrentTag);
      for i := 0  to self.ComponentCount-1  do
      begin
        if(self.Components[i] is TEdit) then
        begin
          if( (self.Components[i] as TEdit).Tag = CurrentTag ) then
          begin
            (self.Components[i] as TEdit).SetFocus;
            break;
          end;
        end;
      end;
    end;
    //找出EditBox的个数
    procedure TForm1.FormShow(Sender: TObject);
    var
      i : integer;
    begin
      for i := 0  to self.ComponentCount-1  do
      begin
        if(self.Components[i] is TEdit) then
        begin
          Inc(EditBoxCount);
          (self.Components[i] as TEdit).Tag := EditBoxCount;
          if(i = 0) then
            (self.Components[i] as TEdit).SetFocus;
        end;
      end;
    end;
    //向下
    procedure TForm1.DownBtnClick(Sender: TObject);
    var
      i : integer;
    begin
      if(CurrentTag < EditBoxCount) then
        Inc(CurrentTag);
      for i := 0  to self.ComponentCount-1  do
      begin
        if(self.Components[i] is TEdit) then
        begin
          if( (self.Components[i] as TEdit).Tag = CurrentTag ) then
          begin
            (self.Components[i] as TEdit).SetFocus;
            break;
          end;
        end;
      end;
    end;end.
      

  4.   


    上下移动用: 
    Edit1.Top := Edit1.Top + 1; 
    Edit1.Top := Edit1.Top - 1;
    光标左右移动用:
      private
        Position:Integer;procedure TForm1.Edit1Exit(Sender: TObject);
    begin
      Position:=Edit1.SelStart;
      Caption:=IntToStr(Position);
    end;procedure TForm1.btnRightClick(Sender: TObject);
    begin
      Edit1.SetFocus;
      Edit1.SelStart := Position + 1;
    end;procedure TForm1.btnLeftClick(Sender: TObject);
    begin
      Edit1.SetFocus;
      Edit1.SelStart := Position - 1;
    end;
      

  5.   

    上,下很简单,举个左右的例子:1. Button1表示左,tag=1;onClick写上下面代码;
    2. Button2表示右,tag=2;onClick事件指向Button1Click;
    3. 界面上N个Edit,统一命名为Edit1...Editn,tag分别修改为1...n
    4. 在Edit1的onExit写上下面代码,其它Edit的onExit事件指向Edit1Exit;
    5. Edt,kk为全局变量,Edt保存失去焦点的Edit,kk表示此Edit当前光标位置;private
        kk:integer;
        Edt:TEdit;procedure TForm1.Button1Click(Sender: TObject);
    begin  if Edt<>nil then
        begin
          Edt.SetFocus;
          case TButton(Sender).Tag of
           1:Edt.SelStart:=kk-1;
           2:Edt.SelStart:=kk+1;
          end;
          kk:=Edt.SelStart;
        end;end;procedure TForm1.Edit1Exit(Sender: TObject);
    begin Edt:=TEdit(self.FindComponent('Edit'+IntTostr(TEdit(Sender).Tag)));
     kk:=Edt.SelStart;end;
      

  6.   

    Delphi(Pascal) code 
    上下移动用: 
    Edit1.Top := Edit1.Top + 1; 
    Edit1.Top := Edit1.Top - 1; 
    左右:
    procedure TForm1.Button1Click(Sender: TObject);
    begin  if Edt<>nil then
        begin
          Edt.SetFocus;
          case TButton(Sender).Tag of
           1:Edt.SelStart:=kk-1;
           2:Edt.SelStart:=kk+1;
          end;
          kk:=Edt.SelStart;
        end;end;procedure TForm1.Edit1Exit(Sender: TObject);
    begin Edt:=TEdit(self.FindComponent('Edit'+IntTostr(TEdit(Sender).Tag)));
     kk:=Edt.SelStart;end;
      

  7.   

    我说的EDIT上下移动是指由EDIT1移动到EDIT2.谢谢大家了.明天结帖!
      

  8.   

    晕,我以为4个Edit是水平排列的呢