こんばんわ。
質問ですが、richedit1の内容を色やフォントも同じようにrichedit2にコピーしたいのですが、文字しかコピーできません。
どのようにすれば、色、フォントもコピーすることができるか教えてください。
よろしくお願いします。
>文字しかコピーできません。
そんなことないけど。
>そんなことないけど。
どうやってるのでしょうか。。
私は、richedit2.text := richedit1.text;,richedit2.Lines.Text := richedit1.Lines.Text;などしてるんですが。。
>私は、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;
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;
どうもありがとうございました。
よく考えずに質問してしまってすみませんでした。他人に頼ってばかりではいけないのは自分でもわかります。
これからは自分でよく考えてから投稿します。
>他人に頼ってばかりではいけないのは
ここは私が管理している掲示板ではないのですが,
私個人は,どんなにFAQに相当する質問でも気軽に対話してもいいのでは
ないかと思っています.
ただ,早く解決したいのであれば,内容というか,うまく言えないので
すが... 考えてもいいのではと...
ということなんです.
だって,本当に質問内容に文句があれば,レスなんかしませんよ.
他人のことですからね. (^^ゞ
困った時はお互い様です.
で,どうなったんでしたっけ.
レス遅くなってすみません。
Mr.XRAYさん、Fusaさん感謝します。
きちんと動作確認いたしました。
Mr.XRAYのi:integerは必要ありませんね(^^;)
私のような無礼者にも回答していただいて、感謝しています。
本当に、ありがとうございます。
>Mr.XRAYのi:integerは必要ありませんね(^^;)
Mr.XRAYさんです。。呼び捨てはいけませんね;;。
Mrには敬称の意味もありますし...
と、いうことはさておき(^-^;
"わからないことは質問する。"
これは勉強する上で基本です。
他人に頼りましょう。
私は他人に頼られるのが好きですし心地よいものですよ。
Mr.XRAYさんのおっしゃるように
「どんなにFAQに相当する質問でも気軽に対話してもいいのでは」
ということに大賛成です。
※転じて"過去ログ嫁"だけ言うような人は超嫌いです。(;´▽`A``
質問する方の質問の仕方も、発言するという経験を積む事で上手になりますし
回答する方の回答の仕方も、回答する経験で上手になっていくものですよ。
Mr.XRAYさんには釈迦に説法になってしまうのですが
私はこれらのページがとても勉強になりました。
質問への答え方
http://www.linux.or.jp/column/20020222.html
教えるときの心がけ
http://www.hyuki.com/writing/teach.html
質問内容は無礼ではないと思いますし
教える方も勉強になっていますので
どんどん発言するのがよいのじゃないでしょうか。
と、雑談ばかりになってしまいましたが
解決して何よりです。
ツイート | ![]() |