急件! RichEdit控件的行间距的如何调整?以及其他问题! (100分)

  • 主题发起人 主题发起人 pizilai
  • 开始时间 开始时间
P

pizilai

Unregistered / Unconfirmed
GUEST, unregistred user!
各为高手你们好!
请问RichEdit的行间距如何调整啊??有何方法直接调用Word的文件进去呢?
另外,如何嵌入图片,是该调用何方法啊!!比较急的是:RichEdit的行间距如何调整啊??
谢谢了!


 
转贴一篇,你参考一下
将位图作为一个对象插入工作得很好,但是用户可以打开和编辑它,并且图象必须是一个已存在的文件。用剪贴板工作得更好,但是它将擦掉以前的内容。因为我的工程要求图象不可编辑而且不能动剪贴板,我必须求助于编辑RTF。如果你有Rxlib,或是使用Microsoft RichTextBox控件(和VB5+一起的),这个方法可能对你有用。请原谅程序的笨拙。因为我不喜欢装载大图象带来的延迟,非常欢迎提出优化它的建议。

function BitmapToRTF(pict: TBitmap): string

var
bi,bb,rtf: string

bis,bbs: Cardinal

achar: ShortString

hexpict: string

I: Integer

begin
GetDIBSizes(pict.Handle,bis,bbs)

SetLength(bi,bis)

SetLength(bb,bbs)

GetDIB(pict.Handle,pict.Palette,PChar(bi)^,PChar(bb)^)

rtf := ''{/rtf1 {/pict/dibitmap ''

SetLength(hexpict,(Length(bb) + Length(bi)) * 2)

I := 2

for bis := 1 to Length(bi) do
begin
achar := Format(''%x'',[Integer(bi[bis])])

if Length(achar) = 1 then
achar := ''0'' + achar

hexpict[I-1] := achar[1]

hexpict := achar[2]

Inc(I,2)

end

for bbs := 1 to Length(bb) do
begin
achar := Format(''%x'',[Integer(bb[bbs])])

if Length(achar) = 1 then
achar := ''0'' + achar

hexpict[I-1] := achar[1]

hexpict := achar[2]

Inc(I,2)

end

rtf := rtf + hexpict + '' }}''

Result := rtf

end


这个函数返回一段可以被导入到RxRichEdit或RichTextBox选择的RTF流。

这对我来说似乎工作得很好:

{假设SS是TStringStream,RE是TRxRichEdit,BMP是一存有图片的TBitmap。}
SS := TStringStream.Create(BitmapToRTF(BMP))

RE.PlainText := False

RE.StreamMode := [smSelection]

RE.Lines.LoadFromStream(SS)

SS.Free


如果你不知道RxRichEdit是什么并想知道,你可以在这里获得有关资料: http://www.rxlib.com/

如果你不知道RTF(RichText Format)是什么,你可以在这里读到一点东西:http://chesworth.com/pv/file_format/rtf.txt
 
使用RxRichEdit轻松搞定,还附有例程,把例程改成中文就可以用了!
 
建议用RichEdit98,我用过RxRichEdit,查找替换中文时很麻烦。
 
[?]问题一:请问RichEdit的行间距如何调整啊??
其实RxRichEdit 我也在用,但是,
[?]问题二:在RxRichEdit中嵌入图片时,是该[red]调用何方法[/red][:)]啊!难道只能用Ctrl+C 再Ctrl+V吗?用户是不能接受的??!!!希望高手给个例子!谢谢了!
 
1.RxRichedit98 中有批量多替换不同中文或英文的例子吗?
就是所有"%order"中替换成"48" 同时所有"%Number"替换成"200" 等一批变量!
2.RxRichedit中的文字图片能保存在数据库中然后用流方式读出来时是一堆乱码(包含了图片时)!如何解决啊?谢谢!
3.RxRichEdit能插入表格吗?又是如何解决问题啊!

其实我的最终的目的是想在自己的程序中做成象word般的图文编辑和打印的!希望高手们和斑竹帮忙下啦!谢谢了!
 
请高手帮我出出主意啊!谢谢了! 急啊!!!!!!!!!!!!!!!!!!!!!!?????????????
????????????????????
请高手帮我出出主意啊!谢谢了! 急啊!!!!!!!!!!!!!!!!!!!!!!?????????????
????????????????????
 
请问RichEdit的行间距如何调整啊??
斑竹请帮忙一下!
 
如果不够分吗?我可以加吗?!!!!谢谢各位高手了!
 
RichEdit的行间距不能调整!!!
 
名称: RICHEDIT中插入图象 -- 作者:

开发语言: Delphi &amp
Kylix

上传者: 脑膜炎

上传日期: 2003-06-27 08:56:48


访问次数: 213

