DevExpress SpreadSheet 函数的参数中如果含有汉字,会部分显示乱码,可有哪位高人知道怎么解决,小弟在此先谢了 ( 积分: 200 )

J

JX_S

Unregistered / Unconfirmed
GUEST, unregistred user!
DevExpress SpreadSheet 函数的参数中如果含有汉字,会部分显示乱码,可有哪位高人知道怎么解决,小弟在此先谢了
 
procedure ScanWord(const AText: TcxString; var StartPos: Integer; var TextBrick: TcxTextBrick);
var
I: Integer;
BreakPos: Integer;
Count: Integer;
W: Integer;
EndPos: Integer;
begin
BreakPos := 0;
TextBrick.Text := '';
Count := 0;
EndPos := StartPos;
for I := StartPos to Length(AText) do
begin
Inc(EndPos);
if (AText = #10) then
Break
else
begin
Inc(Count);
if AText = ' ' then
BreakPos := Count;
W := ExTextExtent(@AText[StartPos], Count).CX;
if W > AWidth then
begin
if I > BreakPos then
begin
Dec(Count);
Dec(EndPos);
end;
if BreakPos <> 0 then
begin
Count := BreakPos;
EndPos := StartPos + Count;
end;
Break;
end;
end;
end;
if ByteType(AText, StartPos + Count - 1) = mbLeadByte then
begin
Dec(Count);
Dec(EndPos);
end;
while (Count > 0) and (AText[StartPos + Count] = ' ') do Dec(Count);
begin
with TextBrick do
begin
TextBrick.Text := Copy(AText, StartPos, Count);
if HAlign = haJustify then
begin
{$IFDEF WINDOWS}
BreakCount := 0;
BreakExtra := 1;
for I := 1 to Length(Text) do
if Text = ' ' then Inc(BreakCount);
if BreakCount > 0 then
begin
while AWidth > ExTextExtent(@AText[StartPos], Count).CX do
begin
Inc(BreakExtra);
SetTextJustification(DC, BreakExtra, BreakCount);
end;
end;
{$ELSE}
AdjustWords(TextBrick.Text)
{$ENDIF}
end;
end;
StartPos := EndPos;
end;
end;

在cxSSPainterWrapper.pas中查找上面那个函数,用上面的代码替换
 
谢谢lake_cx的回答。
但上述的处理只能解决单元格中汉字自动换行时的乱码问题,如果单元格中使用了函数,并且函数的参数含有汉字,还是会出现乱码,并且提示参数不正确。
 
那是函数本来就不支持汉字,不好解决的
 
是啊,我也少见函数中带有汉字的,参数也不技持汉字啊,楼主为什么非要用汉字直接作参数呢?
 
举例说明:
在单元格中显示“打印人:XXX”,其中XXX需要通过自定义函数取出,然后将该函数的结果与字符串“打印人:”通过CONCATENATE函数拼到一起。
 

Similar threads

S
回复
0
查看
959
SUNSTONE的Delphi笔记
S
S
回复
0
查看
779
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
970
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部