ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
C1000
記事: 185 登録日時: 2006年5月07日(日) 17:16
お住まい: 宮城県
連絡する:
#1
投稿記事
by C1000 » 2006年10月06日(金) 21:02
リッチエディットで、選択されているところの書式情報を取得しようとしているのですが、取得できません。(デバッグで、メンバ変数に何も入らない)どこが原因なのでしょうか。
WinXp Homeでriched20.dllを使用しています。
コード: 全て選択
Dim cfm2 As CHARFORMAT
SendMessage(hEdit,EM_GETCHARFORMAT,SCF_DEFAULT,VarPtr(cfm2))
hEditにはリッチエディットコントロールの、ハンドルが入っています。
7
記事: 473 登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:
#2
投稿記事
by 7 » 2006年10月06日(金) 21:09
> リッチエディットで、選択されているところの書式情報を取得しようとしているのですが、取得できません。(デバッグで、メンバ変数に何も入らない)どこが原因なのでしょうか。
恐らく
wParam に
SCF_SELECTION を指定すると改善されると思います。
EM_GETCHARFORMAT
C1000
記事: 185 登録日時: 2006年5月07日(日) 17:16
お住まい: 宮城県
連絡する:
#3
投稿記事
by C1000 » 2006年10月06日(金) 21:43
すいません。そこは間違いです。SCF_SELECTIONを指定していました。
正しいのコードを実行しても取得できないので、ほかのところに原因があると思うのですが...
7
記事: 473 登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:
#4
投稿記事
by 7 » 2006年10月06日(金) 22:29
> すいません。そこは間違いです。SCF_SELECTIONを指定していました。
> 正しいのコードを実行しても取得できないので、ほかのところに原因があると思うのですが...
では、EM_GETCHARFORMAT を飛ばす前に、CHARFORMAT構造体のcbSize に構造体のサイズを指定してみてはどうでしょう?
C1000
記事: 185 登録日時: 2006年5月07日(日) 17:16
お住まい: 宮城県
連絡する:
#5
投稿記事
by C1000 » 2006年10月07日(土) 08:03
うまくい書式情報を取得できました。7さん、ありがとうございます。
C1000
記事: 185 登録日時: 2006年5月07日(日) 17:16
お住まい: 宮城県
連絡する:
#6
投稿記事
by C1000 » 2006年10月07日(土) 09:27
もうひとつわからないことが出たので、質問します。
フォント選択ダイアログを表示するのに、次のようにdwMaskメンバを参照し、値を設定しているのですが、イタリック体、下線、打ち消し線、のメンバが、常に1になります。どこが原因なのでしょうか。(前の質問のコードの続きに書いています。)
コード: 全て選択
Dim lfd As LOGFONT 'フォント情報
With lfd 'フォント情報の設定
If cfm2.dwMask and CFE_BOLD Then
cfm2.yHeight=1400
End If
If cfm2.dwMask and CFE_ITALIC Then
.lfItalic=1
End If
If cfm2.dwMask and CFE_UNDERLINE Then
.lfUnderline=1
End If
If cfm2.dwMask and CFE_STRIKEOUT Then
.lfStrikeOut=1
End If
End With
7
記事: 473 登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:
#7
投稿記事
by 7 » 2006年10月07日(土) 19:27
> フォント選択ダイアログを表示するのに、次のようにdwMaskメンバを参照し、値を設定しているのですが、イタリック体、下線、打ち消し線、のメンバが、常に1になります。どこが原因なのでしょうか。
常に
1 になるっていうのは、書式がイタリック体じゃなくても
1 になるっていうことでしょうか?
CHARFORMAT構造体を見てみたんですけど、文字のスタイルを判定するのは
dwMask メンバを調べるより
dwEffects を調べた方がいいような気がしました。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします] コード: 全て選択
Dim lfd As LOGFONT 'フォント情報
If cfm2.dwEffects And CFE_BOLD Then cfm2.yHeight=1400
If cfm2.dwEffects And CFE_ITALIC Then lfd.lfItalic=1
If cfm2.dwEffects And CFE_UNDERLINE Then lfd.lfUnderline=1
If cfm2.dwEffects And CFE_STRIKEOUT Then lfd.lfStrikeOut=1
試してないのでダメかもしれません...。
C1000
記事: 185 登録日時: 2006年5月07日(日) 17:16
お住まい: 宮城県
連絡する:
#8
投稿記事
by C1000 » 2006年10月07日(土) 19:53
うまく出来ました。7さんありがとうございました。