請教怎樣將RxRichEdit1 的內容合併到 RxRichEdit2? |
尚未結案
|
GoldBoy
一般會員 發表:7 回覆:13 積分:4 註冊:2004-06-08 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
測試方法:
在 RxRichEdit1 與 RxRichEdit2 上各輸入些文字, 並加以變化
然後在 RxRichEdit1 上選取要插入至 RxRichEdit2 上的字
按下 Button1
將游標點在 RxRichEdit2 上要插入 RxRichEdit1 內容的位置
然後按下 Button2
即可看到 RxRichEdit1 上中被選取的內容已插入 RxRichEdit2 中
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, RichEdit, RxRichEd; type TForm1 = class(TForm) RxRichEdit1: TRxRichEdit; RxRichEdit2: TRxRichEdit; Button1: TButton; Memo1: TMemo; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; Type // These declarations are wrong in richedit.pas, the stdcall is missing. TEditStreamCallBack = function (dwCookie: Longint; pbBuff: PByte; cb: Longint; var pcb: Longint): Longint; stdcall; TEditStream = record dwCookie: Longint; dwError: Longint; pfnCallback: TEditStreamCallBack; end; var Form1: TForm1; implementation {$R *.DFM} Function EditStreamInCallback(dwCookie: Longint; pbBuff: PByte; cb: Longint; var pcb: Longint): Longint; stdcall; var theStream: TStream; dataAvail: LongInt; begin theStream := TStream(dwCookie); with theStream do begin dataAvail := Size - Position; if dataAvail <= cb then begin pcb := Read(pbBuff^, dataAvail); Result := 0; end else begin pcb := Read(pbBuff^, cb); Result := pcb; end; end; end; Function EditStreamOutCallback(dwCookie: Longint; pbBuff: PByte; cb: Longint; var pcb: Longint): Longint; stdcall; var theStream: TStream; begin theStream := TStream(dwCookie); with theStream do begin If cb > 0 Then Begin pcb := Write(pbBuff^, cb); Result := pcb; End Else Result := 0; end; end; Procedure GetRTFSelection(ARxRichEdit: TRxRichEdit; intoStream: TStream); Var editstream: TEditStream; Begin With editstream Do Begin dwCookie := Longint(intoStream); dwError := 0; pfnCallback := EditStreamOutCallBack; end; ARxRichedit.Perform(EM_STREAMOUT, SF_RTF or SFF_SELECTION, longint(@editstream)); End; Procedure PutRTFSelection(ARxRichEdit: TRxRichEdit; sourceStream: TStream); Var editstream: TEditStream; Begin With editstream Do Begin dwCookie := Longint(sourceStream); dwError := 0; pfnCallback := EditStreamInCallBack; end; ARxRichedit.Perform(EM_STREAMIN, SF_RTF or SFF_SELECTION, longint(@editstream)); End; procedure TForm1.Button1Click(Sender: TObject); Var aMemStream: TMemoryStream; begin aMemStream := TMemoryStream.Create; try GetRTFSelection(RxRichEdit1, aMemStream); aMemStream.Position := 0; memo1.Lines.LoadFromStream(aMemStream); finally aMemStream.Free; end; end; procedure TForm1.Button2Click(Sender: TObject); Var aMemStream: TMemoryStream; begin aMemStream := TMemoryStream.Create; try memo1.Lines.SaveToStream(aMemStream); aMemStream.Position := 0; PutRTFSelection(RxRichEdit2, aMemStream); finally aMemStream.Free; end; end; end.參考 Peter Below 大大的連結: http://groups.google.com.tw/groups?hl=zh-TW&lr=&ie=UTF-8&selm=VA.00000a91.0005d52b%40noname -- Everything I say is a lie. |
GoldBoy
一般會員 發表:7 回覆:13 積分:4 註冊:2004-06-08 發送簡訊給我 |
|
GoldBoy
一般會員 發表:7 回覆:13 積分:4 註冊:2004-06-08 發送簡訊給我 |
|
GoldBoy
一般會員 發表:7 回覆:13 積分:4 註冊:2004-06-08 發送簡訊給我 |
|
mayday741130
一般會員 發表:11 回覆:8 積分:3 註冊:2006-07-22 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |