ページ 1 / 1
ファイルを開くダイアログを最前面にしたいのですが。
Posted: 2005年10月01日(土) 19:27
by 矢田裕康
はじめまして、超初心者です。
ABコードチップで入手した#N88BASICコードにWin32プログラミング講座の「DLLを作る」で作成した「開く」を追加したところ、「開く」ダイアログがグレー表示でBasicウィンドウの下になってしまいます。ファイルを選択するためには上になっていないと不便です。どうすればよいですか?
Re: ファイルを開くダイアログを最前面にしたいのですが。
Posted: 2005年10月01日(土) 19:47
by イグトランス
そのDLL関数の最初の引数hWndに、関数を呼び出す側ではAB3以上なら_PromptSys_hWnd、AB2ならOwnerWnd()を指定してみてはどうでしょうか。
これでダイアログはBasicウィンドウの「子」となるのでBasicウィンドウの後ろには行かなくなるはずです。
ファイルを開くダイアログを最前面にしたいのですが。
Posted: 2005年10月01日(土) 22:50
by 矢田裕康
早速解答ありがとうございます。ソフトはAB4に更新しています。
DLLの2箇所を変更してみましたがうまく行きません。
Function Export GetFileDlg(PromptSys_hWnd As Long,lpBuf As BytePtr,lpFilter As BytePtr,bOpen As Long) As Long
ofn.hwndOwner=PromptSys_hWnd
Posted: 2005年10月01日(土) 23:50
by マティ
RADツールを使用して作成しているのであれば、親のハンドルを指定してください。
ハンドル名は、ソースコードの上から6行目ぐらいに
コード: 全て選択
' ウィンドウ ハンドル: hMainWnd
※この場合のhWndは
hMainWndです。
Re: ファイルを開くダイアログを最前面にしたいのですが。
Posted: 2005年10月02日(日) 09:41
by イグトランス
> Function Export GetFileDlg(PromptSys_hWnd As Long,lpBuf As BytePtr,lpFilter As BytePtr,bOpen As Long) As Long
>
> ofn.hwndOwner=PromptSys_hWnd
すいません、逆です。DLLのコードではなく、DLLを「使う側」のコードを書き換えてください。
To マティさん
最初に#N88BASICと書いてあるのでおそらくhMainWndはないと思いますよ。
ファイルを開くダイアログを最前面にしたいのですが。
Posted: 2005年10月02日(日) 19:40
by 矢田裕康
お手数を掛けます。DLLを元に戻して、呼び出し側を変更してみましたがうまく行きません。元になるコードは「コードの切れ端」にある hiraさんの[AB4]GIF画像やJPEG画像の描画です。この中の "test.jpg"を「開く」ダイアログで指定できるのではないかと思いました。そこで以下のように追加しました。
'追加
Declare function GetFileDlg Lib "FileDlg"(_PromptSys_hWnd As Long,lpBuf As BytePtr,lpFilter As BytePtr,bOpen As Long) As Long
Dim lpStream As LPSTREAM
Dim lpPicture As LPPICTURE
Dim hGlobal As HGLOBAL,pGlobal As VoidPtr
Dim hFile As HANDLE
Dim dwSize As DWord,dwDummy As DWord
Dim iWidth As Long,iHeight As Long
Dim hDC As HDC
Dim udtHiMetric As SIZE,udtPixel As SIZE
'追加
Dim i As Long
Dim buf As String
Dim FileFilter As String
buf=ZeroString(MAX_PATH)
FileFilter=Ex"Jpeg File(*.JPG,*.JPEG)\0*.jpg\0すべてのイメージ・ファイル(*.*)\0*\0"
i=GetFileDlg(0,StrPtr(buf),StrPtr(FileFilter),1)
If i Then
hFile=CreateFile(buf,GENERIC_READ,0,ByVal NULL,OPEN_EXISTING,0,0)
End If
If hFile<>INVALID_HANDLE_VALUE Then
以下略
i=GetFileDlg(0,StrPtr(buf),StrPtr(FileFilter),1)の 0も変えるのでしょうか?
Posted: 2005年10月02日(日) 19:48
by イグトランス
そうです。
GetFileDlg(_PromptSys_hWnd, StrPtr(buf), StrPtr(FileFilter), 1)としてください。
Declare宣言での引数名はProjectEditorがパラメータヒントに使う程度なので、どんな名前でもプログラムには何の影響もありません。
ファイルを開くダイアログを最前面にしたいのですが。
Posted: 2005年10月02日(日) 22:11
by 矢田裕康
有難うございました。できました。ABはオフィシャルユーザーズガイドを半分ほど読んだだけで大それた事を考え付きお手数を掛けました。プログラミングはエクセルVBAだけしかやったことがないので、ポインタとか変数の型にとまどっています。