有若干个EDIT控件,有4个BUTTON控件,这4个BUTTON分别为上下左右,点击上下按钮为控制EDIT上下移动,左右按钮为移动输入EDIT的内容,就是比如EDIT1的text是qeqwe,现在光标停留在e后面,想左就移动到w的后面。这些功能该如何实现呢?
本人白天不能上网,晚上回来看到答案结帖!
本人白天不能上网,晚上回来看到答案结帖!
解决方案 »
- 很搞!!是不是又是字符的问题?求各种喷!!!!
- 求助 delphi 哪些版本有输入提示呢
- 哪位大哥帮我写个小函数,应该挺简单的
- 斑竹,为什么我不能回复贴子?错误信息如下:
- 做个几个控件(开关控件、不用excel将数据导出到excel文件控件、DBLabelEdit控件)
- 在delphi中如何建立一个doc文件?
- 一个没有解决的问题,请大家说一说(SQL语句),急!!!!
- 为什么form中潜入图片,我再把图片删除后,应用程序还能显示出图片?
- 等待提示窗口的实现
- 怎样可以截获win键消息,一定会给分,不给是小狗
- UDP传输,如何实现数据从广域网到局域网内的某台电脑.
- ImageEnVect 中的对象 合并保存为jpg问题
Edit1.Top := Edit1.Top + 1;
Edit1.Top := Edit1.Top - 1;
光标左右移动用:
Edit1.SelStart := Edit1.SelStart + 1;
Edit1.SelStart := Edit1.SelStart - 1;
但是光标移动时你得保证Edit1不会失去焦点,例如在SpeedButton的点击事件中执行该操作。
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.
上下移动用:
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;
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;
上下移动用:
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;