ファイルを開くダイアログを最前面にしたいのですが。

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
矢田裕康
記事: 13
登録日時: 2005年10月01日(土) 18:38

ファイルを開くダイアログを最前面にしたいのですが。

#1 投稿記事 by 矢田裕康 »

はじめまして、超初心者です。
ABコードチップで入手した#N88BASICコードにWin32プログラミング講座の「DLLを作る」で作成した「開く」を追加したところ、「開く」ダイアログがグレー表示でBasicウィンドウの下になってしまいます。ファイルを選択するためには上になっていないと不便です。どうすればよいですか?
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

Re: ファイルを開くダイアログを最前面にしたいのですが。

#2 投稿記事 by イグトランス »

そのDLL関数の最初の引数hWndに、関数を呼び出す側ではAB3以上なら_PromptSys_hWnd、AB2ならOwnerWnd()を指定してみてはどうでしょうか。
これでダイアログはBasicウィンドウの「子」となるのでBasicウィンドウの後ろには行かなくなるはずです。
矢田裕康
記事: 13
登録日時: 2005年10月01日(土) 18:38

ファイルを開くダイアログを最前面にしたいのですが。

#3 投稿記事 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
マティ
記事: 161
登録日時: 2005年8月23日(火) 00:15
お住まい: 沖縄県
連絡する:

#4 投稿記事 by マティ »

RADツールを使用して作成しているのであれば、親のハンドルを指定してください。
ハンドル名は、ソースコードの上から6行目ぐらいに

コード: 全て選択


' ウィンドウ ハンドル: hMainWnd
※この場合のhWndはhMainWndです。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

Re: ファイルを開くダイアログを最前面にしたいのですが。

#5 投稿記事 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はないと思いますよ。
矢田裕康
記事: 13
登録日時: 2005年10月01日(土) 18:38

ファイルを開くダイアログを最前面にしたいのですが。

#6 投稿記事 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も変えるのでしょうか?
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#7 投稿記事 by イグトランス »

そうです。
GetFileDlg(_PromptSys_hWnd, StrPtr(buf), StrPtr(FileFilter), 1)としてください。
Declare宣言での引数名はProjectEditorがパラメータヒントに使う程度なので、どんな名前でもプログラムには何の影響もありません。
矢田裕康
記事: 13
登録日時: 2005年10月01日(土) 18:38

ファイルを開くダイアログを最前面にしたいのですが。

#8 投稿記事 by 矢田裕康 »

有難うございました。できました。ABはオフィシャルユーザーズガイドを半分ほど読んだだけで大それた事を考え付きお手数を掛けました。プログラミングはエクセルVBAだけしかやったことがないので、ポインタとか変数の型にとまどっています。
返信する