首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2013-08-13 
求助:如何真正隐藏Edit中的部分字符?可能有些不好理解。假如Edit1中有“123456xxyy”这么多个字符,由于Edit1

求助:如何真正隐藏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中的部分字符
------解决方案--------------------


顶起来,坐等专家答案。

热点排行