【最大10000ポイント】当たる!!質問投稿キャンペーン!

いつもお世話になっております。
現在、医療システムの保守・メンテナンス業務を行っております。
先日、顧客より通常展開される画面上で入力した事項に対する、
チェック機能を追加し、チェックに引っかかった場合は、
新たな画面を起動して、その画面上で警告メッセージを表示すると共に、
チェックに対する修正を加えられるようにしたいとの要望を受けました。
現在、対応中ですが、どうしてもその画面が最前面に表示されません。

開発元に問い合わせれば済む話なのですが、基本的に回答が遅い為、
できることならこちら側で対処したいと思っております。
現在まで、社員の方の意見や本、インターネットで調べ「SetWindowsPos」等を試みましたが成功しませんでした。
元のシステムの仕様に問わず、100%最前面にフォームを表示させる
方法がございましたら、ご教授頂けますようお願い申し上げます。
なお、端末はWindows NT4.0、言語はVB5です。現在、プログラマーとして
生計をたてておりますが、経験が浅いため、知恵をお借りしたく
存知ます。何卒よろしくお願い申し上げます。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

> 試みましたが成功しませんでした。


SetWindowsPosを利用しますね。どういうふうに「成功しませんでした」なんでしょうか?

VB5とのことですから、SPなどが適応していないのかな?

Shell32.dllがVer4.71以降なら、Shellオブジェクトの「全ウィンドウを最小化」が利用できるかも?(Minimize.All)
その上で、必要なウィンドウだけ「元のサイズに」「アクティブ」にでどうでしょうか。
    • good
    • 0
この回答へのお礼

夜分遅くにご回答頂いたにも関わらず、今に至るまで
お礼どころか、何の返答も返さず、大変申し訳ございません。
深く、お詫び申し上げます。

先ほど、ご回答を拝見いたしました。
ご質問させていただきました件ですが、フォームをモーダルで
呼び出し、SetForegroundWindowを用いることで、解決されました。

お礼が遅いだけでなく、折角ご教授頂きましたことを
無視する結果となり、本当に申し訳ございません。

改めまして、お詫び申し上げます。

お礼日時:2007/06/21 00:04

AttachThreadInputを併用する必要があるみたいです。


下記リンクはC++ですが、
API使用の経験があるのであれば
「SDK版」のサンプルから
VBへのコンバートはそう難しいことではないかと思います。

参考URL:http://techtips.belution.com/ja/vc/0012/
    • good
    • 0
この回答へのお礼

今朝、ご回答頂いたにも関わらず、お礼ならびに返答が
大変遅くなりましたこと、深くお詫び申し上げます。

先ほど、ご回答を拝見いたしました。
ご質問させていただきました件ですが、フォームをモーダルで
呼び出し、SetForegroundWindowを用いることで、解決されました。

このような事を口に出せる立場ではないことは充分承知致して
おりますが、最後に、ご教授頂きましたこと、
改めて感謝致しますと共に、この度の失礼、お詫び申し上げます。

お礼日時:2007/06/21 00:15

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qコードでオブジェクトを最前面に

小4のKunpaです。
 前はレースゲームと言っていたのに今度はRPGと来て・・
いろんなジャンルに変えてスミマセン。
 ところで、オブジェクトを常に最前面に出すことは
出来ますが、コードに書くと、どうなるのでしょうか。
その前に、コードにかけるのですか。
教えて下さい。

Aベストアンサー

オブジェクトの ZOrderメソッドを使うとデザイン画面の
「最前面へ移動」「最背面へ移動」ができるようです。

(例) テキストボックス
Text1.ZOrder (0) '前方移動
Text1.ZOrder (1) '後方移動

QForm_Load と Form_Activate のタイミング

あるデータ入力アプリを作っています。
親フォーム(Form0)で番号を決め、子フォーム(Form1,Form2,Form3,Form4) でデータ入力し、それぞれの子フォームを出るとき(Unload Me) に、変数にsaveしています。それを親フォーム(Form0)で登録を選択したとき、入力データをチェックしてDBに格納しています。
すでにDB格納済のデータの場合、親フォームでDBから変数に読み込み、子フォームのForm_Loadで展開しています。
そこで困っているのは、親と子のフォームを行き来するときにデータの表示で前のが残っていたり、消えてしまったりします。
Form_LoadとForm_Activateを通過するタイミングが、ちゃんと理解できていないためコードの記述位置が不適切なのだと思います。

Form_Load と Form_Activate の実行タイミングについて、お教えください。

Aベストアンサー

Form_Loadは、フォームがロードされたときです。
ロードされる条件は、
1.フォームがスタートアップに指定されているとき、アプリが実行された直後。
2.Show メソッドが呼ばれたとき
3.Loadメソッドが呼ばれたとき
4.フォームに貼り付けられたコントロールのプロパティが参照されたとき
5.フォームに貼り付けられたコントロールのメソッドが呼ばれたとき
です。

ただし、一度ロードされると、Unloadされるまで呼ばれません。


Form_Activateは、フォームがアクティブになったとき、つまり、キャプション(ウィンドウのタイトルバー)の色が変わったときです。

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QエクセルVBAのフォームを最前面にする方法を教えてください。

