读书人

怎么真正隐藏Edit中的部分字符

发布时间: 2013-08-13 16:43:28 作者: rapoo

求助:如何真正隐藏Edit中的部分字符?
可能有些不好理解。
假如Edit1中有“123456xxyy”这么多个字符,由于Edit1宽度不够,现在只能显示123456这几个字符,xxyy被隐藏了,显示不出来。但这是假的隐藏,因为把鼠标点进Edit1中往右一拉,xxyy还是能够显示出来。
我现在的意思就是:无论是往右拉鼠标,还是用方向键往右移动光标,yy就是显示不出来,让yy真正隐藏起来,但是xx能显示出来。这就是真正隐藏Edit中的部分字符。
现在只能做到让xxyy都真正隐藏起来。
希望高手能指点,先谢谢!!!
[解决办法]


procedure TForm1.btn1Click(Sender: TObject);
var
orgStr, newStr: string;
begin
orgStr := '123456xxyy';
// 你自己的字符串截断逻辑,比如
// 按指定字符截断
newStr := StringReplace(orgStr, 'yy', '', [rfReplaceAll, rfIgnoreCase]);
// 或按指定字符数截断
Delete(orgStr, 9, 2);

edt1.Text := orgStr; // 123456xx
edt2.Text := newStr; // 123456xx
end;

[解决办法]
那这样和YY真正不存在有什么不同呢?
[解决办法]
就是脑子不转就容易出这种奇葩的需求。
你还想在读取edit1的值时是‘是'123456xxyy’,虽然edit1显示的是'123456xx'
那就edit显示一个截断后的字串,而对edit取时转而去另一个保存'123456xxyy'的变量


var
orgStr:string = '123456xxyy';

// 截断字串显示到edit1
procedure TForm1.btn1Click(Sender: TObject);
var
newStr: string;
begin
newStr := StringReplace(orgStr, 'yy', '', [rfReplaceAll, rfIgnoreCase]);
edt1.Text := orgStr; // 123456xx
end;

// 取edit1的text时转从orgStr中取
procedure TForm1.btn9999Click(Sender: TObject);
var
newStr: string;
begin
newStr := orgStr;
ShowMessage(newStr); // 123456xxyy
end;



[解决办法]
处理Edit1的OnContextPopup、OnDblClick、OnKeyDown、OnMouseMove事件。
//Edit1.Width := 52;
//Edit1.Text := '123456xxyy';
const
MAX_CHARPOS=8;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);


begin
with TEdit(Sender) do
if ((Key = VK_RIGHT) and ((SelStart+SelLength >= MAX_CHARPOS) or (ssCtrl in Shift)))
or (Key = VK_END) then
begin
Key := 0;
if ssShift in Shift then
SelLength := MAX_CHARPOS-SelStart
else
SelStart := MAX_CHARPOS
end
end;

procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
with TEdit(Sender) do
if SelStart+SelLength > MAX_CHARPOS then
begin
SelStart := 0;
SelLength := MAX_CHARPOS;
end
end;

procedure TForm1.Edit1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
with TEdit(Sender) do
if SelStart+SelLength > MAX_CHARPOS then
begin
SelStart := 0;
SelLength := MAX_CHARPOS;
end
end;

procedure TForm1.Edit1DblClick(Sender: TObject);
begin
with TEdit(Sender) do
begin
SelStart := 0;
SelLength := MAX_CHARPOS
end;
end;


[解决办法]
看到你的目的 说这是奇葩需求真的不为过。Edit中保存姓名和人员编号为什么要自找麻烦,一个EDIT要存两个东西,但又只显示一半,用两个EDIT不行吗,对EDIT写一个事件,截取后半部分写入一个变量不行吗。
[解决办法]
令人蛋疼的问题。
在YY前加一个CHR(13)如何,但保存时也需要去掉。

[解决办法]
需要和楼主确认主要意图,你是以下哪个意图,或都不是
1、edit要“装着”姓名 和 编号,但是编号不能显示出来。
2、edit只显示姓名,编号不要显示。

如果是第一种要求,应该很难。除非你做一个edit1 “装”姓名,一个edit2 “装” 编号,但edit2的visible := false ;
如果是第二种要求,只要把编号截掉就行了。
[解决办法]
无语。~~~怎么真正隐藏Edit中的部分字符
------解决方案--------------------


顶起来,坐等专家答案。

读书人网 >.NET

热点推荐