フォームの宣言セクションに
Private Declare Function FillRect Lib "user32.dll" (ByVal hdc As Long, Left As Long, Top As Long, Right As Long, Bottom As Long, ByVal hbr As Long) As Long
標準モジュールに
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
コマンドボタンのクリックイベントに
hbr = CreateSolidBrush(RGB(100,100,100))
hOld = SelectObject(Picture1.hdc, hbr)
Call FillRect(Picture1.hdc, 10, 10, 30, 30, hbr)
Call SelectObject(Picture1.hdc, hOld)
Call DeleteObject(hbr)
と記述すると、FillRectのところで、エラーになります。
何が良くないのでしょうか。
Rectangleという関数だと大丈夫なのですが、FillRectだと
エラーになります。なので、ブラシのAPIなどはうまくいって
いると思うのですが。
よろしくお願いします。
Declare 宣言が間違っているからでしょうね。
SDK上の表記では、FillRect API は下記のようになっています。
引数の数は 3 つしかありませんよね。
int FillRect(
HDC hDC, // デバイスコンテキストのハンドル
CONST RECT *lprc, // 長方形
HBRUSH hbr // ブラシのハンドル
);
ですから、これを VB に書き換えるとすれば、引数定義は
ByVal hDC As Long, _
ByRef lprc As RECT, _
ByVal hBrush As Long
という感じになるでしょう。(RECT構造体の宣言も忘れずに!)
ちなみに、Rectangle についてはこのように書かれています。
BOOL Rectangle(
HDC hdc, // デバイスコンテキストのハンドル
int nLeftRect, // 長方形の左上隅の x 座標
int nTopRect, // 長方形の左上隅の y 座標
int nRightRect, // 長方形の右下隅の x 座標
int nBottomRect // 長方形の右下隅の y 座標
);
仮面弁士さんお返事ありがとうございます。
こんどは、
Call FillRect(Picture1.hdc, 10, 10, 30, 30, hbr)
のところで、
引数の型が一致しないというエラーがでました。仮面さんの
おっしゃるとおり、APIの本には、引数は3つしかありませんでした。
Typeの宣言は、標準モジュールにしたのですが、
肝心の、RECT構造体の4つの変数left, top, right, bottomの値を
どこかで指定したらよいのかわかない状態です。
FillRectのすぐ上に
left=10
top=10
right=30
bottom=30
と書いてみましたが、引数は省略できませんというエラーが
right=30のところで表示され、いまのところ、意味が理解できずにいます。
なんどもすいません。
無事に解決しました。
わたし、Typeの意味がよくわかっておりませんでした。
Integerとか、Longのような、引数の型を新たに定義しているのですね。
意味が理解できました。
ありがとうございました。
ツイート | ![]() |