Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9566 / 13644 ツリー ←次へ | 前へ→

【26561】最大・最小のボタンを無効にしたい ぱくぱく 05/7/10(日) 1:49 質問[未読]
【26573】Re:最大・最小のボタンを無効にしたい bykin 05/7/10(日) 20:09 回答[未読]
【26655】Re:最大・最小のボタンを無効にしたい ぱくぱく 05/7/13(水) 0:56 お礼[未読]

【26561】最大・最小のボタンを無効にしたい
質問  ぱくぱく  - 05/7/10(日) 1:49 -

引用なし
パスワード
   OfficeXP DeveloperでCOMアドインの作成にチャレンジして
いるのですが、ユーザーフォームで困っています。

ユーザーフォームを作成すると最大・最小ボタンが自動的についていて、
サイズ変更も可能なものになっているのですが、これを解除したいのです。

「かずんち!」さんのHPを参考にまずは[x]閉じるボタンの削除から
やってみたのですが、デバックモードでは上手く行くいっても、DLL
にしてインストールすると全然ダメでした。

アドインの機能にはあまり影響ないのですが、好ましくないのでどうかお知恵
を拝借させてください。どうか宜しくお願い致します。

--UserForm--
Private Sub CommandButton1_Click()
 Dim hwnd As Long
 Dim MySetWin As Long
 Dim Ret As Long

 hwnd = FindWindow("ThunderDFrame", Me.Caption)
 MySetWin = GetWindowLong(hwnd, -16&)
 If CommandButton1.Caption = "閉じるボタンを非表示" Then
  Ret = SetWindowLong(hwnd, -16&, MySetWin And (Not &H80000))
  CommandButton1.Caption = "閉じるボタンを表示"
 Else
  Ret = SetWindowLong(hwnd, -16&, MySetWin Or &H80000)
  CommandButton1.Caption = "閉じるボタンを非表示"
 End If
 Ret = DrawMenuBar(hwnd)
 
 Label1.Caption = hwnd   '←デバックでは値をとってるがDLLだと0
 Label2.Caption = MySetWin '←デバックでは値をとってるがDLLだと0
End Sub

--標準モジュール--
Option Explicit

Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
  (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
  (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long

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

Declare Sub ReleaseCapture Lib "user32" ()

Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
  (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
    lParam As Any) As Long

【26573】Re:最大・最小のボタンを無効にしたい
回答  bykin  - 05/7/10(日) 20:09 -

引用なし
パスワード
   こんばんわ。

>Label1.Caption = hwnd   '←デバックでは値をとってるがDLLだと0
>Label2.Caption = MySetWin '←デバックでは値をとってるがDLLだと0

そりゃーあきまへんわ・・・
XP-Developerで生成されるユーザーフォームはVBAの一般的なフォームとは
ちょっと違うんです。
これはヘルプがあるわけやないので、自分で発見していくしかありまへん。
とりあえず、ウィンドウのクラス名が間違ってます。
"ThunderDFrame"
 ↓
"ThunderRT6DFrame"
開発時は"ThunderDFrame"で実験して、DLL作成直前に"ThunderRT6DFrame"に変更する
なんていう工夫が必要になります。

本気でDLL開発するんやったら、APIでウィンドウクラス名を一覧にしてチェックするとか
自分でいろいろ考えていかなあかんと思うよ。
わても試行錯誤の連続でした・・・

おきばりやす。
ほな。

【26655】Re:最大・最小のボタンを無効にしたい
お礼  ぱくぱく  - 05/7/13(水) 0:56 -

引用なし
パスワード
   ▼bykin さん

遅くなって、申し訳ございません。いろいろ試行錯誤を繰り替えして
なんとかアイコンの変更・ステータスバーの追加までできました!

ウインドウのクラス名がちがうとは気づきませんでした、、、はずかしい。

bykinさんにはいつもお世話になっております。助かりました。
なるべくお手数をおかけしたくはないのですが、どうしても時は
またお知恵を拝借させてください。このたびはありがとうございました。

9566 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free