Home > Illustlation > グラフィックツール > Corel Draw > CorelDrawの公式マクロ文書の和訳 > CorelDRAW開発者エリアにようこそ > プログラミング・ガイド > 6-マクロを操作しやすくする > 6.3-マクロのためにユーザーとの対話処理を提供する

6.3-マクロのためにユーザーとの対話処理を提供する

新規作成日 2020-01-25
最終更新日

CorelDRAWでマクロを利用するためのドキュメント「6.3 - Providing user interaction for macros」の和訳です。

あなたのマクロ・ソリューションをより操作しやすくする1つの方法は、マウス入力のような、ユーザーとの対話処理を最適化することです。マウス動作を捕えるマクロは、そのマクロの結果で、ユーザーにリアルタイム影響を与えます。

CorelDRAWとCorel DESIGNERオブジェクト・モデルは、ユーザーからマウス入力を受け取るために、3つの主要な方法を提供します。次のトピックで説明されるように:

  • マウス・クリックをキャプチャする
  • マウス・ドラッグをキャプチャする
  • 座標をキャプチャする

マウス・クリックをキャプチャする

Capturing mouse clicks

一つのマウス・クリックの位置を取得するために、あなたは、DocumentクラスのGetUserClickメソッドを使用することができます。このメソッドは、指定された時間が経過するまでマクロを一時停止します。あるいは、ユーザーが、文書内でクリックするまで、あるいは、Escキーを押します。Document.GetUserClickメソッドを使用するVBAの例を次に示します。:

Dim doc As Document, retval As Long

Dim x As Double, y As Double, shift As Long

Set doc = ActiveDocument

doc.Unit = cdrCentimeter

retval = doc.GetUserClick(x, y, shift, 10, True, cdrCursorPick)

前述の例には、Document.GetUserClickメソッドの次のパラメーターが、コード化されています。:

  • 変数xは、マウス・クリックの水平位置を返します。
  • 変数yは、マウス・クリックの垂直位置を返します。
  • パラメーターshiftは、ユーザーが、マウスをクリックしたときに押される、Shift、CtrlとAltキーの組合せを返します。Shift、CtrlとAltキーには、それぞれ1、2、および4の値が割り当てられ、合計が戻り値です。
  • 値10は、ユーザーが、文書をクリックする秒数を指定します。
  • 値Trueは、SnapToObjectsパラメータが有効であることを示しています。
  • 値cdrCursorPickは、選択ツールのアイコンが、カーソル・アイコンに使用されることを指定します。(あなたは、カスタム・アイコンを使用することができません。)

次の値のいずれかが、返されます。:

  • 0 -ユーザーは、クリックを正常に完了しています。
  • 1 -ユーザーは、Escキーを押してキャンセルします。
  • 2 -操作が、タイムアウトしました。

返られた座標は、ページの開始点に対する相対値です。そして、明示的に指定されない限り、文書単位です。

返されたクリック点の下で形状を取得するために、以下のVBAの例のように、あなたは、(Pageのメンバーの)SelectShapesAtPointメソッドを使用することができます。:

doc.ActivePage.SelectShapesAtPoint x, y, True

値が、Trueの場合、塗りつぶされていないオブジェクトが選択し、Falseは、塗りつぶされていないオブジェクトを選択しません。

マウス・ドラッグをキャプチャする

Capturing mouse drags

マウス・ドラッグ(や領域や長方形)の位置を取得するために、あなたは、文書クラスのGetUserAreaメソッドを使用することができます。このメソッドは、指定された時間が経過する、あるいは、ユーザーが、文書をクリック、ドラッグ、離す、あるいは、Escキーを押すまで、マクロを一時停止します。Document.GetUserAreaメソッドを使用するVBAの例を次に示します。:

Dim doc As Document, retval As Long, shift As Long

Dim x1 As Double, y1 As Double, x2 As Double, y2 As Double

Set doc = ActiveDocument

doc.Unit = cdrCentimeter

retval = doc.GetUserArea(x1, y1, x2, y2, shift, 10, True, cdrCursorExtPick)

ActivePage.SelectShapesFromRectangle x1, y1, x2, y2, False
  • 前述の例には、Document.GetUserAreaメソッドの次のパラメータが、コード化されています。:
  • 変数x1とy1は、(それぞれ)領域の左上角の水平および垂直位置を返します。
  • 変数x2とy2は、(それぞれ)領域の右下角の水平および垂直位置を返します。
  • パラメーターshiftは、ユーザーが、マウスをドラッグするときに押したままにするShift、Ctrl、そして、Altキーの組合せを返します。Shift、CtrlとAltキーには、それぞれ1、2、および4の値が割り当てられ、合計が戻り値です。
  • 値10は、ユーザーが、文書をクリックする秒数を指定します。
  • 値Trueは、SnapToObjectsパラメータが有効であることを示しています。
  • 値cdrCursorExtPickは、カーソルの使用するアイコンを指定します。

前述の例では、コードは、Page.SelectShapesFromRectangleメソッドを使用することで、領域内に完全に収まる形状を選択することで終了します。

次の値のいずれかが、返されます。:

  • 0 -ユーザーは、選択を正常に完了しています。
  • 1 -ユーザーは、Escキーを押してキャンセルします。
  • 2 -操作が、タイムアウトしました。

このメソッドは、長方形の角として解釈される2つの点を返します。しかしながら、2つの点は、マウス・ドラッグの始点と終点としても使用することができます。

返される座標は、ページの原点に相対的であり、明示的に指定されない限り、ドキュメント単位です。

座標をキャプチャする

Capturing coordinates

マウス操作をキャプチャするとき、あるいは、複雑なマクロ・ソリューションを開発するとき、画面座標とドキュメント座標の間で変換したい場合があります。この変換は、WindowクラスのScreenToDocumentとDocumentToScreenメソッドを使用して行われます。

次のVBAの例は、アクティブ・ウィンドウに表示される画面座標の設定を文書の点に変換します。:

Dim docX As Double, docY As Double

ActiveDocument.Unit = cdrMillimeter

ActiveWindow.ScreenToDocument 440, 500, docX, docY

次のVBAの例は、画面に表示される文書内の点の画面座標を返します。:

Dim screenX As Long, screenY As Long

ActiveDocument.Unit = cdrMillimeter

ActiveWindow.DocumentToScreen 40, 60, screenX, screenY

両方の例では、変換された座標は、最後の2つのパラメータで返されます。

画面座標は、画面の左上隅から始まるため、正のy値は、画面の下にありますが、負のy値は、画面の上にあります。

Shape.IsOnShapeメソッドを使用することで、一組の座標(つまり、点)が、曲線の内側、外側、または輪郭上にあるかどうかをテストできます。一組の文書座標のために、このメソッドは、次のいずれかを返します。:

  • cdrInsideShape - 座標が、形状の内側にある場合、
  • cdrOutsideShape - 座標が、形状の外側にある場合、
  • cdrOnMarginOfShape - 座標が、形状の輪郭上、あるいは、近くにある場合、

たとえば、次のVBAコードは、点(4、6)が、アクティブな形状に関連する場所をテストします。:

Dim onShape As Long

ActiveDocument.Unit = cdrInch

onShape = ActiveShape.IsOnShape(4, 6)
このエントリーをはてなブックマークに追加