字符串补空格的问题

lu仙深 2013-11-07 12:17:26
例如

1234 ABCDE
中国上海 888888888888
海南三亚好地方 是好地方


不用 ansistring 使用 unicode string
XE5 android 里 不支持 ansi 了

不知道咋搞搞,,
...全文
654 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
seagull327 2013-11-08
  • 打赏
  • 举报
回复
再修改一下支持中文符点特殊号对齐

const
iMax = 20;
var
s: WideString;
i, iLeng: Integer;
begin
s := edt1.Text;
iLeng := Length(s);
Button1.Caption := inttostr(iLeng);
for i := 1 to iMax - iLeng do
s := s + #32#32;
for i := 1 to iLeng do
if ord(s[i]) < 183 then
s := s + #32;
mmo1.Font.Name := '新宋体';
mmo1.Font.Size := 10;
mmo1.Lines.Add(s + edt2.Text);
end;

lu仙深 2013-11-08
  • 打赏
  • 举报
回复
如果能做到不用字体就能实现就好了
lu仙深 2013-11-08
  • 打赏
  • 举报
回复
用字体在WIN下好用,在ANDROID里不行
渔歌樵夫 2013-11-08
  • 打赏
  • 举报
回复
另外,不用'新宋体'可以做到吗
渔歌樵夫 2013-11-08
  • 打赏
  • 举报
回复
haiou327: 如果右边一列靠右对齐怎么做?
seagull327 2013-11-07
  • 打赏
  • 举报
回复
const
iMax = 20;
var
s: WideString;
i: Integer;
begin
s := edt1.Text;
for i := 1 to iMax - (Length(s)) do
if ord(s[i]) < 19968 then
s := s + #32;
mmo1.Font.Name := '新宋体';
mmo1.Font.Size := 10;
mmo1.Lines.Add(s + edt2.Text);
ShowMessage(IntToStr(ord(',')));
end;

自然静 2013-11-07
  • 打赏
  • 举报
回复
引用 7 楼 haiou327 的回复:
const
  iMax = 20;
var
  s: WideString;
  i, k: Integer;
begin
  s := edt1.Text;
  if Length(s) < iMax then
    for i := 1 to iMax - (Length(s)) do
    begin
      if ord(s[i]) < 19968 then
        s := s + #32;
    end;
  mmo1.Font.Name := '新宋体';
  mmo1.Font.Size := 10;
  mmo1.Lines.Add(s + 'Edit');
end;
效果如下
seagull327 2013-11-07
  • 打赏
  • 举报
回复
const
iMax = 20;
var
s: WideString;
i, k: Integer;
begin
s := edt1.Text;
if Length(s) < iMax then
for i := 1 to iMax - (Length(s)) do
begin
if ord(s[i]) < 19968 then
s := s + #32;
end;
mmo1.Font.Name := '新宋体';
mmo1.Font.Size := 10;
mmo1.Lines.Add(s + 'Edit');
end;


效果如下
seagull327 2013-11-07
  • 打赏
  • 举报
回复
const
  iMax = 20;
var
  s: WideString;
  i,k: Integer;
begin
  s := edt1.Text;
  if Length(s) < iMax then
    for i := 1 to iMax - (Length(s)) do
    begin
    if ord(s[i])<19968 then
      s := s + #32;
    end;
  mmo1.Lines.Add(s+'Edit');
end;
seagull327 2013-11-07
  • 打赏
  • 举报
回复
英文下可以对齐,但中文下无法对齐宽度不一样,和LZ一样等高人支招
const
  iMax = 8;
var
  s: WideString;
  i: Integer;
begin
  s := Edit1.text;
  if Length(s) < iMax then
    for i := 1 to iMax - (Length(s)) do
      s := s + #32;
  mmo1.Font.Name:='新宋体';
  mmo1.Text:=s+Edit2.Text;
end;
ok1411 2013-11-07
  • 打赏
  • 举报
回复
貌似做不到哦, 你看"人民"的长度比"Edit"长 估计是和字体有关系, 设成宋体试试?
lu仙深 2013-11-07
  • 打赏
  • 举报
回复
引用 2 楼 haiou327 的回复:
const
  iMax = 8;
var
  s: WideString;
  i: Integer;
begin
  s := '盒子论坛';
  if Length(s) < iMax then
    for i := 1 to iMax - (Length(s)) do
      s := s + #32;
  ShowMessage('"' + s + '"');
end;
不对,补的空格,有点问题 我期望的效果是
seagull327 2013-11-07
  • 打赏
  • 举报
回复
const
  iMax = 8;
var
  s: WideString;
  i: Integer;
begin
  s := '盒子论坛';
  if Length(s) < iMax then
    for i := 1 to iMax - (Length(s)) do
      s := s + #32;
  ShowMessage('"' + s + '"');
end;
Frank6600 2013-11-07
  • 打赏
  • 举报
回复
1.首先字型必须选固定宽度的; 2.中文字算2个。可以用 length(AnsiString(Str)) 。 其他的,你应该知道怎么办了。

16,742

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