谁有支持overwrite的edit控件? (200)(200分)

  • 主题发起人 主题发起人 VGA
  • 开始时间 开始时间
V

VGA

Unregistered / Unconfirmed
GUEST, unregistred user!
即可重写(改写)的 edit?
 
你的改写是什么概念
autoselect属性,不可以吗?
 
谢过 SiWeiLiuLang,
改写是什么概念? 是象在word中一样,新录入的一个字符 覆盖原光标右边的一个英文或汉字字符。如果录入的是词组,则顺次覆盖相应个数的字符。
 
我没有使用控件,楼主觉得有必要,可以从TCustomEdit重新继承一个,以下测试代码给你了,楼主也可以从以下地址下载:
地址: ftp.mlfjnp.com
帐户和密码均为:dfw

unit frmMain;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
OverriteBtn: TButton;
procedure FormCreate(Sender: TObject);
procedure OverriteBtnClick(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
OverriteFlag:boolean;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
OverriteFlag:=False;
end;

procedure TForm1.OverriteBtnClick(Sender: TObject);
begin
OverriteFlag:=not OverriteFlag;
if OverriteFlag then OverriteBtn.Caption:='改写'
else OverriteBtn.Caption:='插入';

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var tt:TPoint;
begin
if Key in ['0'..'9','a'..'z','A'..'Z'] then //在此可以加入一些判断,感觉输入汉字时,会有一点问题
if OverriteFlag then
begin
keybd_event(VK_DELETE, MapVirtualkey(VK_DELETE, 0),
KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(VK_DELETE, MapVirtualkey(VK_DELETE, 0),
KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
end;

GetCaretPos(tt);
Label1.Caption:='x='+IntToStr(tt.X)+',y='+IntToStr(tt.y);

end;

end.
 
多谢 chnplzh。

你的示例除汉字未做处理外,对于用 shift 配合 录入的字符(如按shift进行大小转换)也不能接收,你试一下
 
有趣, 没有想到 TEdit 没有这个功能, 我写一个给你
 
xuxiaohan 大侠:
太感谢了!急切期待着你的大作。
 
TvcEdit = class(TEdit)
private
FvAlign: TvAlign;
FhAlign: TAlignment;
FWordWrap: boolean;
FWantReturn: boolean;
FTextOffset: integer;
procedure SetvAlign(const Value: TvAlign);
procedure vAlignChange;
procedure SethAlign(const Value: TAlignment);
procedure SetWordWrap(const Value: boolean);
procedure SetWantReturn(const Value: boolean);
procedure SetTextOffset(const Value: integer);
[blue]procedure wmImeChar(var msg: Tmessage); message WM_IME_CHAR;
procedure wmChar(var msg: Tmessage); message wm_Char;[/blue]
protected
procedure KeyPress(var Key: Char); override;
procedure CreateParams(var Params: TCreateParams); override;
public
constructor Create(AOwner: TComponent); override;
published
property vAlign: TvAlign read FvAlign write SetvAlign;
property hAlign: TAlignment read FhAlign write SethAlign;
property WordWrap: boolean read FWordWrap write SetWordWrap;
property WantReturn: boolean read FWantReturn write SetWantReturn;
property TextOffset: integer read FTextOffset write SetTextOffset;

end;


procedure TvcEdit.wmImeChar(var msg: Tmessage);
begin
inherited;
keybd_event(VK_DELETE, MapVirtualkey(VK_DELETE, 0), KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(VK_DELETE, MapVirtualkey(VK_DELETE, 0), KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
BEEP;
end;

procedure TvcEdit.wmChar(var msg: Tmessage);
begin
inherited;
keybd_event(VK_DELETE, MapVirtualkey(VK_DELETE, 0), KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(VK_DELETE, MapVirtualkey(VK_DELETE, 0), KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
BEEP;

end;

上面是在我的控件上面加上的。 测试通过。
 
可以把你的 完整版本发到我的邮箱吗?
vga126@126.com
在改写方式下,光标能否变成一方块?罩住要被改写的第一个字符或汉字?
 
因为我的这个控件是在一个很大的单元里面的,单元里面有很多其他的控件,又uses 到许多单元, 所以我很难 emial 给你

光标能否变成一方块?罩住要被改写的第一个字符或汉字? 没有试过, 我看看有没有办法
 
要OVERWRITE还不容易呀,在Edit的OnEnter事件中设置键盘的Insert为FALSE,OnExit事件重新设置键盘的Insert状态为True
 
我感觉好象是就像把INSERT键是否按下效果。
 
楼主说得我早晕了,就是Insert+光标定位到最后嘛
 
楼上两位说的没错,我就是要这个效果,刻 EDIT 对Insert键按下奇偶数次以后,没有产生预期效果,不知两位是否测试过,要是管用的话我就不发贴了.
 
晕倒,你究竟有没有测试过我的代码?完全没有问题的!!!!
 
改写就是overwrite吧
 
帮顶!

http://www.source520.com

站长开发推广同盟 站长朋友的终极驿站
同时拥有海量源码电子经典书籍下载

http://www.source520.com/search/search.asp

"编程.站长"论坛搜索引擎-----为中国站长注入动力!
 
将光标变成 方块, 我现在无能为力, 如果你有结果,请告诉我。
overwrite 按照我的方法可以实现的。
 
后退
顶部