はじめまして、超初心者です。
ABコードチップで入手した#N88BASICコードにWin32プログラミング講座の「DLLを作る」で作成した「開く」を追加したところ、「開く」ダイアログがグレー表示でBasicウィンドウの下になってしまいます。ファイルを選択するためには上になっていないと不便です。どうすればよいですか?
ファイルを開くダイアログを最前面にしたいのですが。
Re: ファイルを開くダイアログを最前面にしたいのですが。
そのDLL関数の最初の引数hWndに、関数を呼び出す側ではAB3以上なら_PromptSys_hWnd、AB2ならOwnerWnd()を指定してみてはどうでしょうか。
これでダイアログはBasicウィンドウの「子」となるのでBasicウィンドウの後ろには行かなくなるはずです。
これでダイアログはBasicウィンドウの「子」となるのでBasicウィンドウの後ろには行かなくなるはずです。
ファイルを開くダイアログを最前面にしたいのですが。
早速解答ありがとうございます。ソフトは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
DLLの2箇所を変更してみましたがうまく行きません。
Function Export GetFileDlg(PromptSys_hWnd As Long,lpBuf As BytePtr,lpFilter As BytePtr,bOpen As Long) As Long
ofn.hwndOwner=PromptSys_hWnd
Re: ファイルを開くダイアログを最前面にしたいのですが。
> 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はないと思いますよ。
>
> ofn.hwndOwner=PromptSys_hWnd
すいません、逆です。DLLのコードではなく、DLLを「使う側」のコードを書き換えてください。
To マティさん
最初に#N88BASICと書いてあるのでおそらくhMainWndはないと思いますよ。
ファイルを開くダイアログを最前面にしたいのですが。
お手数を掛けます。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も変えるのでしょうか?
'追加
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も変えるのでしょうか?
ファイルを開くダイアログを最前面にしたいのですが。
有難うございました。できました。ABはオフィシャルユーザーズガイドを半分ほど読んだだけで大それた事を考え付きお手数を掛けました。プログラミングはエクセルVBAだけしかやったことがないので、ポインタとか変数の型にとまどっています。