richeditの内容コピーしたい。

解決


po  2005-03-13 07:32:58  No: 13729

こんばんわ。
質問ですが、richedit1の内容を色やフォントも同じようにrichedit2にコピーしたいのですが、文字しかコピーできません。
どのようにすれば、色、フォントもコピーすることができるか教えてください。
よろしくお願いします。


どうやってる?  2005-03-13 13:57:52  No: 13730

>文字しかコピーできません。
そんなことないけど。


po  2005-03-13 22:27:55  No: 13731

>そんなことないけど。
どうやってるのでしょうか。。
私は、richedit2.text  :=  richedit1.text;,richedit2.Lines.Text := richedit1.Lines.Text;などしてるんですが。。


Mr.XRAY  URL  2005-03-13 23:05:03  No: 13732

>私は、richedit2.text  :=  richedit1

質問の時は,最初にどのようにやってうまくいかなかったのか,
このようにコードを提示するいいですね.というのは...,ご自分で考えて
下さい.そして環境も.
以下の程度のコードでしたら,十分掲示板にUPできると思いますが... 
(1行に全部書いているのは,いかにも簡単なテストをしていないという
開発の姿勢がみえみえです)

文章から,RichEditの内容全部を他のRichEditのコピーするということで
いいんですよね.

RichEditで全文を選択して[Ctrl]+[C]で,他のRichEditにフォーカスを移動
して[Crtl]+[V]とすれば同じものが貼付けられます.これは視覚効果が必
要な場合にはいいでしょう.

procedure TForm1.Button1Click(Sender: TObject);
begin
  RichEdit1.SelectAll;
  RichEdit1.CopyToClipboard;
  RichEdit2.PasteFromClipboard;
end;

また,一度ファイルに保存して,それを読込むことによっても可能です.
この場合,ディクス上ではなく,メモリ上にファイルを作成する
TMemoryStreamを使用すると便利です.
新規プロジェクトにRichEditを2つ,Buttonを1つ配置して,以下のコード
を実行してみて下さい.

//================================================================
//  RichEditの全文を他のRichEditにコピー
//================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
     i : Integer;
     AStream  : TMemoryStream;
begin
     RichEdit1.Clear;
     RichEdit1.Lines.Add('テスト用の文字列');
     with RichEdit1.SelAttributes do begin
       Color := clRed;
       Height:= Height+5;
     end;
     RichEdit1.Lines.Add('エディトテキスト');

     AStream  :=TMemoryStream.Create;
     try
       RichEdit1.Lines.SaveToStream(AStream);
       AStream.Position:=0;
       RichEdit2.Lines.LoadFromStream(AStream);
     finally
       AStream.Free;
     end;
end;


Fusa  2005-03-14 04:08:39  No: 13733

TMemoryStreamを使って
RichTextの一部分をコピーペーストするには
こちらのようにするようです。
http://www2.big.or.jp/~osamu/Delphi/browse.cgi?index=33799

uses RichEdit;を追加
type  TEditStreamMode=(esmWrite,esmRead);
  TForm1 = class(TForm)
  public
    FStreamRec: TEditStream; 
    FStream: TMemoryStream;
  end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  FStream := TMemoryStream.Create;
  FStreamRec.pfnCallback := @EditStreamCallBack;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FStream.Free;
end;

function EditStreamCallBack(dwCookie: Longint; pbBuff: PByte;
    cb: Longint; var pcb: Longint): Longint; stdcall;
begin
  try
    case TEditStreamMode(dwCookie) of
      esmWrite: pcb:= Form1.FStream.Write(pbBuff^,cb);
      esmRead : pcb:= Form1.FStream.Read(pbBuff^,cb);
    end;
    Result:= 0;
  except Result:= 1; end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin //コピー処理
  FStream.Clear;
  FStreamRec.dwCookie := Longint(esmWrite);
  RichEdit1.Perform( EM_STREAMOUT,SF_RTF or SFF_SELECTION,Longint(@FStreamRec));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin //貼り付け処理
  FStream.Position:=0;
  FStreamRec.dwCookie := Integer(esmRead);
  RichEdit2.Perform( EM_STREAMIN,SF_RTF or SFF_SELECTION,Longint(@FStreamRec));
end;


po  2005-03-14 10:04:12  No: 13734

どうもありがとうございました。
よく考えずに質問してしまってすみませんでした。他人に頼ってばかりではいけないのは自分でもわかります。
これからは自分でよく考えてから投稿します。


Mr.XRAY  URL  2005-03-15 02:47:08  No: 13735

>他人に頼ってばかりではいけないのは

ここは私が管理している掲示板ではないのですが,
私個人は,どんなにFAQに相当する質問でも気軽に対話してもいいのでは
ないかと思っています.

ただ,早く解決したいのであれば,内容というか,うまく言えないので
すが... 考えてもいいのではと...
ということなんです.

だって,本当に質問内容に文句があれば,レスなんかしませんよ.
他人のことですからね. (^^ゞ
困った時はお互い様です.

で,どうなったんでしたっけ.


po  2005-03-15 10:51:58  No: 13736

レス遅くなってすみません。

Mr.XRAYさん、Fusaさん感謝します。
きちんと動作確認いたしました。
Mr.XRAYのi:integerは必要ありませんね(^^;)
私のような無礼者にも回答していただいて、感謝しています。
本当に、ありがとうございます。


po  2005-03-15 10:56:48  No: 13737

>Mr.XRAYのi:integerは必要ありませんね(^^;)
Mr.XRAYさんです。。呼び捨てはいけませんね;;。


Fusa  2005-03-16 01:54:09  No: 13738

Mrには敬称の意味もありますし...
と、いうことはさておき(^-^;

"わからないことは質問する。"

これは勉強する上で基本です。
他人に頼りましょう。
私は他人に頼られるのが好きですし心地よいものですよ。

Mr.XRAYさんのおっしゃるように
「どんなにFAQに相当する質問でも気軽に対話してもいいのでは」
ということに大賛成です。
※転じて"過去ログ嫁"だけ言うような人は超嫌いです。(;´▽`A``

質問する方の質問の仕方も、発言するという経験を積む事で上手になりますし
回答する方の回答の仕方も、回答する経験で上手になっていくものですよ。

Mr.XRAYさんには釈迦に説法になってしまうのですが
私はこれらのページがとても勉強になりました。

質問への答え方
http://www.linux.or.jp/column/20020222.html
教えるときの心がけ
http://www.hyuki.com/writing/teach.html

質問内容は無礼ではないと思いますし
教える方も勉強になっていますので
どんどん発言するのがよいのじゃないでしょうか。

と、雑談ばかりになってしまいましたが
解決して何よりです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加