エクセルVBAなのですが、UserForm1を最前面に表示して、
他のどのウインドウをアクティブにしても消えない状態にしたいのですが、
どのようなコードを書けばできるでしょうか。
VB.NETで表すとMe.TopMost = Trueとなると思うのですが、
エクセルVBAだとそのような書き方はないようです。

もうしわけございませんがご教示頂きたく、お願いいたします。m(__)m

Aベストアンサー

あらかじめ、フォームのプロパティの[ShowModal]をFalseにしておいて、以下のような方法ではダメでしょうか?
画面のアクティブイベントを利用するのは、個人的に嫌いなのですが。。。


Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOST As Long = -1
Private Const SWP_NOSIZE As Long = &H1&
Private Const SWP_NOMOVE As Long = &H2&


Private Sub UserForm_Activate()
Call SetWindowPos(GetForegroundWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

あらかじめ、フォームのプロパティの[ShowModal]をFalseにしておいて、以下のような方法ではダメでしょうか?
画面のアクティブイベントを利用するのは、個人的に嫌いなのですが。。。


Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOS...続きを読む

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

QスプレットシートのGetTextについて。

 今、VBでスプレットシートを使っています。
 スプレットシートに入っている値を配列に入れたいと思ってます。
 そのとき使う関数はスプレットシート名.GetTextですよね?
 そのGetTextの引数が行と列までは分かりますが、第3引数のVarの
 意味が分かりません。
 ヘルプを読んでも理解できなくて、ネットでも調べてみましたが、
 スプレットシートに関するページがなかなか見つからなくて
 今も分からない状態です。

 どなたかスプレットについて載っているページをご存知の方が
 いましたら、紹介してください。
 また、この場で教えてくださってもかまいません。

 すみませんが、よろしくお願いします。

Aベストアンサー

VarにGetTextされた内容が入ります。

例えばですが
fspreed1.GetText ColCnt, RowCnt, Var
と記述すると、スプレッドシートの横方向はColCntで指定しますね。
スプレッドシートの縦方向はRowCntで指定しますね。

で、Varにそのセルの内容が設定されます。

Qモーダルフォームとモードレスフォーム

この二つの違いはどういう違いがあるのでしょうか?
どなたか教えてください。お願いいたします。

Aベストアンサー

実際にフォーム1とフォーム2を作成し、フォーム1に二つのコマンドボタンを用意して、以下のコードを貼り付けて見てください。

Private Sub Command1_Click()
Form2.Show vbModal, Me
MsgBox "vbModal"
End Sub

Private Sub Command2_Click()
Form2.Show vbModeless, Me
MsgBox "vbModeless"
End Sub

Command1でもCommand2でもフォーム2が開きます。しかしMsgBoxが表示するタイミングが変わってるはずです。
Command1の場合はフォーム2が閉じたあと
Command2の場合はフォーム2が表示されたあと
にメッセージボックスが表示されます。
つまりCommand1はShowのあとのロジックを、フォーム2が閉じるまで、未処理のままとなるわけです。

画面上はフォーム2が前面、フォーム1が背面になるどちらも似たような表示に見えますが、
Command1の場合はフォーム1はフォームをクリックしても、フォーカスを持たない
Command2の場合はフォーム1はフォームをクリックすると、フォーカスを持ちえる
という点も違います。


簡単にまとめると、
vbModalの場合はフォーム2だけに作業処理を固定させたい時に使用します。vbModelessの場合はフォーム2はポップアップ的な使用方法の時に使います。

実際にフォーム1とフォーム2を作成し、フォーム1に二つのコマンドボタンを用意して、以下のコードを貼り付けて見てください。

Private Sub Command1_Click()
Form2.Show vbModal, Me
MsgBox "vbModal"
End Sub

Private Sub Command2_Click()
Form2.Show vbModeless, Me
MsgBox "vbModeless"
End Sub

Command1でもCommand2でもフォーム2が開きます。しかしMsgBoxが表示するタイミングが変わってるはずです。
Command1の場合はフォーム2が閉じたあと
Command2の場合はフォー...続きを読む

QFORMが開いているかどうかの確認方法

初歩の初歩だと思いますが。。。。

formが開いているかどうかの確認方法を教えてください。プロパティで確認できるのでしょうか?

Aベストアンサー

Form.Visible = True : 表示されている
Form.Visible = False : 表示されていない

でいいと思いますよ~

それとも二重起動禁止の方が知りたいんでしょうか?

QVBプログラムの終了

VB6.0で作成した実行ファイル(exe)を終了させても
タスクマネージャのプロセスに残ってしまい、
もう一度プログラムを起動することができません。
(プログラムで二重起動防止の処理をしています)

このプログラムをVBのラインタイムが入っていない
マシンで動かしているのですが、
やはりそれが問題なのでしょうか?
それとも別に何か原因があるのでしょうか?

Aベストアンサー

正常動作ならば、終了させれば プロセスも閉じられます。

VBのランタイムが 入ってない場合、異常終了で、ちゃんと終了してないと思われます。


人気Q&Aランキング