ページ 11

フォントダイアログ

Posted: 2006年2月12日(日) 19:12
by ぶりっち
メニューからフォントダイアログを表示させるソースを教えてください。

易しく、丁寧に、教えてくれるかた、大歓迎。

Posted: 2006年2月12日(日) 23:36
by ゲスト
たとえばこんな感じのメニューハンドラを作ります。
(ここではウィンドウハンドル:hMainWnd,メニューID:IDM_FONTとしています)

メニューハンドラを作るまではWin32プログラミング講座のステップ6~7の辺りを参考にしてみてください。

コード: 全て選択

Sub MainWnd_IDM_FONT_MenuClick()
	Dim cf As CHOOSEFONT
	Dim lf As LOGFONT
	With cf
		.lStructSize = Len(cf)
		.hwndOwner = hMainWnd
		.lpLogFont = VarPtr(lf)
		.Flags = CF_SCREENFONTS Or CF_NOVERTFONTS
	End With
	If ChooseFont(cf) <> FALSE Then
		Dim hfnt As HFONT
		hfnt = CreateFontIndirect(lf)
		DeleteObject(hfnt)
	End If
End Sub
フォントダイアログを呼び出しているのがChooseFont関数です。
こいつがFALSE以外を返したときはユーザーがフォントを選んでくれたと言うことです。
そのとき,cf.lpLogFontの先(今回はlf)には選ばれたフォントの情報が入っています。

この例ではとりあえずすぐにフォントを作成(CreateFontIndirect)しています。
ここでは特に用もないのですぐに削除(DeleteObject)していますけど。

しかしいつもそうするわけではなく,フォントをどう使うかによってフォントを作る時,消す時は変わります。
この例のようにすぐに作って消すのではないことのほうが多いです。
何に,そしてどのようにフォントを使うかがわからないと
いつ作っていつ消せばよいというアドバイスはできないです。

Posted: 2006年2月12日(日) 23:38
by イグトランス
上は私です。うっかりログインし忘れてしまい,失礼いたしました。

イグトランスさんありがとうございました。

Posted: 2006年2月13日(月) 01:06
by ぶりっち
ありがとうございました。

イグトランスさんのおかげで、問題が解決しました。

これからいろいろお世話になります。

私は、多田 篤志といいます。

早速ですが、申し訳ありません。

印刷するためのダイアログを表示するソースもご存知でしたらおしえていただけませんか。

フォントのことで。

Posted: 2006年2月13日(月) 01:11
by ぶりっち
初心者ですみません。

先ほどのフォントのダイアログのことなのですが。

ダイアログの設定をそのままエディットボックスに反映するソースを教えていただけませんか。

Posted: 2006年2月16日(木) 00:08
by konisi
ところで、イグトランスさんがログオフした状態から書き込みするのをよく見るんですけど・・・毎回クッキー消してるんですか?>>イグトランスさん

Posted: 2006年2月16日(木) 07:48
by イグトランス
> ところで、イグトランスさんがログオフした状態から書き込みするのをよく見るんですけど・・・毎回クッキー消してるんですか?>>イグトランスさん

そうです。自動ログインは使っていません。
一応,普段使っているPCは自分以外の人も使うので(と言っても家族だけですが)。
これがログインして数時間経ったり,ADSLの回線がなんらかの原因で切れると
そこでログアウトされてしまうようなのですけど,それに気付かずつい書き込んでしまったというのが真相です。

Re: フォントのことで。

Posted: 2006年2月18日(土) 10:38
by Sinryow
ダイアログの設定をそのままエディットボックスに反映するソースを教えていただけませんか。
コントロールのフォントを変更するには,WM_SETFONTメッセージを使います。(ABのヘルプに記載はなし。)
MSDNの記述(英語)
ちょくとさんのページより

サンプルを作ってみましたのでどうぞ。
http://www.sinryow.net/hitori/Font.lzh

Posted: 2006年2月18日(土) 14:36
by イグトランス
実はこっちで回答済みです。
http://www.discoversoft.net/forum/viewtopic.php?t=729

すみません,こっちにもその旨書いておくべきでしたね。

上書き保存の方法は

Posted: 2006年2月19日(日) 02:38
by ぶりっち
上書き保存の方法は

Posted: 2006年2月19日(日) 10:08
by イグトランス
#Win32プログラミング講座の「テキストエディッタを作る」では上書き保存と名前をつけて保存がないですね。

まず上書き保存といっても新規作成した後,また名前をつけて保存を行っていない場合は名前をつけて保存のダイアログが出てくるのが一般的です。
そうでない場合,当たり前ですが上書き保存では現在開いているファイル名で保存します。

この挙動を実現するにはファイルを開いたときにファイル名をグローバル変数に取っておけばよいでしょう。
その変数の中身が空なら名前をつけて保存と言うことにします。

また実際にファイルを保存する処理は名前をつけて保存と同じですから1つの関数にします。
上書き保存のメニューIDをIDM_SAVEに,名前をつけて保存はIDM_SAVEASとします。

また保存の処理の中ではエディットボックスにEM_SETMODIFYを送っていますが,
これは保存したことをエディットボックスに伝えるためです。
試しにコメントアウトして試してみると違いが出るのではないでしょうか?

コード: 全て選択


' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim FileName As String

コード: 全て選択


Sub MainWnd_IDM_SAVE_MenuClick()
	If Len(FileName) = 0 Then
		MainWnd_IDM_SAVEAS_MenuClick() '名前をつけて保存
	Else
		FileSave(StrPtr(FiliName))
	EndIf
End Sub

Sub FileSave(pFileName As *Byte)
	Dim hFile As HANDLE
	hFile = CreateFile(pFileName, GENERIC_WRITE, 0,
		ByVal 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
	If hFile = INVALID_HANDLE_VALUE Then
		MessageBox(hMainWnd,"ファイルオープンに失敗しました。", "TextEditor", MB_OK or MB_ICONEXCLAMATION)
		Exit Sub
	End If

	Dim Text As String
	Dim Length As Long
	Length = GetDlgItemTextStr(hMainWnd, EditBox1, Text)
	Dim WrittenBytes As DWord
	WriteFile(hFile, StrPtr(Text), Length, VarPtr(WrittenBytes), ByVal 0)
	CloseHandle(hFile)

	SendDlgItemMessage(hMainWnd, EditBox1, EM_SETMODIFY, FALSE, 0)
End Sub
ファイルを開くときにはFileNameへファイル名を入れて置いてください。

フォントの色変更

Posted: 2006年2月19日(日) 22:25
by フォントの色変更
ありがとうございました。

フォントの変更方法を知っていたら教えてください。