リッチエディットコントロールのRTF保存について

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
CURA

リッチエディットコントロールのRTF保存について

#1 投稿記事 by CURA »

初めまして。
これからお世話になるかも知れませんが、宜しくお願いします。

現在、リッチエディットコントロールを使用したテキストエディタを作っているのですが、それをRTFファイル形式で保存する方法がわかりません。
色々と調べてみたのですが、どれもCなどの解説なので、コールバック関数など、ABではどうすればよいのかわかりません。
(RADツールを使って開発しています)
宜しくお願いします。
Tomorrow
記事: 72
登録日時: 2005年6月04日(土) 10:09

Re: リッチエディットコントロールのRTF保存について

#2 投稿記事 by Tomorrow »

> 現在、リッチエディットコントロールを使用したテキストエディタを作っているのですが、それをRTFファイル形式で保存する方法がわかりません。
> 色々と調べてみたのですが、どれもCなどの解説なので、コールバック関数など、ABではどうすればよいのかわかりません。
RTFは使ったこと無いですが、エディットストリームは使ったことがあるので書きなおしてみました。
テストしてませんけど...流れは以下のようになるでしょうか?

コード: 全て選択

	Dim hFile As HANDLE	'ファイルハンドル
	Dim es As EDITSTREAM	'ストリーム使用

	'ファイルオープンしてファイルハンドルを取得
	hFile=CreateFile(lpFileName, GENERIC_WRITE, 0, ByVal 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)

	'ファイルハンドルとコールバック関数アドレスを渡す
	es.dwCookie=hFile As DWordPtr
	es.pfnCallback=AddressOf(EditStreamOutCallback)

	'ファイルにRichEditの内容をRTFで書き込む
	SendMessage(hEdit, EM_STREAMOUT, SF_RTF, VarPtr(es) As LPARAM)

	'ファイルハンドルを閉じる
	CloseHandle(hFile)


'エディットストリームコールバック
Function EditStreamOutCallback(dwCookie As DWordPtr, pbBuff As BytePtr, cb As Long, pcb As *Long) As DWord
	'ファイルへ書き込む
	If WriteFile(dwCookie As HANDLE, pbBuff, cb, pcb As DWordPtr, ByVal NULL)=FALSE Then
		EditStreamOutCallback = TRUE
	Else
		EditStreamOutCallback = FALSE
	End If
End Function

詳しくは、
http://www.kumei.ne.jp/c_lang/sdk2/sdk_133.htm
http://msdn.microsoft.com/library/defau ... frame=true
http://yokohama.cool.ne.jp/chokuto/uraw ... ertf1.html

などを自分で調べてください。
CURA

ありがとうございました

#3 投稿記事 by CURA »

なんとか、無事にRTFで保存することができました。
EDITSTREAM構造体はABでは未定義のようだったので、自分で定義する必要がありましたが、RTFファイルは作られても空だったり、強制終了してしまったりと、色々ありましたが、成功しました。
今度はそれの読み込みをやってみようと思います。
Tomorrowさんありがとうございました。
返信する