ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月18日(木) 18:22

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年6月20日(月) 00:39 
フォントの大きさを一文字ごとに変えてスタティックテキストに文字を書きたいと思っています。取りあえずフォントをかえるのには

1)CreateFont()関数で変更用のフォントを作成する。
2)SendDlgItemMessage()で設定
3)SetWindowText()で文字を描写
4)使い終わったらDeleteObject()で削除

と言った感じで出来るのはわかったのですが一文字ごとに変えることが出来ません。どのようにしたらよいのでしょうか?


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年6月20日(月) 19:56 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
スタティックテキストは1文字ずつフォントを帰るというようなことは出来ないと思います。
TextOutやGetTextExtentPoint32などを駆使して自分で描かなければならないと思います。


通報する
ページトップ
投稿記事Posted: 2005年6月22日(水) 00:30 
>スタティックテキストは1文字ずつフォントを変えるというようなことは出来ないと思います

どうもそのようなのでRichEditコントロールで実現させようと思っています。とりあえずこないだの文章では伝わりにくかった面が有りますのでやりたいことをもう少し具体的に言うと化学式のようにC6H5OHの数字の部分を表示させるとき(計算結果と同時に化学式を表示したい)数字の部分を下付文字にしたいと考えています。RichEditではどうやら出来そうなので現在使い方を勉強中です。とりあえずテストをしているのですが残念ながらうまくいっていません。下のコードは一度文字を表示させて文字を選択してその部分の表示を変えようとしているのですが全く変化がありません。なぜなのでしょうか?
コード:
Dim text1 as string
Dim cf1 As CHARFORMAT
Dim cf2 As CHARFORMAT
Dim hrEdit as Long
Dim hLib as Long
Const RichEdit = &HFF00 
Const MaxText = 1024

Sub MainWnd_Destroy()
	DestroyWindow(hrEdit) 'リッチエディットを破棄(1)
	FreeLibrary(hLib) 'ライブラリを開放(2)	
	font_test_DestroyObjects()
	PostQuitMessage(0)
End Sub


Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
	'RICHED32.DLL のロード
	hLib = LoadLibrary("RICHED32.DLL")

	'リッチエディットコントロールの作成
	hrEdit = CreateWindowEx(0, _ '拡張ウィンドウスタイル
			"RichEdit", _ 'ウィンドウクラス名
			"", _ 'ウィンドウタイトル
			WS_CHILD or WS_VISIBLE or WS_VSCROLL or _
			ES_MULTILINE or ES_AUTOVSCROLL, _
			10, 10, 560, 460, _ 'あとで、リサイズイベントで大きさを変える
			hMainWnd, _ '親ウィンドウ
			RichEdit, _ 'コントロールID
			GetModuleHandle(0), _ 'インスタンスハンドル
			0)

	'テキストの上限を設定
	SendMessage(hrEdit,EM_EXLIMITTEXT,0,MaxText)
	
	text1 = "1つ目"

With cf1
	.cbSize = SizeOf(CHARFORMAT)
	.dwMask = CFM_FACE or CFM_OFFSET or CFM_SIZE or CFM_CHARSET
	.yHeight = 22
	.bCharSet = 128
	.yOffset = -110 
	lstrcpy(.szFaceName,"MS ゴシック")
End With

With cf2
	.cbSize = SizeOf(CHARFORMAT)
	.dwMask = CFM_FACE or CFM_SIZE or CFM_CHARSET
	.yHeight =270 
	.bCharSet = 128
	lstrcpy(.szFaceName,"MS ゴシック")
End With
	
	SendMessage(hrEdit,EM_SETCHARFORMAT,SCF_ALL,VarPtr(cf2))
	SetWindowText(hrEdit,text1) '一度文字をセットする。

	SendMessage(hrEdit,EM_SETSEL,1,3) '文字を選択する
	SendMessage(hrEdit,EM_SETCHARFORMAT,SCF_SELECTION,VarPtr(cf1))'選択箇所の文字の設定を変える。
End Sub


通報する
ページトップ
   
 記事の件名: やっとできた!
投稿記事Posted: 2005年6月22日(水) 17:57 
自己レスです。とりあえず過去ログ等などみていると、CHARFORMAT構造体のサイズが「60」となっていることに気がつきました。そこで以下の様に修正したところちゃんと変更できる様になりました。
コード:
With cf1 
    .cbSize = SizeOf(CHARFORMAT) + 2   '+2をすることで60になる
    .dwMask = CFM_FACE or CFM_OFFSET or CFM_SIZE or CFM_CHARSET 
    .yHeight = 22 
    .bCharSet = 128 
    .yOffset = -110 
    lstrcpy(.szFaceName,"MS ゴシック") 
End With 

With cf2 
    .cbSize = 60                       '素直に60と書いた方が楽ですね… 
    .dwMask = CFM_FACE or CFM_SIZE or CFM_CHARSET 
    .yHeight =270 
    .bCharSet = 128 
    lstrcpy(.szFaceName,"MS ゴシック") 
End With 


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Ahrefs [Bot] & ゲスト[8人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean