我想写一个过程,实现去一定宽度的字符串。该怎么实现呢。
我的想法
比如 function fnc1(str,windth) string
对字符串str的每个字符取宽度,然后把每个字符的宽度累加,
累加和 大于指定的windth时,就终止,得到 小于windth的子字符串。
想法是这样,不过不知道怎么实现。getcharwidth32这个是怎么用的。

解决方案 »

  1.   

    用API   
      BOOL   GetTextExtentPoint32(   
          HDC   hdc,                       //   handle   to   DC   
          LPCTSTR   lpString,     //   text   string   
          int   cbString,             //   characters   in   string   
          LPSIZE   lpSize             //   string   size   
      );
      

  2.   


    取字符串的宽度(象素)?加入是这个意思的话,与具体的字体有关,不同的字体肯定宽度不同,但是可以巧妙利用一下TLabel;function GetStrWidth(s: string; AFont: TFont): Integer;
    var
      lbl: TLabel;
    begin
      lbl := TLabel.Create(nil);
      lbl.Font.Assign(AFont);
      lbl.Caption := s;
      Result := lbl.Width;
      lbl.Free;
    end;
      

  3.   

    只要是有Canvas属性的都可以调用TextWidth还获得字符串的宽度,用TestHeight来获得高度。
      

  4.   

    hongqi162
    api 是怎么用的,里面的那些参数应该写什么。我是 从 一个长的字符串,也就是宽度长的字符串中取一部分子字符串,就是 取前边一定长度的子子串
    confucius
    你说的字体我明白,我的这里字体已经限制好了,就是取个字符串了。
      

  5.   

    晕死,大家可能理解复杂了哦。aStr := copy(aStr, 1, N);