掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
RitchEdit内容の一部移動をクリップボードを壊さないで行う (ID:14796)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ちょっとがんばって、教えていただいたコードをBCB上でうまく動作させることに成功しました。解決とさせていただきます。 大変たすかりました。 ちなみにBCBだと以下のようになりました。(ここにBCBのコードを書くことは恐縮ですが・・・・) <<ヘッダ>> enum TEditStreamMode { esmWrite , esmRead }; DWORD CALLBACK EditStreamCallback(DWORD_PTR dwCookie,LPBYTE pbBuff, LONG cb, LONG *pcb); class TForm1 : public TForm { ★省略★ public: // ユーザー宣言 TEditStream FStreamRec; //{←構造体です} TMemoryStream *FStream; }; <<本体>> //RichTextメモり確保用コールバック関数 DWORD CALLBACK EditStreamCallback(DWORD_PTR dwCookie,LPBYTE pbBuff, LONG cb, LONG *pcb) { try { switch( TEditStreamMode(dwCookie) ) { case esmWrite: *pcb = (LONG)Form1->FStream->Write(pbBuff,cb); break; case esmRead : *pcb = (LONG)Form1->FStream->Read(pbBuff,cb); break; } } catch ( ... ) { return 1; //失敗nonzero } return 0; //成功zero } void __fastcall TForm1::FormCreate(TObject *Sender) { FStream = new TMemoryStream(); FStreamRec.pfnCallback = EditStreamCallback; } void __fastcall TForm1::FormDestroy(TObject *Sender) { delete FStream; } //一発でRichEdit1からRichEdit2へコピペ void __fastcall TForm1::Button1Click(TObject *Sender) { FStream->Clear(); FStreamRec.dwCookie = (DWORD_PTR)esmWrite; RichEdit1->Perform( EM_STREAMOUT , SF_RTF | SFF_SELECTION , (LPARAM)&FStreamRec ); FStream->Position = 0 ; FStreamRec.dwCookie = (DWORD_PTR)esmRead; RichEdit2->Perform( EM_STREAMIN , SF_RTF | SFF_SELECTION , (LPARAM)&FStreamRec ); } 動くには動くんですが、一カ所不安なところがあります。 コールバック関数のところで *pcb = (LONG)Form1->FStream->Write(pbBuff,cb); *pcb = (LONG)Form1->FStream->Read(pbBuff,cb); で、pcbポインタの指すlong値を、TMemoryStreamのWriteやReadメソッドの戻り値に置き換えていますが、ちゃんとDelphiのコードと同じ意味のことをしているのでしょうか?ObjectPascalを不正確に覚えているので、自身がなくて・・・・・。すみません。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.