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

解决方案 »

  1.   

    给edit1赋值时做截断不就得了
      

  2.   


    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;
      

  3.   

    Edit中必须是123456xxyy,只是让它显示123456和xx,不能截断。
      

  4.   

    就是脑子不转就容易出这种奇葩的需求。
    你还想在读取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;
      

  5.   

    感谢sololie的关注,你的方案不符合我的要求。
    不要随便用什么“奇葩”这样的词,我是有实际需要的。
      

  6.   

    你倒是说说为啥要这样。
    不论怎样,不管你是截断字符串还是隐藏部分字符串,把字符串不显示的部分过滤除去都是必须经过的步骤。而把'123456xx'显示到edit1的text中
    或是显示'123456xxyy'到edit1.text中再隐藏'yy'
    处理的过程都是一样的
    或者你可以用combobox来做
    把combobox的style设为csSimple,这样它看起来就跟edit一样
    procedure TForm1.FormCreate(Sender: TObject);
    var
      orgStr: string;
    begin
      orgStr := '123456xxyy';
      cbb1.Style := csSimple;
      // 显示的字串'123456xx' , 完整的字串在 cbb1.Items.Objects[0]
      cbb1.AddItem('123456xx', TObject(orgStr));
      cbb1.ItemIndex := 0;
    end;// 取值
    procedure TForm1.btn1Click(Sender: TObject);
    var
      newStr: string;
    begin
      newStr := string(cbb1.Items.Objects[0]);
      ShowMessage(newStr); // 123456xxyy
    end;
      

  7.   

    处理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;
      

  8.   

    我想“ss11ss”应该是明白我的意思了,非常感谢。
    但试了试还是没达到我的要求:
    1、yy没有真正隐藏。有个笨办法:在yy前加6个空格就可以隐藏yy,但往右一拉鼠标易造成Edit为空。
    2、SelStart := 0;
       SelLength := MAX_CHARPOS;
    这两句在DblClick事件中是非常对的,但用在其它事件中我觉得不妥。万一人家想选择“56xx”怎么办?我的目的:
    我想在Edit中保存姓名和人员编号,但只显示姓名(空间有限只能显示3个字)。4个字的名字往右拉拉鼠标(移移光标)也可以显示第4个字。
      

  9.   

    看到你的目的 说这是奇葩需求真的不为过。Edit中保存姓名和人员编号为什么要自找麻烦,一个EDIT要存两个东西,但又只显示一半,用两个EDIT不行吗,对EDIT写一个事件,截取后半部分写入一个变量不行吗。
      

  10.   

    令人蛋疼的问题。
    在YY前加一个CHR(13)如何,但保存时也需要去掉。
      

  11.   

    你关联了事件了吗?
    往右一拉鼠标易造成Edit为空,已经被OnMouseMove事件的代码解决了!要选56xx很容易,就是用鼠标从5往右拉到x或者从x往左拉到5!看了你的目的真让人无语。当遇到很棘手的技术难题,就要考虑你当初的设计是不是有缺陷了。
      

  12.   

    需要和楼主确认主要意图,你是以下哪个意图,或都不是
    1、edit要“装着”姓名 和 编号,但是编号不能显示出来。
    2、edit只显示姓名,编号不要显示。如果是第一种要求,应该很难。除非你做一个edit1 “装”姓名,一个edit2 “装” 编号,但edit2的visible := false ;
    如果是第二种要求,只要把编号截掉就行了。