• ベストアンサー

最小化時の事で・・・

最小化時の事についての質問です。(^^; ShowInTaskbar=Falseの状態で最小化ボタンを押すと、 アニメーションが下の方に向かって行われるのですが、 このアニメーションを”無し”または”上の方向”に する事はできるのでしょうか? 最小化ボタンを押した時はフォームを非表示にして タスクアイコンのみになるようにしているのですが、 最小化アニメーションが下方の為、何とかしたいです。 方法または、他に良い案などありましたら、 アドバイス等を宜しくお願いします。 m(_ _)m

noname#191236
noname#191236

質問者が選んだベストアンサー

  • ベストアンサー
  • 2ch
  • ベストアンサー率51% (64/125)
回答No.2

アニメーション止めるだけじゃダメ? なら、最小化をキャンセルしてやりゃいい フックしているから、必ずアンロードイベントを発生させるがヨロシ 非表示になった後、復帰に困るから、タイマーで3秒後に復活させてる 上にしまいこみたいなら、#1のURLとこれを組み合わせたら、どこにでもアニメーションでける 試してやってみるがヨロシ これフォームモジュールにはる Option Explicit Private Sub Form_Load()   Me.Timer1.Enabled = False   Me.Timer1.Interval = 3000   Call setSubClass(Me.hWnd) End Sub Private Sub Form_Unload(Cancel As Integer)   Call freeSubClass(Me.hWnd) End Sub Private Sub Timer1_Timer()   Me.Timer1.Enabled = False   Me.Visible = True End Sub これ標準モジュールにはる Option Explicit Private Const GWL_WNDPROC = (-4) Private Const WM_SYSCOMMAND = &H112& Private Const SC_MINIMIZE = &HF020& Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private pPlocWnd  As Long Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long   If (uMsg = WM_SYSCOMMAND) Then     If wParam = SC_MINIMIZE Then       If Form1.Visible Then         Form1.Visible = False         Form1.Timer1.Enabled = True         Exit Function       End If     End If   End If PGMEND:   WindowProc = CallWindowProc(pPlocWnd, hWnd, uMsg, wParam, lParam) End Function 'サブクラス化 Public Function setSubClass(inWnd As Long) As Long   Call freeSubClass(inWnd)        pPlocWnd = SetWindowLong(inWnd, GWL_WNDPROC, AddressOf WindowProc) End Function 'サブクラス化解除 Public Function freeSubClass(inWnd As Long) As Boolean      If pPlocWnd <> 0 Then     Call SetWindowLong(inWnd, GWL_WNDPROC, pPlocWnd)     pPlocWnd = 0   End If   freeSubClass = True End Function

noname#191236
質問者

お礼

度々回答を頂き、ほんとうにどうもありがとうございます 。 m(_ _)m 無事、やろうと思っていたことができるようになりました。 丁度今、フックというものについて色々調べているところで、 それについても参考になりました。 まだまだ覚える事がいっぱいです。(^^;ゞ これで締め切りたいと思います、ありがとうございました。

その他の回答 (1)

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.1
noname#191236
質問者

お礼

先日の質問にも回答していただき、ありがとうございます。 参考URL先の方法でも最小化のアニメーションが、 ほとんど変わりませんでした・・・。(^^; 最小化ボタンを押した時に最小化せず、 フォームだけ隠すという事だけでもいいのですが。 もう少し締め切りを待ちたいと思います。 (自分でも検索中です。)

関連するQ&A

  • フォームのアイコンが行方不明になりました???

    C# Formで右上の最大化釦、最小化釦、閉じる釦を非表示 タスクバーのアイコンも非表示にする為に以下の指定をしました this.MaximizeBox = false; //最大化釦非表示 this.MinimizeBox = false; //最小化釦非表示 this.ControlBox = false; //X釦非表示 this.ShowInTaskbar = false; //タスクバーに自分のアイコンを非表示 そうしたらフォームの左上のアイコンまで消えてしまいました フォームアイコンは残しておきたいのです どうしたら良いのでしょうか? FormBorderStyleの項を読んでもチンプンカンプン???? ボンクラの私でも分かるように懇切丁寧、具体的にご指導ください 宜しくお願い致します

  • Swingで作ったウィンドウの最小化と復元

    ウィンドウを最小化時にタスクトレイに入れ,タスクトレイのアイコンを ダブルクリックすることで元に戻るようなプログラムを考えています。 GUIはSwingで実装するつもりです。 タスクトレイにアイコンを表示し,最小化時にイベントリスナーから setVisible()を呼ぶことでウィンドウをタスクトレイに入れるところまでは できましたが,アイコンをダブルクリックした時に再びsetVisible()を呼んでも 最小化された状態で表示され,元の場所・サイズに戻して表示することができません。 解決法としては ・プログラム側からウィンドウの最小化を解除,元に戻す ・最小化ボタンを押された時に最小化しないようにする の 2 つを考えましたが,どちらも実装法がわかりません。 また,これら以外に方法はあるのでしょうか。 よろしくお願いします。

  • OFFICE2013は最小化のボタンがなくなった?

    OFFICE2003からいきなり2013に変え、GUIに戸惑っております。 画面右上のボタン 「_」最小化、「□」最大化、「×」閉じる のうち、「_」最小化が無くなっています。 タスクトレイに収納するには、左上のアイコンから「最小化」を選ぶしかないのでしょうか?

  • 最小化

    最小化したものがタスクバーに出てこなくなりました。 普通、最小化ボタンを押すと下のタスクバーに入ると思うんですが・・・というか2ヶ月前までは下のタスクバーに入ってました。ところがいつの間にやら下のタスクバーの中に収容されず、どこに行ったかわからない状態になってしまいました。(タスクマネージャーを開くと、確かに起動はしているようですがタスクバーに出てこないんです!!) そのため、仕事がはかどらなくなってしまいとても困っています。できればシステムの復元はしたくないんですが、どうすれば元に戻るんでしょうか?

  • Visual C#にてフォーム非表示時のタイマー

    Visual C# 2010でGUIプログラムを作っています。 フォームを最小化した時にタスクトレイにのみアイコンを表示する機能がついています。 タイマーで1分ごとに処理する必要があるのですが、最小化時(Form.visible = false)にだけ処理を実行してくれません。 最小化していない通常のフォーム表示の時はタイマーが正常に動作し、1分ごとに一定の処理をしてくれます。 目的は最小化時にタスクトレイにのみアイコンを表示し、1分ごとに処理をし、 特定の条件に当てはまった場合はアイコンの上にバルーン表示する事です。 タスクトレイにのみ表示している時でもタイマーで一定時間ごとに処理することはできた気がするのですが、 何が原因かわかりませんがいつの間にか出来なくなっていました。 どういった対策をすればよいでしょうか? private void Form1_Resize(object sender, EventArgs e) { if (OptionData.TaskTray == true) { if (this.WindowState == FormWindowState.Minimized) { //フォームを非表示にする this.Visible = false; //タスクトレイにアイコンを表示する notifyIcon1.Visible = true; } } } private void timer1_Tick(object sender, EventArgs e) { DataUpdateButton.PerformClick(); } private void notifyIcon1_DoubleClick(object sender, EventArgs e) { //フォームを表示する this.Visible = true; if (this.WindowState == FormWindowState.Minimized) { //ノーマルウィンドウに戻す this.WindowState = FormWindowState.Normal; //アクティブにする this.Activate(); if (OptionData.NoTaskTrayIcon == true) { //タスクトレイからアイコンを削除する notifyIcon1.Visible = false; } } }

  • ユーザーフォームの最小化

    http://www.serpress.co.jp/excel/vba047.html ここを参考にユーザーフォームに最小化のボタンをつけたのですがこの最小化を任意にするにはどうしたらいいでしょうか? 具体的にはユーザーフォームのボタンから他のエクセルを開いた時にとりあえずユーザーフォームを最小化しておきたいのです フォーム自体を小さくすることも考えたのですがまた戻すのが面倒でした。 ですので上記で作成したボタンを実行するには どうしたらいいでしょうか? 是非皆様のお力を貸してください。

  • vb.net 最小化時のアイコン

    vb.net2005に関しての質問です。 アプリケーションを最小化した時に、下のタスクバーに表示させずに右下のアイコンがたくさんならんでいるところにアイコンを表示させるようにするにはどうすればいいでしょうか?

  • VB205で、FormのWidthの設定

    お世話になります。 VB2005で、フォームをWidthを123以下に設定できません。 プロパティ MaximizeBox:False MinimizeBox:False ShowIcon:False ControlBox:False MinimumSize:0,0 Text="" です。どうも、色々やってみると、閉じるボタン、最大化ボタン、最小化ボタン、アイコン+テキスト用空間の合計のサイズが123のようです。極端に言うと、幅が1のフォームって作れるのでしょうか? 非表示にしても、上記の要素が効いて、123以下になりません。 どなたか、詳しい方いらっしゃいましたら教えてください。 宜しくお願い致します。

  • 最小化/最大化ボタンをvbaで「なし」にするには?

    アクセスです。 フォームのデザインビューで「最小化/最大化ボタン」をなしにする事は出来ますが これをvbaで行うにはどのようなコードを書けばいいでしょう? レコードセレクタを表示しないのように Me.RecordSelectors = False 1行で書く事は可能でしょうか? ネットで検索したら、 http://vbatech.seesaa.net/article/128511509.html のように凄く長いコードが出てきて、よく理解できないので、短く書けるのなら教えていただきたいです。 ご回答よろしくお願いします。

  • ウインドウの閉じる(×)や最大(□)最小(_)などが数字に!?

    教えて下さい。 午前中までは全くおかしくなかったんですが、午後パソコンを起動するとウインドウの「閉じる」ボタン(×)が変な記号になってしまっているんです。 他にも 「最大(□)」ボタン→「1」 「最小(_)」ボタン→「0」 「スクロールの上方向(△)」ボタン→「5」 「スクロールの下方向(▽)」ボタン→「6」 などなど、おかしなことになっています。 どうすれば直るのでしょうか? OSはWindows Meです。 お願いします。