FillRectのエラーの理由

解決


たんとん  2005-11-26 06:10:23  No: 128229

フォームの宣言セクションに

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などはうまくいって
いると思うのですが。

よろしくお願いします。


魔界の仮面弁士  2005-11-26 07:55:22  No: 128230

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 座標
);


たんとん  2005-11-27 01:30:59  No: 128231

仮面弁士さんお返事ありがとうございます。

こんどは、
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のところで表示され、いまのところ、意味が理解できずにいます。


たんとん  2005-11-27 01:36:13  No: 128232

なんどもすいません。

無事に解決しました。

わたし、Typeの意味がよくわかっておりませんでした。
Integerとか、Longのような、引数の型を新たに定義しているのですね。
意味が理解できました。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加