一个关于字符串的问题(100分)

  • 主题发起人 主题发起人 完颜康
  • 开始时间 开始时间

完颜康

Unregistered / Unconfirmed
GUEST, unregistred user!
大家都用过word,里面有个左右对齐的功能
比如
中国
中华人民共和国
左右对齐后变成
中 国
中华人民共和国
为了实现这个功能,我便插入空格,但是,不同字体好像空格的宽度是不一样的,而且打印出来的效果也不是这样。而且这么做还有一个坏处,就是,在查找“中国”的时候,就找不到了,谁能说说,word是怎么做的,或者有什么方法可以实现这个左右对齐的功能
 
一行作为一个控件就行了:)
 
采用自画
 
在调用 TextOut 前先用 SetTextJustification 函数设置字符间距试试:
The SetTextJustification function specifies the amount of space Windows should add to the break characters in a string of text. The space is added when an application calls the TextOut or ExtTextOut functions.
BOOL SetTextJustification(
HDC hdc, // handle of device context
int nBreakExtra, // length of extra space, in logical units
int nBreakCount // count of space characters in line of text
);
 
使用SetTextJustification,必须在中国之间用空格间隔

procedure TForm1.FormPaint(Sender: TObject);
var
S1, S2: string;
cyChar: Integer;
sizeS1, sizeS2: TSize;
begin
S1 := '中 国';
S2 := '中华人民共和国';
with Canvas do
begin
sizeS1 := TextExtent(s1);
sizeS2 := TextExtent(S2);

SetTextJustification(Handle, sizeS2.cx - sizeS1.cx, 1);
TextOut(2, 2, S1);
SetTextJustification(Handle, 0, 0);
TextOut(2, 2 + sizeS1.cy, S2);
end;
end;

或者可用SetTextCharacterExtra
procedure TForm1.FormPaint(Sender: TObject);
var
S1, S2: string;
cyChar: Integer;
sizeS1, sizeS2: TSize;
begin
S1 := '中国';
S2 := '中华人民共和国';
with Canvas do
begin
sizeS1 := TextExtent(s1);
sizeS2 := TextExtent(S2);

SetTextCharacterExtra(Handle, sizeS2.cx - sizeS1.cx);
TextOut(2, 2, S1);
SetTextCharacterExtra(Handle, 0);
TextOut(2, 2 + sizeS1.cy, S2);
end;
end;
 
多人接受答案了。
 
后退
顶部