网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 程序设计-> Delphi/Pascal-> Rave5之Memo控件

Rave5之Memo控件
作者:佚名 来源:InterNet 加入时间:2004-11-23
相关文章 相关书籍:
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重
新编译安装。 
    請把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 }
 
 

[文章录入员:fightter]

相关文章 相关书籍:
本站推荐内容

近期主机类热搜关键词:
美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

Delphi/Pascal
C/C++/VC
C++Builder
Basic/VB类
Delphi/Pascal
Java编程
FORTRAN
其它
电脑教程阅读排行
·DELPHI下的多线程程序设计(...
·Delphi与Excel的亲密接...
·Delphi实现串口通信的常用的...
·Delphi中初始化.Ini文件...
·Delphi中用于读写(I/O)...
·谈谈Delphi中的类和对象
·Delphi编译错误中文手册
·Delphi中关于TApplic...
·OPENGL图形程序设计
·SQL的基本操作