求助:如何真正隐藏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;
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.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;
