No.2
- 回答日時:
APIってのは、あるソフトを外部から制御できるように、公開されている関数のことです。
Windows APIはWindowsの様々な機能を制御するためのものです。
今回使用した「GetWindowRect」という関数もその一つで、その名の通り、ウインドウの矩形範囲(RECT)を取得するための関数です。
で、これらのAPIは通常、DLLやOCXといった形で提供されます。
Declare ステートメントは、「このDLLに収録されているこの関数をVBから使用する」っていうことを宣言するための命令です。
今回の場合、Windowsが提供する「User32.DLL」に含まれる「GetWindowRect」という関数を使用することを宣言しています。
hWndっていう引数を宣言して、フォームのhWndプロパティを渡していますが、これは、「ウインドウハンドル」といって、個々のウインドウに設定されたIDのことです。
Windowsはこの「hWnd」の値を使って、ウインドウの管理を行っています。
WindowsAPIを使用法を知るには、まずは本屋さんでWindowsAPIをVBから使うことについての本をご購入ください。(各社から多数出版されています。)
それを見ながら、実際に使ってみると、ある程度の規則性があることが分かると思います。(C言語の若干の知識があると尚いいのですが…)
規則性がつかめたら、そのうちにまったく知らない関数であっても、関数名と引数を見るだけで使い方が見えてきたりします。
あと、VBから使用可能なWindowsAPIについては Win32API.Txtというファイルにまとめられています。
Visual Basicなどの開発言語や、Officeのディベロッパ エディションなどに付属しています。
ARCさん へ
早々に回答を戴き感謝致します。大変分かり易い説明です。一読しただけで、API・Declare・ウインドウハンドルの概略の概念が理解出来ました。
早々に「WindowsAPI」をキーワードにして書店で解説書を探してみます。
「ウインドウ内の位置情報を知りたい」と云う単一的な疑問解決だけで無く、新たな道具となるAPIと云うモノの存在を教えて戴いた事、深謝致します。
趣味の範囲(一部は生活実用)でVBプログラミングを楽しんでおりますが、これからはAPIでその範囲が広がりそうです。
何時かまた、質問投稿をした時には宜しくお願い致します。有り難う御座いました。
No.1ベストアンサー
- 回答日時:
プロパティは、ちょっとすぐには思いつきません。
(無いかもしれません。)私がやったときは、Windows APIを使いました。
'フォームの宣言部
Option Explicit
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
'コマンド1押下時
Private Sub コマンド1_Click()
Dim RectFrm As RECT
Dim RectAcc As RECT
Call GetWindowRect(Me.hwnd, RectFrm)
Call GetWindowRect(Application.hWndAccessApp, RectAcc)
End Sub
こんな感じで分かりますか?
RectFrm構造体には、フォームの位置情報が入っています。
RectAcc構造体にはAccessのウインドウの位置情報が入っていると思います。
ってことで、Accessのウインドウ位置からフォームのウインドウ位置を引き算すれば、相対位置が求まるような…
(実はこの辺、試したのはかなり昔の話です。VBAコード自体には問題は無いはずですが、「引き算すれば」とかのお部分に関しては、それほど自信は無いです。
ってことで、申し訳ないですが、詳細な部分についてはご自身で確認してくださいませ。)
ちなみに、単位はTwipsではなくて、ピクセルです。(Windows APIを使っているので。)
この回答への補足
ARCさん へ 回答文に書いて戴いた[Windows API]が何の事だか全く理解出来ないまま、取り敢えず、回答ステートメントをそっくりそのまま実行して見ました。見事に位置情報が参照でき感激しました。大変感謝しております。
教えてGooに質問した位置情報参照については解決致しました。でも、ARCさんの回答にある[Declare Function...LIb...]なるモノを知りませんでした。ハンドブック(ナツメ社「Access97VBA」)には、「ダイナミックリンクライブラリー(DLL)の外部プロシージャへの....」と説明がありました。位置情報を参照出来る以外にも色々便利な機能が有るように思いますので、是非詳しく知りたいと思います。
そこで、素人が理解出来る範囲で「外部プロシージャ」なるモノを使用する方法を知る(勉強する)手がかりを教えて下さい。
厚かましいお願いですか、ご教授願えれば幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- IT・エンジニアリング ドメイン駆動設計の値オブジェクトについて質問 1 2023/05/13 02:50
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- その他(プログラミング・Web制作) pythonでのカーソル移動がずれる 2 2023/07/30 08:51
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
- Visual Basic(VBA) VBA 画面上のカーソルに文字数字を入力するコードを教えて下さい 1 2022/10/30 10:31
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
フォームの位置を取得したい
Visual Basic(VBA)
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
-
4
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
5
フォームウィンドウを最前面に表示したい(ACCESS)
Microsoft ASP
-
6
どこにもフォーカスを当てたくない
Access(アクセス)
-
7
Access サブフォームでの選択行の取得
その他(データベース)
-
8
ACCESS フォームをそのまま印刷について
その他(データベース)
-
9
Accessのレポート上のテキストボックス値を設定したい
その他(データベース)
-
10
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
11
フィルタ後のフォームの件数の取得の仕方
Access(アクセス)
-
12
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
13
ACCESSでコントロールソースの変更
Access(アクセス)
-
14
ACCESSのフォームで次のレコードに移動しない方法を教えてください
その他(データベース)
-
15
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
16
【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには
Access(アクセス)
-
17
Access 複数フォームを開き、画面の最上面にしたいフォームをコント
その他(データベース)
-
18
レコードセットで得た結果をサブフォームに出力したい
その他(データベース)
-
19
サブフォームを非表示させる方法を教えて下さい
その他(Microsoft Office)
-
20
MS Accessのウインドウ内の右端最大値は?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ウインドウを毎回同じ位置、大...
-
ウィンドウが、前回閉じた位置...
-
スライドショーを全画面でなく...
-
win7は窓位置記憶出来ない?
-
Excel操作 ウィンドウで出した...
-
Excelのワークシートが全部表示...
-
Outlookでこのような表示がされ...
-
ウィンドウズ7 ウィンドウサ...
-
あなたへのお知らせ
-
MS DOS 6.22のシステム イメー...
-
excelのファイルを閉じると空の...
-
パソコンを起動させたら文字の...
-
ウインドウ7ですが 10にイメ...
-
エクセル 枠の中に小さい枠
-
MT4サブウインドウ1と2を入れ替...
-
ネット上に掲載のPDFファイルの...
-
ショートカットキーでウインド...
-
IE8のウインドウサイズが固定で...
-
Excelである行(列)だけを残し...
-
エクセル:ウィンドウ枠の分割
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ウインドウを毎回同じ位置、大...
-
Excelのワークシートが全部表示...
-
Outlookでこのような表示がされ...
-
Excel操作 ウィンドウで出した...
-
excelのファイルを閉じると空の...
-
EXCELについて枠の固定と分割の...
-
スライドショーを全画面でなく...
-
ウィンドウが、前回閉じた位置...
-
Access VBA でForm位置を参照す...
-
表示するウィンドウのサイズを...
-
MacのVLCでウインドウの幅の変更
-
パソコンを起動させたら文字の...
-
非アクティブウィンドウをアク...
-
MT4サブウインドウ1と2を入れ替...
-
ネット上に掲載のPDFファイルの...
-
アクティブでないウインドウを...
-
ms_webcheckmonitorとは?スパ...
-
エクセルVBAでウィンドウを透明...
-
Explorerのウインドウを複数開...
-
MS DOS 6.22のシステム イメー...
おすすめ情報