适合系统:
简介: unit InsRich;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ActiveX,ComCtrls;
const
REO_CP_SELECTION = ULONG(-1);
REO_BELOWBASELINE = $00000002;
REO_RESIZABLE = $00000001;
REO_STATIC = $40000000;
EM_GETOLEINTERFACE = WM_USER + 60;
IID_IUnknown: TGUID = (D1:$00000000;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
IID_IOleObject: TGUID = (D1:$00000112;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
type
_ReObject = record
cbStruct: DWORD
{ Size of structure }
cp: ULONG
{ Character position of Object }
clsid: TCLSID
{ Class ID of Object }
pOleObj: IOleObject
{ Ole Object interface }
pstg: IStorage
{ Associated storage interface }
pOleSite: IOleClientSite
{ Associated Client Site interface }
sizel: TSize
{ Size of Object (may be 0,0) }
dvAspect: Longint
{ Display aspect to use }
dwFlags: DWORD
{ Object status flags }
dwUser: DWORD
{ Dword for user‘s use }
end;
TReObject = _ReObject;
TCharRange = record {Copy From RichEdit.pas}
cpMin: Integer;
cpMax: Integer;
end;
TFormatRange = record
hdc: Integer;
hdcTarget: Integer;
rectRegion: TRect;
rectPage: TRect;
chrg: TCharRange;
end;
IRichEditOle = interface(System.IUnknown)
[‘{00020d00-0000-0000-c000-000000000046}‘]
function GetClientSite(out ClientSite: IOleClientSite): HResult
stdcall;
function GetObjectCount: HResult
stdcall;
function GetLinkCount: HResult
stdcall;
function GetObject(iob: Longint
out ReObject: TReObject
dwFlags: DWORD): HResult
stdcall;
function InsertObject(var ReObject: TReObject): HResult
stdcall;
function ConvertObject(iob: Longint
rclsidNew: TIID;lpstrUserTypeNew: LPCSTR): HResult
stdcall;
function ActivateAs(rclsid: TIID
rclsidAs: TIID): HResult
stdcall;
function SetHostNames(lpstrContainerApp: LPCSTR
lpstrContainerObj: LPCSTR): HResult
stdcall;
function SetLinkAvailable(iob: Longint
fAvailable: BOOL): HResult
stdcall;
function SetDvaspect(iob: Longint
dvaspect: DWORD): HResult
stdcall;
function HandsOffStorage(iob: Longint): HResult
stdcall;
function SaveCompleted(iob: Longint
const stg: IStorage): HResult
stdcall;
function InPlaceDeactivate: HResult
stdcall;
function ContextSensitiveHelp(fEnterMode: BOOL): HResult
stdcall;
function GetClipboardData(var chrg: TCharRange
reco: DWORD
out dataObj: IDataObject): HResult
stdcall;
function ImportDataObject(dataObj: IDataObject
cf: TClipFormat
hMetaPict: HGLOBAL): HResult
stdcall;
end;
function InsertBitmap(Editor: TRichEdit
BmpFile: String): Boolean;

implementation

function InsertBitmap(Editor: TRichEdit
BmpFile: String): Boolean;
var
FRTF: IRichEditOle;
FOle: IOleObject;
FormatEtc: tagFormatETC;
FStorage: ISTORAGE;
FClientSite: IOleClientSite;
FLockBytes: ILockBytes;
ReObject: TReObject;
xt: TGuid;
FTemp: IUnknown;
begin
Result:=false

if not FileExists(BmpFile) then Exit;
try
SendMessage(Editor.Handle, em_GetOleInterFace, 0, LongInt(@FRTF));
if not Assigned(FRTF) then Exit;
if CreateILockBytesOnHGlobal(0,true,FLockBytes)<>S_OK then Exit;
if StgCreateDocfileOnILockBytes(FLockBytes,STGM_SHARE_EXCLUSIVE or STGM_CREATE or STGM_READWRITE,0,FStorage)<>S_OK then Exit;
FormatEtc.cfFormat:=0;
FormatEtc.ptd:=nil;
FormatEtc.dwAspect:=DVASPECT_CONTENT;
FormatEtc.lindex:=-1;
FormatEtc.tymed:=TYMED_NULL;
FRTF.GetClientSite(FClientSite);
//从文件中创建一个Ole对象
if OleCreateFromFile(GUID_NULL,PWideChar(WideString(BmpFile)),IID_IUnknown,0,@FormatEtc,FClientSite,FStorage,FOle)<>S_OK then Exit;
FTemp:=FOle;
FTemp.QueryInterface(IID_IOleObject, FOle);
OleSetContainedObject(FOle, true);
ReObject.cbStruct:=SizeOf(TReObject);
FOle.GetUserClassID(xt);
ReObject.clsid:=xt;
ReObject.cp:=ULong(REO_CP_SELECTION);
ReObject.dvaspect:=DVASPECT_CONTENT;
ReObject.dwFlags:=ULong(REO_STATIC) or ULong(REO_BELOWBASELINE);
ReObject.dwUser:=0;
ReObject.pOleObj:=FOle;
ReObject.pOleSite:=FClientSite;
ReObject.pstg:=FStorage;
ReObject.sizel.cx:=0;
ReObject.sizel.cy:=0;
FRTF.InsertObject(ReObject);
finally
FRTF:=nil;
FOle:=nil;
end;
Result:=true;
end;
end.
 
建议你用richview组件,非常好!
 
To linsb:
RichEdit的行间距能调整了!
现贴出来分享:
uses

RichEdit;

procedure RE_SetLineSpacing(ARichEdit: TRichEdit
lineSpacing: Byte);

var

pf2: ParaFormat2;

begin

FillChar(pf2, SizeOf(pf2), 0);

pf2.cbSize := SizeOf(PARAFORMAT2);

pf2.dwMask := PFM_LINESPACING;

pf2.bLineSpacingRule := lineSpacing;

SendMessage(ARichEdit.Handle, EM_SETPARAFORMAT, 0, Longint(@pf2));

end;

//Example: Setlinespacing to 1:

procedure TForm1.Button1Click(Sender:TObject);

begin

RE_SetLineSpacing(RichEdit1, 1);

end;


但是不知道调整的单位,有时候没有变化!??
哪位能知道???请帮忙???!!
 
好象RICHEDIT调不了行间距,用RXRICHED吧,很方便
 
To 笑江横:
RxRichEdit 也调不了啊!能否贴出点来看一下!
 
后退
顶部