function SplitString(aText: string; aLength: Integer): string; function IsValidChar(aChar: Char): Boolean;{ 函数功能:将aText字符串按aLength长度进行分解,并折行显示。 算法介绍:如果aText字符串长度小于aLength,则返回整个字符串; 由于字符串中可能存在汉字,如果分解过程中末位正好遇到汉字 的第一个字节,截取结果可能出错,那么我们可以对每次截取 的最后一个字节进行判断,如果不属于英文字符、数字,那此 字节肯定和后一个字节组成一个汉字,必须在一起才能正确显示。 在此,设置一个offSet偏移量,每次遇到特殊情况,偏移量加一即可 备注:函数返回最后结果会多出回车换行符 } function TForm1.SplitString(aText: string; aLength: Integer): string; var i, j, offSet: Integer;begin offSet := 0; if Length(aText) < aLength then Result := aText else for i := 0 to (Length(aText) div aLength) do //总共分几段 begin for j := 1 to aLength do //将字符串按长度aLength逐个分解 begin Result := Result + aText[i * aLength + j + offSet]; if j = aLength then if not IsValidChar(aText[i * aLength + aLength]) then begin Result := Result + aText[i * aLength + aLength + offSet + 1]; Inc(offSet); end; end; Result := Result + #13#10; end; end; function TForm1.IsValidChar(aChar: Char): Boolean; begin if aChar in ['a'..'z', 'A'..'Z', '0'..'9'] then Result := True else Result := False; end;
查一下ByteType系统函数function ByteType(const S: string; Index: Integer): TMbcsByteType; 功能 返回字符串S位置Index上的字符在MBCS中类型 说明 多字节字符系统:Multi-Byte Character System (MBCS)
function TForm1.IsValidChar(aChar: Char): Boolean; begin if aChar in ['a'..'z', 'A'..'Z', '0'..'9'] then Result := True else Result := False; end;汉字外的字符不仅仅包括这些,特殊符号也算,所以我觉得这种方式应该不够严谨
function SplitString(aText: string; aLength: Integer): string;
function IsValidChar(aChar: Char): Boolean;{
函数功能:将aText字符串按aLength长度进行分解,并折行显示。
算法介绍:如果aText字符串长度小于aLength,则返回整个字符串;
由于字符串中可能存在汉字,如果分解过程中末位正好遇到汉字
的第一个字节,截取结果可能出错,那么我们可以对每次截取
的最后一个字节进行判断,如果不属于英文字符、数字,那此
字节肯定和后一个字节组成一个汉字,必须在一起才能正确显示。
在此,设置一个offSet偏移量,每次遇到特殊情况,偏移量加一即可 备注:函数返回最后结果会多出回车换行符
}
function TForm1.SplitString(aText: string; aLength: Integer): string;
var
i, j, offSet: Integer;begin
offSet := 0;
if Length(aText) < aLength then
Result := aText
else
for i := 0 to (Length(aText) div aLength) do //总共分几段
begin
for j := 1 to aLength do //将字符串按长度aLength逐个分解
begin
Result := Result + aText[i * aLength + j + offSet];
if j = aLength then
if not IsValidChar(aText[i * aLength + aLength]) then
begin
Result := Result + aText[i * aLength + aLength + offSet + 1];
Inc(offSet);
end;
end;
Result := Result + #13#10;
end;
end; function TForm1.IsValidChar(aChar: Char): Boolean;
begin
if aChar in ['a'..'z', 'A'..'Z', '0'..'9'] then
Result := True
else
Result := False;
end;
功能
返回字符串S位置Index上的字符在MBCS中类型
说明
多字节字符系统:Multi-Byte Character System (MBCS)
Delphi7上通过,但是Delphi2010貌似汉字也存储在一个字节中的,所以在2010中处理就更方便了(本人没使用过2010,说得不对的请见谅)
放一个tlabel,设为自动折行,调整它的宽度为需要的
把长文本赋给它的caption
Encoding := nil;
Size := TEncoding.GetBufferEncoding(Buffer, Encoding);
s := Encoding.GetString(Buffer, Size, Length(Buffer) - Size);
begin
if aChar in ['a'..'z', 'A'..'Z', '0'..'9'] then
Result := True
else
Result := False;
end;汉字外的字符不仅仅包括这些,特殊符号也算,所以我觉得这种方式应该不够严谨