如题

解决方案 »

  1.   

    不会吧?
    Memo显示很正常的
    只是字段用EN没问题可以自己Debug Rave内部的VCL代码的,一定能解决的
      

  2.   

    我的字段已经全部改成en的了,在显示MEMO的多行中文时,有时候就是显示有问题。
      

  3.   

    delphi7所附Rave5之Memo控件,在中文一行不能打印完时能够自动断行,但不能按整字来断行,有时一个中文字会被截断,造成下行的混乱。
    请下载 Nevrona Rave V5.1.2 BEX Full Sources For Delphi BCB。
    先卸载原来delphi7中的Rave V5.0.8,然后通过运行Rave V5.1.2 BEX Full Sources中的SETUP来安装,安装后从组件中包中再将其卸载,再打开C:\Rave5\Source\dclRave.dpk重
    新编译安装。
      

  4.   

    请把RpMemo.pas文件中的TMemoBuf.GetLine函数进行如下的修改。然后重新编译RvCore.dpk包。把编译获得的RvCore50.bpl拷贝到Rave.exe对应的目录即可!function TMemoBuf.GetLine( Width: longint;
    var Eol: boolean): string;
    var
    TestWidth: longint;
    SavePos: longint;
    NewWord: string;
    S1: string;
    S2: string;
    StartPos: longint;
    FormatState: TFormatState;
    StartState: string;
    AdjWidth: longint;
    FirstLine: boolean;//SCYANGYU ************** Start **************
    Function CurLineEndHalfCHS(Const CurLineStr:String):Boolean;
    Var
    bIsDBCS:Boolean;
    jLength,jFor:Integer;
    Begin
    bIsDBCS := False;
    jLength:=Length(CurLineStr);
    for jFor := 1 to jLength do
    begin
    if bIsDBCS then
    bIsDBCS := False
    else
    Begin
    if Windows.IsDBCSLeadByte(byte(CurLineStr[jFor])) then
    bIsDBCS := True;
    End;
    end; //end of for
    Result:=bIsDBCS;
    End;
    //SCYANGYU ************** End **************begin { GetLine }
    { Get a line of text that will fit within PrintStart to PrintEnd }
    EOL := false;
    NewLine := true;
    StartPos := -1;
    S1 := '';
    S2 := '';
    StartState := '';
    Result := '';
    FirstLine := NewParagraph;
    AdjWidth := Width;repeat
    SavePos := FPos; { Save off current position}
    NewWord := GetWord; { Get next word }if StartPos < 0 then
    begin { Initial run through }
    StartPos := NonSpacePos;
    if HasRPTF then 
    begin { Get state of line start }
    FormatState := GetStateAtPos(SavePos);
    StartState := StateToRPTF(FormatState);
    if FirstLine then 
    begin
    LeftIndent := FormatState.Para.FirstIndent + FormatState.Para.LeftIndent;
    end
    else 
    begin
    LeftIndent := FormatState.Para.LeftIndent;
    end; { else }
    RightIndent := FormatState.Para.RightIndent;
    AdjWidth := Width - Round((LeftIndent + RightIndent) * BaseReport.XDPI);
    if AdjWidth < BaseReport.XDPI then
    begin { Don't allow width less than 1" }
    AdjWidth := BaseReport.XDPI;
    end; { if }
    end; { if }
    end; { if }if (NewWord = #13) or (NewWord = '') then
    begin { Finish off line }
    EOL := true;
    if Result = '' then
    begin
    Result := StartState;
    end; { if }
    Break;
    end
    else
    begin { Test width with new word }
    S2 := S2 + NewWord;
    S1 := StartState + FillRPTF(S2,StartPos);if System.Pos(RPTFPrefix,S1) = 0 then
    begin 
    TestWidth := SimpleTextWidth(BaseReport,S1,0);
    end
    else
    begin 
    TestWidth := RPTFTextWidth(BaseReport,S1);
    end; { else }if TestWidth <= AdjWidth then
    begin { Add new word }
    Result := S1;
    end
    else
    begin 
    { Reset position to before this word}
    FPos := SavePos;
    end; { else }if TestWidth >= AdjWidth then
    begin
    if UnformatLen(Result) = 0 then
    begin { First word was too long, cut it down }
    repeat { Add on characters until enough width }
    S1 := Result;
    while FBuffer^[FPos] = RPTFPrefix do 
    begin { Add on RPTF stuff }
    repeat
    S1 := S1 + FBuffer^[FPos];
    Inc(FPos);
    until FBuffer^[FPos] = RPTFSuffix; 
    S1 := S1 + FBuffer^[FPos];
    Inc(FPos);
    end; { while }
    S1 := S1 + FBuffer^[FPos];if System.Pos(RPTFPrefix,S1) = 0 then 
    begin 
    TestWidth := SimpleTextWidth(BaseReport,S1,0);
    end
    else
    begin 
    TestWidth := RPTFTextWidth(BaseReport,S1);
    end; { else }
    if TestWidth <= AdjWidth then
    begin
    if S1 = ' ' then
    begin
    Result := '';
    end
    else
    begin
    Result := S1;
    end; { else }
    Inc(FPos);
    end; { if }
    until (TestWidth >= AdjWidth) or (FPos >= FSize);
    end; { if }
    Break;
    end; { if }
    end; { else }
    until false;//SCYANGYU ************** Start **************
    If CurLineEndHalfCHS(Result) Then
    Begin
    System.Delete(Result,Length(Result),1);
    Dec(FPos);
    End;
    //SCYANGYU ************** End **************end; { GetLine }
     
      

  5.   

    老大,我安装你上面的做法不成功嘛,能不能麻烦你说详细一点。我现在已经把原文件改了。主要是假如你上面用注释包含起来的一个函数和末尾的一个判断,并且在use单元中加入windows,这些我都作了,我编译rvcore.dpk,好像生成的是rvcore.dcu啊,怎么会生成RvCore50.bpl?