Xpress アプリケーションディベロッパー
リファレンスマニュアルリリース 1.0.0

最終更新日 2005 年 5 月 11 日

Chapter 1

1

Mosel integration

1

Chapter 2

3

GUI creation with XAD

3Chapter 35Lifetime of XAD objects

5

Chapter 4

6

Events6

Chapter 5

7

XAD objects reference

7

5.1 Window

7

5.2 Text

8

5.3 Simple button

8

5.4 Input

8

5.5 GUI editor

9

5.6 Check button

9

5.7 Radio button

10

5.8 Group of XAD objects

10

5.9 List of items

11

5.10 Progress bar

11

5.11 Tab selectors

12

5.12 List object with multiple columns

12

5.13 Canvas

13

5.14 Browser

13

5.15 Subroutines specific to objects

14

XADcreatewindow

17

XADwindowopen

18

XADwindowclose

19

XADwindowshow

20

XADwindowhide

21

XADwindowkeep

22

XADwindowsettimer

23

XADcreatetext

24

XADtextaddtext

25

XADtextsettext

26iXADtextgettext

27

XADcreatebutton

28

XADcreateinput

29

XADinputsettext

30

XADinputgettext

31

XADcreateeditor

32

XADeditoraddtext

33

XADeditorload

34

XADeditorsave

35

XADeditorsettext

36

XADeditorgettext

37

XADcreatecheck

38

XADchecksetstate

39

XADcheckgetstate

40

XADcreateradio

41

XADradiosetstate

42

XADradiogetstate

43

XADcreategroup

44

XADcreatelist

45

XADlistadd

46

XADlistgetsel

47

XADlistshow

48

XADcreateprogress

49

XADprogressset

50

XADcreatetab

51

XADcreatemultilist

52

XADmultilistshow

53

XADmultilistsetsize

54

XADmultilistsetcolname

55

XADmultilistsettext

56

XADcreatecanvas

57

XADcanvasdrawbox

58

XADcanvasdrawellipse

59

XADcanvaserase

60

XADcanvasrefresh

61

XADcanvasdrawimage

62ii

XADcanvassaveimage

63

XADcanvasdrawline

64

XADcanvasdrawpoint

65

XADcanvasdrawrectangle

66

XADcanvasdrawtext

67

XADcanvasmap

68

XADcanvasunmap

70

XADcolor

71

XADcreatebrowser

72

XADbrowsergoto

73

5.16 Events specific to objects

74

XAD_EVENT_TIMER

74

XAD_EVENT_WINDOW_CLOSED75

XAD_EVENT_WINDOW_CLOSING75

XAD_EVENT_WINDOW_HIDDEN75

XAD_EVENT_WINDOW_MOVED75

XAD_EVENT_WINDOW_OPENED75

XAD_EVENT_WINDOW_RESIZED75

XAD_EVENT_WINDOW_SHOWN76

XAD_EVENT_PRESSED76

XAD_EVENT_CHANGED76

XAD_EVENT_SELECTION

76

Chapter6

77

Generic routines

77

XADdestroy

78

XADenable

79

XADgetx

80

XADgety81

XADgetw82

XADgeth83

XADrefresh

84

XADsetfocus

85

XADsetpos

86

XADsettext

87

XADsetvisible

88

XADgeteventtext

89

iii

Capter7

90

Generic events

90

XAD_EVENT_KEYDOWN

90

XAD_EVENT_KEYUP

91

XAD_EVENT_MOUSE_LEFTDOWN91

XAD_EVENT_MOUSE_LEFTUP91

XAD_EVENT_MOUSE_MOVED91

XAD_EVENT_MOUSE_RIGHTDOWN

92

XAD_EVENT_MOUSE_RIGHTUP

92

Chapter8

93

Utility routines

93

XADseteventcallback

94

XADhandleevents

95

XADchoosefile

96

XADpopupmenu

97

Chapter 9

98

Example98iv

Chapter 1

Mosel integration
Xpress アプリケーションディベロッパー(XAD)は、Xpress-Mosel モデリングおよびプログラ
ミング言語を拡張したものです。Xpress アプリケーションディベロッパーは Mosel の機能を拡張し、標準ユーザーインターフェースを作成するための一連の関数およびプロシージャを備えています。このため Mosel は、問題の数学表現からユーザーインターフェースの開発まで、完全に最適化されたアプリケーション開発のためのモデリングおよびプログラミング言語として使用することができます。
Xpress アプリケーションディベロッパーは、最適化問題の試験の際、多くの時間を節約することができます。OR 開発者はもはや、ユーザーアプリケーションを構築するために、Mosel と
VB、C++または Java とのインターフェースを必要としないからです。GUI ベースのアプリケーション開発に必要な機能のほとんどが、Mosel 言語の強力かつ使いやすい抽象概念を通して使用できます。
例えば、以下のウィンドウは(IVE の最適化マトリクスダイアログのコピー):

図 1.1: 最適化マトリクスダイアログ
以下の Mosel XAD コードを使用して、Mosel のみで作成したものです:1
1

Mosel で XAD を使用する際の注意点:
XAD コードは Mosel モデルの任意の場所に置くことができますが、ビジュアル機能を実装するコードは、必要に応じて他のモデリング/プログラミングのステートメントと分離してください。
mmxad.dso を使用するモデルを実行するためには、このライブラリが Xpress-MP をインストールした dso フォルダに存在し(または MOSEL_DOS 環境変数に指定され)、ライセンスフ
ァイルによって適切にライセンスを受けていなければなりません。

22

Chapter 2

GUI creation with XAD
XAD ユーザーインターフェースは、ユーザーによる開閉が可能なウィンドウで構成します。各
ウィンドウには任意の数のリスト、ボタン、チェックボックスなどのような XAD オブジェクトを含めることができます。すべてのウィンドウは、すべての XAD オブジェクトと同じく、関連づけられた一意の整数識別子（以下 ID）を持ちます。識別子は、生成時にグラフィックオブジェクトに関連づけられた後、それぞれのオブジェクトを参照するためにプログラム/モデルで使用します。
ユーザーがXADオブジェクトを操作すると イベント が発生します。例えば、ボタンを押すとXAD_EVENT_PRESSEDが 発 生 し 、 リ ス ト の ア イ テ ム を 選 択 す る と

XAD_EVENT_SELECTION イベントが発生します。イベントはユーザーが記述したコールバックルーチンで処理します。ユーザーインターフェースの動作は、イベントに対するアプリケ
ーションの反応によって決まります。ユーザーインターフェースの状態を変更するためのXAD
ステートメントを含め、任意のMoselコードをイベント処理のために記述することができます。
このためMoselデータの処理が、GUIとのやりとりと同様、非常に柔軟になります。
簡単な例で、XAD ユーザーインターフェースを作成し処理する原理を示します。後でモデル中で必要となる数字を求めるウィンドウを表示する Mosel プログラムを記述します:

図 2.1: 簡単な入力ウィンドウの例
コードを見てみましょう:

最初にウィンドウを生成し id_win を割り当てます。次に、それぞれ異なる ID を持った説明文
テキスト、入力フィールドおよびボタンの 3 つの XAD オブジェクトを生成します。ID は短いよ
りは長いほうが良く、またモデルを読みやすく保守しやすいものとするため、型情報を提供するものにしてください。

33

次は以下のようになります:

イベントハンドラーは XAD プログラムの中核をなしています。ユーザーと GUI との．．．やりとりは、すべてイベントハンドラーを通して反映されます。イベントハンドラーはコールバックプロ
シージャで、integer 型の 2 つの引数を取ります。XAD はイベントが発生すると、このプロシージャを呼びます。引数は:id:

integer イベントが発生した XAD オブジェクトの ID

event: integer イベントを示す数字(例えばXAD_EVENT_PRESSED)
キーの押下やリストの選択のようなイベントには、テキスト形式の情報を伴うものがあることに注意してください。この情報が必要な場合、イベントハンドラーの中でXADgeteventtext:
stringルーチンを使って取り出すことができます。
今の簡単な例の場合では、id_buttonok オブジェクトが押されるとウィンドウを閉じます。ウィンドウを閉じると、id_inputnumber 入力オブジェクトの現在のテキストを実数に変換し、Nに割り当てます。3 番目に、ユーザーとのやりとりを良くするため、ウィンドウを開くと同時に入力オブジェクトにフォーカスを設定します。
最後は以下のようになります:

イベントを処理するプロシージャ（イベントハンドラー）は、イベントハンドラーのプロシージャ名を唯一の引数としてXADseteventcallbackを呼び、XADに登録しなければなりません。
イベントハンドラーが登録されると、ウィンドウを開く（表示する）ことができます。ウィンドウを閉じると（OK ボタンを押す、または閉じるボタンをクリックする、または Esc を押します）、
Mosel は XADwindowopen のすぐ後に続くステートメントから実行を再開します。

4
4

Chapter 3

Lifetime of XAD objects
XADオブジェクトは、モデルが終了するまで、またはXADdestroy を使って破棄するまで存在します。オブジェクト固有のルーチン（本資料のリファレンス部分に記載したもの）は、オブジェクトを含むウィンドウがアクティブなときだけ（または、オブジェクトがウィンドウならウィンド
ウがアクティブな間だけ）、そのオブジェクトを操作できます。このため
XAD_EVENT_WINDOW_OPENED イベントは特に重要です。ウィンドウがユーザーとのやりとりを開始する前に、ウィンドウのオブジェクトを操作する唯一の機会だからです。
ウィンドウには明確に区別された 2 つの動きがあります:
ウィンドウを開くと(XADwindowopen を使います)、ウィンドウはMoselプログラムを制御します。ウィンドウを閉じるまでは(XADwindowclose を使います)、コードを実行する唯一の方法はイベントハンドラーからになります(直接、またはサブルーチンを呼びます)。
XADwindowopenに続くステートメントは、ユーザーがウィンドウを閉じた後にのみ実行されます。この動きは、プログラムを継続する前にユーザー入力が必要なとき、またはユーザーイ
ンターフェースがMoselプログラムを制御するようになっているときに使用することができます。
このタイプのウィンドウをモーダルダイアログといいます。
ウィンドウを表示すると(XADwindowshow を使います)、ウィンドウが表れ、Moselはすぐに再開します。表示されたウィンドウは、プログラムの状態を監視したり、進行を表示したりするなど補助的なウィンドウとして使用してください。監視が(例えばMoselの実行の最後に)完了すると、XADwindowhide を使ってウィンドウを 非表示 にすることができます。Moselの実行終了後に、ウィンドウを非表示にしないと、モデルがメモリからアンロードされるまでウィ
ンドウは存在します(これは、Xpress-IVEでは、モデルのコンパイルまたは実行時にのみ生じます)。このタイプのウィンドウをモードレスダイアログといいます。
2 つの動きは正しく選択することが重要です。違いを十分理解するまで試験し、たいていの目的に対しては、イベントの発生によってプログラムの実行を制御することができるようにするために、ウィンドウを開くべきである点に注意してください。

5
5

Chapter 4

Eventsユーザーが、ウィンドウまたはウィンドウ中のオブジェクト上で操作をしたとき、その行為はイ
ベントを通して伝えられます。イベントハンドラーのコールバックプロシージャは、そのようなイベントに応答するために使用することができます。例えば、ユーザーがボタンを押したとき、イ
ベントハンドラーのコールバックプロシージャは、2 つの引数とともに呼ばれます。1 つはイベ
ントのトリガーとなったボタンのIDを表す整数で、もう 1 つはXAD_EVENT_PRESSED イベ
ントコードを表す整数です。また、ユーザーがウィンドウの縁をドラッグしてウィンドウのサイズを変更したとき、イベントは、ウィンドウIDおよびXAD_EVENT_WINDOW_RESIZED を引数とするイベントハンドラーのコールバックの呼出しとして伝えられます。

6
6

Chapter 5

XAD objects reference
XAD は、以下のグラフィックオブジェクトを扱う機能を備えています:
ウィンドウ(Window )テキスト(Text )ボタン(Simple button )入力(Input )エディタ(GUI editor )チェックボタン(Check button )ラジオボタン(Radio button )オブジェクトグループ(Group of XAD objects)
リスト(List of items)
プログレスバー(Progress bar )タブ(Tab selectors )マルチリスト(List object with multiple columns)
キャンバス(Canvas )ブラウザ(Browser )5.1 Window

固有サブルーチン
XADcreatewindow, XADwindowopen, XADwindowclose, XADwindowshow,
XADwindowhide, XADwindowkeep, XADwindowsettimer
固有イベントXAD_EVENT_TIMER,

XAD_EVENT_WINDOW_CLOSED,XAD_EVENT_WINDOW_CLOSING,

XAD_EVENT_WINDOW_HIDDEN,

XAD_EVENT_WINDOW_MOVED,

XAD_EVENT_WINDOW_OPENED,

7
7

XAD_EVENT_WINDOW_RESIZED, XAD_EVENT_WINDOW_SHOWN

5.2 Text

固有サブルーチン
XADcreatetext, XADtextaddtext, XADtextsettext, XADtextgettext
固有イベントなし

5.3 Simple button

固有サブルーチン
XADcreatebutton
固有イベントXAD_EVENT_PRESSED

5.4 Input

固有サブルーチン
XADcreateinput, XADinputsettext, XADinputgettext

88固有イベント
XAD_EVENT_CHANGED

5.5 GUI editor

固有サブルーチン
XADcreateeditor,

XADeditoraddtext,

XADeditorload,

XADeditorsettext, XADeditorgettext
固有イベントXAD_EVENT_CHANGED

5.6 Check button

固有サブルーチン
XADcreatecheck, XADchecksetstate, XADcheckgetstate
固有イベントXAD_EVENT_PRESSED9
9

XADeditorsave,5.7 Radio button

固有サブルーチン
XADcreateradio, XADradiosetstate, XADradiogetstate
固有イベントXAD_EVENT_PRESSED

5.8 Group of XAD objects

固有サブルーチン
XADcreategroup固有イベントなし

1010

5.9 List of items

固有サブルーチン
XADcreatelist, XADlistadd, XADlistgetsel, XADlistshow
固有イベントXAD_EVENT_SELECTION
注意
リストオブジェクトでは、ユーザーが選択を変更するとXAD_EVENT_SELECTION イベントが発生します。どのアイテムが選択されたかを調べるためには、XADgeteventtext:string関数を呼んでください。

5.10 Progress bar

固有サブルーチン
XADcreateprogress, XADprogressset
固有イベントなし

11
11

5.11 Tab selectors

固有サブルーチン
XADcreatetab
固有イベントXAD_EVENT_SELECTION
注意
タブオブジェクトでは、ユーザーが選択を変更するとXAD_EVENT_SELECTION イベントが発生します。どのタブが選択されたかを調べるためには、XADgeteventtext:string 関数を呼んでください。

5.12 List object with multiple columns

固有サブルーチン
XADcreatemultilist,

XADmultilistshow,

XADmultilistsetcolname, XADmultilistsettext
固有イベントなし

12
12

XADmultilistsetsize,

5.13 Canvas

固有サブルーチン
XADcreatecanvas,

XADcanvasdrawbox,

XADcanvasdrawellipse,

XADcanvaserase,

XADcanvasrefresh,

XADcanvasdrawimage,

XADcanvassaveimage,

XADcanvasdrawline,

XADcanvasdrawrectangle,

XADcanvasdrawpoint,

XADcanvasdrawtext,

XADcanvasmap,

XADcanvasunmap, XADcolor
固有イベントなし
注意
色を扱う際、XAD は次の色定数を認識します: XAD_BLACK, XAD_BLUE, XAD_CYAN,XAD_GREEN,

XAD_MAGENTA,

XAD_ORANGE,XAD_YELLOW

5.14 Browser

固有サブルーチン
XADcreatebrowser, XADbrowsergoto
固有イベントなし

13
13

XAD_RED,XAD_WHITE,

5.15 Subroutines specific to objects
XADbrowsergoto

指定された URL をプラウザで開きます。 p.73

XADcanvasdrawbox

キャンバスにボックスを描画します。

p.58

XADcanvasdrawellipse

キャンバスに楕円を描画します。

p.59

XADcanvasdrawimage

ファイルの画像を描画します。

p.62

XADcanvasdrawline

キャンバスに線を描画します。

p.64

XADcanvasdrawpoint

キャンバスに点を描画します。

p.65

XADcanvasdrawrectangle

キャンバスに長方形を描画します。

p.66

XADcanvasdrawtext

キャンバスにテキストを描画します。

p.67

XADcanvaserase

キャンバスを消去します。

p.60

XADcanvasmap

キャンバスの座標空間をマッピングしま p.68
す。

XADcanvasrefresh

キャンバスを再描画します。

p.61

XADcanvassaveimage

画像をファイルに保存します。

p.63

XADcanvasunmap

キャンバスのデフォルトのマッピングに p.70
戻します。

XADcheckgetstate

チェックボタンの状態を取得します。

p.40

XADchecksetstate

チェックボタンの状態を設定します。

p.39

XADcolor

明度を生成します。

p.71

XADcreatebrowser

ブラウザを生成します。

p.72

XADcreatebutton

ボタンオブジェクトを生成します。

p.28

XADcreatecanvas

キャンバスオブジェクトを生成します。

p.57

XADcreatecheck

チェックボタンを生成します。

p.38

14
14

XADcreateeditor

エディタオブジェクトを生成します。

p.32

XADcreategroup

グループオブジェクトを生成します。

p.44

XADcreateinput

入力オブジェクトを生成します。

p.29

XADcreatelist

リストオブジェクトを生成します。

p.45

XADcreatemultilist

マルチリストオブジェクトを生成します。

p.52

XADcreateprogress

プログレスバーを生成します。

p.49

XADcreateradio

ラジオボタンを生成します。

p.41

XADcreatetab

タブセレクタオブジェクトを生成します。

p.51

XADcreatetext

テキストオブジェクトを生成します。

p.24

XADcreatewindow

ウィンドウを生成します。

p.17

XADeditoraddtext

エディタにテキストを追加します。

p.33

XADeditorgettext

エディタからテキストを取得します。

p.37

XADeditorload

エディタにファイルをロードします。

p.34

XADeditorsave

エ デ ィタ の 内容を ファ イ ル に保 存 しま p.35
す。

XADeditorsettext

エディタのテキストを設定します。

XADinputgettext

入力オブジェクトのテキストを取得しま p.31

p.36

す。
XADinputsettext

入力オブジェクトのテキストを設定しま p.30
す。

XADlistadd

リストにアイテムを追加します。

XADlistgetsel

リストから選択されたアイテムを取得し p.47

p.46

ます。
XADlistshow

リストを表示します。

p.48

XADmultilistsetcolname

マルチリストのカラム名を設定します。

p.55

15
15

XADmultilistsetsize

マルチリストのサイズを（再）設定しま p.54
す。

XADmultilistsettext

マルチリストのアイテムを設定します。

p.56

XADmultilistshow

マルチリストを表示します。

p.53

XADprogressset

進行状況を設定します。

p.50

XADradiogetstate

ラジオボタンの状態を取得します。

p.43

XADradiosetstate

ラジオボタンの状態を設定します。

p.42

XADtextaddtext

テキストオブジェクトにテキストを追加し p.25
ます。

XADtextgettext

テキストオブジェクトのテキストを取得し p.27
ます。

XADtextsettext

テキストオブジェクトのテキストを設定し p.26
ます。

XADwindowclose

ウィンドウを閉じます。

p.19

XADwindowhide

ウィンドウを非表示にします。

p.21

XADwindowkeep

ウィンドウの状態を保ちます。

p.22

XADwindowopen

ウィンドウを開きます。

p.18

XADwindowsettimer

タイマーを（再）設定します。

p.23

XADwindowshow

ウィンドウを表示します。

p.20

16
16

XADcreatewindow
PurposeCreate a window
Synopsisprocedure XADcreatewindow(id:integer, x:integer, y:integer, w:integer,
h:integer, name:string)Arguments
id

Arbitrary unique id of the windowx

x coordinate (from left of screen) of the window in pixels

yy coordinate (from top of screen) of the window in pixels

w

Width of the window in pixelshHeight of the window in pixels

name The title of the window
Related topics
XADwindowopen,

XADwindowclose,

XADwindowshow,

XADwindowkeep, XADwindowsettimer

17
17

XADwindowhide,XADwindowopen
PurposeOpen a window.
Synopsisprocedure XADwindowopen(id:integer)
Arguments
id Object identifier
Further information
Displays the window and surrenders execution control to its event handler
callback.
Related topics
XADwindowclose

18
18

XADwindowclose
PurposeClose a window.
Synopsisprocedure XADwindowclose(id:integer)
Argument
id Object identifier
Further information
Destroys an opened window.
Related topics
XADwindowopen

19
19

XADwindowshow
Purpose
Display a window.
Synopsisprocedure XADwindowshow(id:integer)
Argument
id Object identifier
Further information
Displays the window and execution resumes immediately.
Related topics
XADwindowhide

20
20

XADwindowhide
PurposeHide a window.
Synopsisprocedure XADwindowhide(id:integer)
Argument
id Object identifier
Further information
Destroys a shown window.
Related topics
XADwindowshow

21
21

XADwindowkeep
PurposeKeep a window.
Synopsisprocedure XADwindowkeep
Further information
Should be used only when dealing with the XAD_EVENT_WINDOW_CLOSING
event, if the intent is to cancel the closing of the window. For example, if anexit confirmation dialog is shown and the user changes his mind, call thisprocedure to prevent the window from closing.
Related topics
XADwindowhide

22
22

XADwindowsettimer
Purpose(Re)set a timer.
Synopsisprocedure XADwindowsettimer(id:integer, msec:integer)
Arguments
id

Object identifiermsec Timer interval in milliseconds
Further information
Sets or resets a timer that generates XAD_EVENT_TIMER events. If msec is apositive integer, the event will be generated every msec milliseconds. If msec
is 0 or negative, the timer is reset (timer events are no longer generated)

23
23

XADcreatetext
PurposeCreate a text object.
Synopsisprocedure

XADcreatetext(wid:integer,

id:integer,

x:integer,

y:integer,

w:integer, h:integer, name:string)Arguments
wid id of the window containing this object
id

id of this object

x

x coordinate (from left of window) of the object in pixels

yy coordinate (from top of window) of the object in pixels

w

Width of the object in pixelshHeight of the object in pixels

text Contents of the text object (use ¥r¥n to break lines)
Related topics
XADtextaddtext, XADtextgettext, XADtextsettext

24
24

XADtextaddtext
PurposeAdd text to a text object.
Synopsisprocedure XADtextaddtext(id:integer, text:string)Arguments
id

Object identifier

text Text to be added
Further information
Appends the given text to the object.
Related topics
XADtextgettext, XADtextsettext

25
25

XADtextsettext
PurposeSet text of a text object.
Synopsisprocedure XADtextsettext(id:integer, text:string)Arguments
id

Object identifier

text New text
Further information
Replaces the text of the object with the new text.
Related topics
XADtextaddtext, XADtextgettext

26
26

XADtextgettext
PurposeGet the text of a text object.
Synopsisfunction XADtextgettext(id:integer):stringArgument
id Object identifier
Return value
Text of the object.
Further information
Obtains the text currently shown by the object.
Related topics
XADtextaddtext, XADtextsettext

27
27

XADcreatebutton
PurposeCreate a button object.
Synopsisprocedure XADcreatebutton(wid:integer, id:integer, x:integer, y:integer,
w:integer, h:integer, name:string)Arguments
wid

id of the window containing this object

id

id of this object

x

x coordinate (from left of window) of the object in pixels

yy coordinate (from top of window) of the object in pixels

w

Width of the object in pixelshHeight of the object in pixels

name The name of the button

28
28

XADcreateinput
PurposeCreate an input object.
Synopsisprocedure

XADcreateinput(wid:integer,

id:integer,

x:integer,

y:integer,

w:integer, h:integer, text:string)Arguments
wid id of the window containing this object
id

id of this object

x

x coordinate (from left of window) of the object in pixels

yy coordinate (from top of window) of the object in pixels

w

Width of the object in pixelshHeight of the object in pixels

text Initial content of the input object
Related topics
XADinputgettext, XADinputsettext

29
29

XADinputsettext
PurposeSet the text of an input object.
Synopsisprocedure XADinputsettext(id:integer, text:string)Arguments
id

Object identifier

text New text
Further information
Replaces the text of the object with the new text.
Related topics
XADinputgettext

30
30

XADinputgettext
PurposeGet the text of an input object.
Synopsisfunction XADinputgettext(id:integer):stringArgument
id Object identifier
Return value
Text of the object.
Further information
Obtains the text currently shown by the object.
Related topics
XADinputsettext

31
31

XADcreateeditor
PurposeCreate an editor object.
Synopsisprocedure XADcreateeditor(wid:integer, id:integer, x:integer, y:integer,
w:integer, h:integer, text:string)Arguments
wid id of the window containing this object
id

id of this object

x

x coordinate (from left of window) of the object in pixels

yy coordinate (from top of window) of the object in pixels

w

Width of the object in pixelshHeight of the object in pixels

text Contents of the editor object (use ¥r¥n to break lines)
Related topics
XADeditoraddtext,

XADeditorload,

XADeditorsave,

XADeditorgettext

32
32

XADeditorsettext,

XADeditoraddtext
PurposeAdd text to an editor.
Synopsisprocedure XADeditoraddtext(id:integer, text:string)Arguments
id

Object identifier

text Text to be added
Further information
Appends the given text to the object.
Related topics
XADeditorsettext, XADeditorgettext

33
33

XADeditorload
PurposeLoad a file into an editor.
Synopsisprocedure XADeditorload(id:integer, file:string)Arguments
id

Object identifier

file File name
Further information
Load the specified file into the editor, replacing its previous content.
Related topics
XADeditorsave

34
34

XADeditorsave
PurposeSave editor contents into a file.
Synopsisprocedure XADeditorsave(id:integer, file:string)Arguments
id

Object identifier

file File name
Further information
Saves the contents of the editor to the specified file.
Related topics
XADeditorload

35
35

XADeditorsettext
PurposeSet the text of an editor.
Synopsisprocedure XADeditorsettext(id:integer, text:string)Arguments
id

Object identifier

text New text
Further information
Replaces the text of the object with the new text.
Related topics
XADeditoraddtext, XADeditorgettext

36
36

XADeditorgettext
PurposeGet the text from an editor.
Synopsisfunction XADeditorgettext(id:integer):stringArgument
id Object identifier
Return value
Text of the object.
Further information
Obtains the text currently shown by the object.
Related topics
XADeditoraddtext, XADeditorsettext,

37
37

XADcreatecheck
PurposeCreate a check button.
Synopsisprocedure XADcreatecheck(wid:integer, id:integer, x:integer, y:integer,
w:integer, h:integer, name:string)Arguments
wid

id of the window containing this object

id

id of this object

x

x coordinate (from left of window) of the object in pixels

yy coordinate (from top of window) of the object in pixels

w

Width of the object in pixelshHeight of the object in pixels

name Description of the check object
Related topics
XADchecksetstate, XADcheckgetstate

38
38

XADchecksetstate
PurposeSet the state of a check button.
Synopsisprocedure XADchecksetstate(id:integer, state:boolean)
Arguments
id

Object identifier

state Button state.
true checked
false unchecked
Further information
Sets the state of the check to checked or unchecked.
Related topics
XADcheckgetstate

39
39

XADcheckgetstate
PurposeGet the state of a check button.
Synopsisfunction XADcheckgetstate(id:integer):boolean
Argument
id Object identifier
Return value
true

Button is checked

false

Button is unchecked

Further information
Obtains the state of the check (true for checked, false for unchecked).
Related topics
XADchecksetstate

40
40

XADcreateradio
PurposeCreate a radio button.
Synopsisprocedure

XADcreateradio(wid:integer,

id:integer,

x:integer,

y:integer,

w:integer, h:integer, name:string)Arguments
wid

id of the window containing this object

id

id of this object

x

x coordinate (from left of window) of the object in pixels

yy coordinate (from top of window) of the object in pixels

w

Width of the object in pixelshHeight of the object in pixels

name Name of the radio button object
Related topics
XADradiosetstate, XADradiogetstate

41
41

XADradiosetstate
PurposeGet the state of a radio button.
Synopsisprocedure XADradiosetstate(id:integer, state:boolean)
Arguments
id

Object identifier

state Button state.
true selected
false unselected
Further information
Sets the state of the radio to selected (true) or unselected (false).
Related topics
XADradiogetstate

42
42

XADradiogetstate
PurposeGet the state of a radio button.
Synopsisfunction XADradiogetstate(id:integer):boolean
Arguments
id Object identifier
Return value
true

Button is selected

false

Button is unselected

Further information
Obtains the state of the radio (true for selected, false for unselected).
Related topics
XADradiosetstate

43
43

XADcreategroup
PurposeCreate a group object.
Synopsisprocedure XADcreategroup(wid:integer, id:integer, x:integer, y:integer,
w:integer, h:integer, name:string)Arguments
wid

id of the window containing this object

id

id of this object

x

x coordinate (from left of window) of the object in pixels

yy coordinate (from top of window) of the object in pixels

w

Width of the object in pixelshHeight of the object in pixels

name Description of the group

44
44

XADcreatelist
PurposeCreate a list object.
Synopsisprocedure

XADcreatelist(wid:integer,

id:integer,

x:integer,

y:integer,

w:integer, h:integer, name:string)Arguments
wid

id of the window containing this object

id

id of this object

x

x coordinate (from left of window) of the object in pixels

yy coordinate (from top of window) of the object in pixels

w

Width of the object in pixelshHeight of the object in pixels

name String containing comma-separated list items
Related topics
XADlistadd, XADlistgetsel, XADlistshow

45
45

XADlistadd
PurposeAdd an item to a list
Synopsisprocedure XADlistadd(id:integer, item:string)Arguments
id

Object identifier

item Item to add
Further information
Appends the item to the list.
Related topics
XADlistgetsel, XADlistshow

46
46

XADlistgetsel
PurposeGet the selected item from a list.
Synopsisfunction XADlistgetsel(id:integer):stringArguments
id Object identifier
Return value
Selected item.
Further information
Obtains the item currently selected.
Related topics
XADlistadd, XADlistshow

47
47

XADlistshow
PurposeShow a list.
Synopsisprocedure XADlistshow(id:integer, items:set)
Arguments
id

Object identifier

items Items to display
Further information
Fills the list with the contents of the given set of items. Mosel will try to infer
the type of the set and display accordingly. For example showing a set of
mpvar will display the solution values and reduced costs for each item.
Related topics
XADlistadd, XADlistgetsel

48
48

XADcreateprogress
PurposeCreate a progress bar.
Synopsisprocedure XADcreateprogress(wid:integer, id:integer, x:integer, y:integer,
w:integer, h:integer)
Arguments
wid id of the window containing this object
id

id of this object

x

x coordinate (from left of window) of the object in pixels

yy coordinate (from top of window) of the object in pixels

w

Width of the object in pixelshHeight of the object in pixels

Related topics
XADprogressset

49
49

XADprogressset
PurposeSet the progress state.
Synopsisprocedure XADprogressset(id:integer, minval:real, maxval:real, current:real)
Arguments
id

Object identifier

minval Lower boundmaxval Upper boundcurrent Current state
Further information
The progress will show how far current is between minval and maxval.

50
50

XADcreatetab
PurposeCreate a tab selector object.
Synopsisprocedure

XADcreatetab(wid:integer,

id:integer,

x:integer,

y:integer,

w:integer, h:integer, tabs:set of string)Arguments
wid

id of the window containing this object

id

id of this object

x

x coordinate (from left of window) of the object in pixels

yy coordinate (from top of window) of the object in pixels

w

Width of the object in pixelshHeight of the object in pixels

tabs Set of strings containing the possible choices

51
51

XADcreatemultilist
PurposeCreate a multilist object.
Synopsisprocedure XADcreatemultilist(wid:integer, id:integer, name:string, x:integer,
y:integer, w:integer, h:integer)
Arguments
wid id of the window containing this object
id

id of this object

x

x coordinate (from left of window) of the object in pixels

yy coordinate (from top of window) of the object in pixels

w

Width of the object in pixelshHeight of the object in pixels

Related topics
XADmultilistshow,

XADmultilistsetsize,

XADmultilistsettext

52
52

XADmultilistsetcolname,XADmultilistshow
PurposeShow a multilist
Synopsisprocedure XADmultilistshow(id:integer, items: array)
Arguments
id

Object identifier

items Items to display as multilist.
Further information
Clears the content of the multilist and fills it with the given array of items(integers, reals, strings, booleans, mpvars or linctrs).
Related topics
XADmultilistsetsize, XADmultilistsetcolname, XADmultilistsettext

53
53

XADmultilistsetsize
Purpose(Re)set the size of a multilist.
Synopsisprocedure XADmultilistsetsize(id:integer, rows:integer, columns:integer)
Arguments
id

Object identifier

rows

Number of rows

columns Number of columns
Further information
Clears the content of the multilist and prepares to hold the given number ofrows and columns.
Related topics
XADmultilistsetcolname, XADmultilistsettext

54
54

XADmultilistsetcolname
PurposeSet multilist column names.
Synopsisprocedure XADmultilistsetcolname(id:integer, columns:integer, name:string)Arguments
id

Object identifiercolumn Column index
name

Column name

Further information
The header of the column will display the new name.
Related topics
XADmultilistsetsize, XADmultilistsetcolname

55
55

XADmultilistsettext
PurposeSet a multilist item.
Synopsisprocedure

XADmultilistsettext(id:integer,

row:integer,

column:integer,

text:string)Arguments
id

Object identifiercolumn Column index
name

Column nametext

New text of the item

Further information
The item at the given row and column will hold the new text.
Related topics
XADmultilistsetsize, XADmultilistsetcolname

56
56

XADcreatecanvas
PurposeCreate a canvas object.
Synopsisprocedure XADcreatecanvas(wid:integer, id:integer, x:integer, y:integer,
w:integer, h:integer)
Arguments
wid id of the window containing this object
id

id of this object

x

x coordinate (from left of window) of the object in pixels

yy coordinate (from top of window) of the object in pixels

w

Width of the object in pixelshHeight of the object in pixels

Related topics
XADcanvasdrawbox,

XADcanvasdrawellipse,

XADcanvasrefresh,

XADcanvasdrawimage,

XADcanvasdrawline,

XADcanvasdrawpoint,

XADcanvaserase,
XADcanvassaveimage,

XADcanvasdrawrectangle,

XADcanvasdrawtext, XADcanvasmap, XADcanvasunmap, XADcolor

57
57

XADcanvasdrawbox
PurposeDraw a box on a canvas.
Synopsisprocedure XADcanvasdrawbox(id:integer, x:real, y:real, w:real, h:real,color1:integer, color2:integer)
Arguments
id

Canvas identifierx

x coordinate (from left of canvas)yy coordinate (from top of canvas)wwidth of box

hheight of box

color1 Border color
color2 Fill color
Further information
Draws a solid rectangle of color color2 with a one-pixel margin of color color1
of width w and height h at coordinates (x,y).
Related topics
XADcanvasdrawline,

XADcanvasdrawpoint,

XADcanvasdrawtext, XADcolor

58
58

XADcanvasdrawrectangle,

XADcanvasdrawellipse
PurposeDraw an ellipse on a canvas.
Synopsisprocedure XADcanvasdrawellipse(id:integer, x:real, y:real, w:real, h:real,color1:integer, color2:integer)
Arguments
id

Canvas identifierx

x coordinate (from left of canvas)yy coordinate (from top of canvas)wwidth of ellipsehheight of ellipse

color1 Border color
color2 Fill color
Further information
Draws a solid ellipse of color color2 with a one-pixel margin of color color1 ofwidth w and height h at coordinates (x,y).
Related topics
XADcanvasdrawline,

XADcanvasdrawpoint,

XADcanvasdrawtext, XADcolor

59
59

XADcanvasdrawrectangle,

XADcanvaserase
PurposeErase a canvas.
Synopsisprocedure XADcanvaserase(id:integer, color:integer)
Arguments
id

Object identifiercolor Color selection
Further information
Clears the contents of the canvas using the specified color
Related topics
XADcanvasrefresh60
60

XADcanvasrefresh
PurposeRedraw a canvas.
Synopsisprocedure XADcanvasrefresh(id:integer)
Argument
id Object identifier
Further information
Updates the visual content of the canvas. Simply drawing on a canvas does
not update its appearance (to save time). Only call XADcanvasrefresh whennecessary.
Related topics
XADcanvaserase

61
61

XADcanvasdrawimage
PurposeDraw an image from file.
Synopsisprocedure XADcanvasdrawimage(id:integer, x:real, y:real, file: string)procedure

XADcanvasdrawimage(id:integer,

x:real,y:real,w:integer,

h:integer, file: string)Arguments
id

Object identifierx

x coordinateyy coordinate

w

Width

h

Heightfile File name
Further information
Draws the image from the given file at coordinates (x,y). The file can be oftype .bmp, .jpg, .gif, or .png. If height and width are given, then the image isrescaled to fit in a rectangle of width w and height h. If the string is"xadimg:imgname", a previously saved imgname (see above) will be drawn.
If the string is "xadimg:imgname", a previously saved imgname will be drawn.
Related topics
XADcanvassaveimage

62
62

XADcanvassaveimage
PurposeSave an image to a file.
Synopsisprocedure

XADcanvassaveimage(id:integer,

x:real,y:real,w:integer,

h:integer, imgname: string)Arguments
id

Object identifierx

x coordinateyy coordinate

w

Width

h

Heightimgname File name
Further information
Saves what is currently drawn at x,y,w,h under the identifier imgname.
imgname can then be drawn anywhere else using XADcanvasdrawimage.
Related topics
XADcanvasdrawimage

63
63

XADcanvasdrawline
PurposeDraw a line on a canvas.
Synopsisprocedure XADcanvasdrawline(id:integer, x1:real, y1:real, x2:real, y2:real,color:integer)
procedure XADcanvasdrawline(id:integer, x1:real, y1:real, x2:real, y2:real,color:integer, width: integer)
Arguments
id

Object identifier

x1

x start coordinate

y1

y start coordinatex2

x end coordinatey2

y end coordinate

color Colorwidth Width
Further information
Draws a line width-pixels wide from (x1,y1) to (x2,y2) with the given color.
The default width is one pixel.
Related topics
XADcanvasdrawbox,

XADcanvasdrawpoint,

XADcanvasdrawtext, XADcolor

64
64

XADcanvasdrawrectangle,

XADcanvasdrawpoint
PurposeDraw a point on a canvas.
Synopsisprocedure XADcanvasdrawpoint>(id:integer, x:real, y:real, color:integer)
Arguments
id

Object identifierx

x coordinateyy coordinate

color Color
Further information
Draws a pixel at (x,y) with the given color.
Related topics
XADcanvasdrawbox,

XADcanvasdrawline,

XADcanvasdrawtext, XADcolor

65
65

XADcanvasdrawrectangle,

XADcanvasdrawrectangle
PurposeDraw a rectangle on a canvas.
Synopsisprocedure

XADcanvasdrawrectangle>(id:integer,

x:real,y:real,w:real,h:real, color:integer)
Arguments
id

Object identifierx

x coordinateyy coordinate

w

Width

h

Heightcolor Color
Further information
Draws a solid rectangle of width w and height h at coordinates (x,y) with thegiven color.
Related topics
XADcanvasdrawbox,

XADcanvasdrawline,

XADcanvasdrawtext, XADcolor

66
66

XADcanvasdrawpoint,XADcanvasdrawtext
PurposeDraw text on a canvas.
Synopsisprocedure

XADcanvasdrawtext(id:integer,

x:real,y:real,text:string,x:real,y:real,text:string,color:integer)
procedure

XADcanvasdrawtext(id:integer,

color:integer, fontsize:integer, alignment:integer, fontname:string)Arguments
id

Object identifierx

x coordinateyy coordinate

text

Text

color

Color

fontsize

Font sizealignment Vertical and horizontal alignment
fontname Font name
Further information
Draws text with font fontname of size fontsize at coordinates (x,y) with thegiven color and alignment. If font name and size are not given then the output
uses Arial 10pt. The alignment is the sum of one of XAD_CENTERH, XAD_LEFT,
and XAD_RIGHT (horizontal alignment) plus one of XAD_CENTERV, XAD_TOP,
and XAD_BOTTOM (vertical alignment). XAD_DEFAULT can be used instead to
specify upper left alignment.
Related topics
XADcanvasdrawbox,

XADcanvasdrawline,

XADcanvasdrawrectangle, XADcolor

67
67

XADcanvasdrawpoint,XADcanvasmap
PurposeMap the coordinate space of a canvas.
Synopsisprocedure XADcanvasmap(id:integer, x1:real, y1:real, x2:real, y2:real,x1new:real, y1new:real, x2new:real, y2new:real)
Arguments
id

Object identifier

x1

x start coordinate

y1

y start coordinatex2

x end coordinatey2

y end coordinate

x1new New x start coordinate
y1new New y start coordinate
x2new New x end coordinate
y2new New y end coordinate
Further information
Transforms the coordinate space of the canvas. Normally, (0,0) represents
the upper left corner of the canvas and widths and heights are measured inpixels. By remapping the coordinate space, transformations no longer need tobe applied to coordinates when drawing. For example, if the canvas has awidth of 300 and a height of 200 and if we want to draw a graph from -1 to +1
on the x axis and -2 to +2 on the y axis in a region of the original canvas, we
could write, say:
XADcanvasmap(id_canvas, 50, 150, 250, 50, -1, -2, 1, 2)
before plotting the points on the graph. Note that this transformation reverts
the direction of the y axis and plots everything between (-1,1) and (-2,2) inthe portion of the canvas between pixel coordinates (50,50) and (250,150).
The following figure clarifies the effect of the XADcanvasmap call:68
68

After calling this procedure, coordinates should be given in the red intervals.
XAD will map them correctly onto the canvas, based on the black intervals.
Related topics
XADcanvasmap

69
69

XADcanvasunmap
Purpose
Revert to default mapping for a canvas.
Synopsisprocedure XADcanvasunmap(id:integer)
Argument
id Object identifier
Further information
Reverts to default mapping of coordinates
Related topics
XADcanvasunmap

70
70

XADcolor
PurposeCreate a color value.
Synopsisfunction XADcolor(red:real, green:real, blue:real):integer
Arguments
red

Intensity of red (between 0 and
255)

green Intensity of green (between 0
and 255)
blue

Intensity of blue (between 0 and
255)

Return value
Color value.
Further information
Creates a color value based on intensities of red, green and blue.
Related topics
See Section Canvas for a list of predefined color constants.

71
71

XADcreatebrowser
PurposeCreate a browser.
Synopsisprocedure XADcreatebrowser(wid:integer, id:integer, x:integer, y:integer,
w:integer, h:integer, url:string)Arguments
wid id of the window containing this object
id

id of this object

x

x coordinate (from left of window) of the object
in pixelsyy coordinate (from top of window) of the object
in pixelsw

Width of the object in pixelshHeight of the object in pixels

url

URL to open when the object is createdRelated topics
XADbrowsergoto

72
72

XADbrowsergoto
PurposeOpen the given URL in the browser.
Synopsisprocedure XADbrowsergoto(id:integer, url:string)Arguments
id

Object identifier

url The URL to visit.
Further information
Visits the given url.
Related topics
XADcreatebrowser

7373

5.16 Events specific to objects
XAD_EVENT_CHANGED

入力またはエディタが変更されたとき p.76のイベント。

XAD_EVENT_PRESSED

ボタンが押されたときのイベント。

p.76

XAD_EVENT_SELECTION

選択のイベント。

p.76

XAD_EVENT_TIMER

タイマーのイベント。

p.74

XAD_EVENT_WINDOW_CLOS

ウィンドウを閉じたときのイベント。

p.74

ED
XAD_EVENT_WINDOW_CLOS

ウィンドウを閉じているときのイベント。 p.75

ING
XAD_EVENT_WINDOW_HIDD

ウィンドウを非表示にしたときのイベン p.75

ENト。

XAD_EVENT_WINDOW_MOVE ウィンドウを移動したときのイベント。

p.75

D
XAD_EVENT_WINDOW_OPEN

ウィンドウを開いたときのイベント。

p.75

ED
XAD_EVENT_WINDOW_RESI

ウィンドウのサイズを変更したときのイ p.75

ZED

ベント。

XAD_EVENT_WINDOW_SHO

ウィンドウを表示したときのイベント。

WN

XAD_EVENT_TIMER
Description Timer event.
Notes

Event associated with window objects.

74
74

p.75

XAD_EVENT_WINDOW_CLOSED
Description Window closed event.
Notes

Event associated with window objects.

XAD_EVENT_WINDOW_CLOSING
Description Window closing event.
Notes

Event associated with window objects.

XAD_EVENT_WINDOW_HIDDEN
Description Window hidden event.
Notes

Event associated with window objects.

XAD_EVENT_WINDOW_MOVED
Description Window moved event.
Notes

Event associated with window objects.

XAD_EVENT_WINDOW_OPENED
Description Window opened event.
Notes

Event associated with window objects.

XAD_EVENT_WINDOW_RESIZED
Description Window resized event.
Notes

Event associated with window objects.

7575

XAD_EVENT_WINDOW_SHOWN
Description Window shown event.
Notes

Event associated with window objects.

XAD_EVENT_PRESSED
Description Button pressed event.
Notes

Event associated with simple button objects, check buttons, andradio buttons.

XAD_EVENT_CHANGED
Description Input or editor changed event.
Notes

Event associated with input and editor objects.

XAD_EVENT_SELECTION
Description Selection event.
Notes

Event associated with list and tab objects.

76
76

Chapter6

Generic routines
XADdestroy

Delete an object.

p.78

XADenable

Enablwe/disable user interaction. p.79

XADgeteventtext

Retrieve the message associated p.89
with an event.

XADgethGet the height of an object.

p.83

XADgetwGet the width of an object.

p.82

XADgetx

Get the x coordinate of an object. p.80

XADgety

Get the y coordinate of an object. p.81

XADrefresh

Refresh an object.

p.84

XADsetfocus

Focus on an object

p.85

XADsetpos

Reposition an object.

p.86

XADsettext(Re)set the textual information of p.87
an object.

XADsetvisible

Making an object visible/hidden.

77
77

p.88

XADdestroy
PurposeDelete an object.
Synopsisprocedure XADdestroy(id:integer)
Argument
id Object identifier
Further information
When an object is no longer needed, it can be destroyed. Once destroyed, its
id can no longer be used. However, a new object can be created with the same
id.

78
78

XADenable
PurposeEnable/disable user interaction.
Synopsisprocedure XADenable(id:integer, state:boolean)
Arguments
id

Object identifier

state true enable user interaction with the object
false disable user interaction with the object
Further information
Used to enable/disable user interaction with the object. For example, a Save
button should probably be disabled if there is nothing to save.

79
79

XADgetx
PurposeGet the x coordinate of an object.
Synopsisfunction XADgetx(id:integer):integer
Argument
id Object identifier
Return value
x coordinate value of the object.
Further information
This function returns the x coordinate (in pixels) of the object id relative to theupper left corner of the window containing it. If id refers to a window, it
returns the coordinate relative to the screen.
Related topics
XADgety, XADgeth, XADgetw

80
80

XADgety
PurposeGet the y coordinate of an object.
Synopsisfunction XADgety(id:integer):integer
Argument
id Object identifier
Return value
y coordinate value of the object.
Further information
This function returns the y coordinate (in pixels) of the object id relative to theupper left corner of the window containing it. If id refers to a window, it
returns the coordinate relative to the screen.
Related topics
XADgetx, XADgeth, XADgetw

81
81

XADgetw
PurposeGet the width of an object.
Synopsisfunction XADgetw(id:integer):integer
Argument
id Object identifier
Return value
Width of the object.
Further information
This function returns the width (in pixels) of the object.
Related topics
XADgeth, XADgetx, XADgety

82
82

XADgeth
PurposeGet the height of an object.
Synopsisfunction XADgeth(id:integer):integer
Argument
id Object identifier
Return value
Height of the object.
Further information
This function returns the height (in pixels) of the object.
Related topics
XADgetw, XADgetx, XADgety

83
83

XADrefresh
PurposeRefresh an object.
Synopsisprocedure XADrefresh(id:integer)
Argument
id Object identifier
Further information
If an object may not be painted correctly due to a complex layout operation,
use this routine to update its appearance.

84
84

XADsetfocus
Purpose
Focus on an object
Synopsisprocedure XADsetfocus(id:integer)
Argument
id Object identifier
Further information
The target object will receive the keyboard focus.

85
85

XADsetpos
PurposeReposition an object.
Synopsisprocedure XADsetpos(id:integer, x:integer, y:integer, w:integer, h:integer)
Arguments
id Object identifierx x coordinate
y w coordinate
w Widthh Height
Further information
This procedure repositions the object id. Note: use the XADget* routines toleave parameters unchanged.
Related topics
XADgeth, XADgetw, XADgetx, XADgety

86
86

XADsettext
Purpose(Re)set the textual information of an object.
Synopsisprocedure XADsettext(id:integer, text:string)Arguments
id

Object identifier

text New textual information
Further information
This procedure updates the textual information of an object if applicable.

87
87

XADsetvisible
PurposeMaking an object visible/hidden.
Synopsisprocedure XADsetvisible(id:integer, visible:boolean)
Arguments
id

Object identifier

visible Display option.
true object visible
false object hidden
Further information
Objects may be shown or hidden by calling this procedure.

88
88

XADgeteventtext
PurposeRetrieve the message associated with an event.
Synopsisfunction XADgeteventtext:string
Return value
The event message or an empty string.
Further information
If an event carries textual information (for example a tab selection), use thisfunction to retrieve the text when handling the event.
Related topics
XAD_EVENT_CHANGED, XAD_EVENT_SELECTION, XAD_EVENT_KEYDOWN,
XAD_EVENT_KEYUP

89
89

Capter7

Generic events
XAD_EVENT_KEYDOWN

Key pressed.

p.90

XAD_EVENT_KEYUP

Key released.

p.91

XAD_EVENT_MOUSE_LEFTDOWN

Left mouse button pressed.

p.91

XAD_EVENT_MOUSE_LEFTUP

Left mouse button released.

p.91

XAD_EVENT_MOUSE_MOVED

Mouse moved.

p.91

XAD_EVENT_MOUSE_RIGHTDOWN Right mouse button pressed.

p.92

XAD_EVENT_MOUSE_RIGHTUP

p.92

Right mouse button released.

XAD_EVENT_KEYDOWN
Description Key pressed.
Notes

Indicates that a key was pressed when the object had the focus.
Call XADgeteventtext to obtain the representation of the key
that was pressed. Letters and digits are returned as themselves.
The following special codes can also be returned:
Up arrow"up"

Down arrow"down"Left arrow"left"

Right arrow"right"

Tab

"tab"

Enter

"enter"Shift"shift"Ctrl"control"Caps Lock"capslock"

90
90

Esc

"esc"

Spacebar""

Page Up"pageup"

Page Down"pagedown"

End

"end"

Home

"home"

Insert"ins"

Delete"del"XAD_EVENT_KEYUP
Description Key released.
Notes

Indicates that a key was released when the object had the focus.
See XAD_EVENT_KEYDOWN for more information.

XAD_EVENT_MOUSE_LEFTDOWN
Description Left mouse button pressed.
Notes

Indicates that the left mouse button was pressed above theobject. The coordinates of the mouse relative to ANY object id canbe obtained ANYTIME using XADgetmousex and XADgetmousey.

XAD_EVENT_MOUSE_LEFTUP
Description Left mouse button released.
Notes

Indicates that the left mouse button was released above theobject.

XAD_EVENT_MOUSE_MOVED
Description Mouse moved91
91

NotesIndicates that the mouse has moved above the object.

XAD_EVENT_MOUSE_RIGHTDOWN
Description Right mouse button pressed.
Notes

Indicates that the right mouse button was pressed above theobject.

XAD_EVENT_MOUSE_RIGHTUP
Description Right mouse button released.
Notes

Indicates that the right mouse button was released above theobject.

92
92

Chapter8

Utility routines
XADchoosefile

Display file selection dialog.

p.96

XADhandleevents

Handling events during program p.95
execution.

XADpopupmenu

Creation of a pop-up menu.

p.97

XADseteventcallback

Set the event handler callback.

p.94

93
93

XADseteventcallback
PurposeSet the event handler callback
Synopsisprocedure XADseteventcallback(handlername:string)Argument
handlername Event handler callback
Further information
This procedure registers the procedure handlername to act as an event
handler callback. All events will be reported through this callback. The callback
procedure has this signature:procedure guievents(id:integer, event:integer)
and it gets called for every possible event. The user has the option to ignore ordeal with events through the event handler callback procedure.

94
94

XADhandleevents
PurposeHandling events during program execution.
Synopsisprocedure XADhandleevents
Further information
If a long calculation (e.g. optimization) is initiated by the event handler
callback, the user interface will freeze. This is due to the fact that theprocessor intensive operations take place on the same thread as the code thatdraws the user interface or responds to user events (after all, we are dealing
with an event). To avoid this phenomenon, call XADhandleevents at regularintervals (e.g. during Optimizer callbacks) to allow the user to interact withthe user interface. Use caution, however as the following call sequence islikely to occur:
guievents(1,1)
callsminimize(objective)

calls

globallog

calls

XADhandleevents

calls

guievents(1,10)

calls

???

While an optimization is running events should be dealt with quickly and withlittle (if well understood) or no side effects. In this situation one could use
XADseteventcallback to switch to an alternative, simplified event handler
callback.
Related topics
XADseteventcallback

95
95

XADchoosefile
Purpose
Display file selection dialog.
Synopsisfunction XADchoosefile(openorsave:boolean):stringArgument
openorsave Dialog type selection.
true create an Open file dialog
false create a Save file dialog
Return value
File name if selection was successful, otherwise an empty string.
Further information
This is a convenience routine for displaying the standard Windows fileselection dialog. Pass true as an argument to create an Open file dialog andfalse to create a Save file dialog. If the file selection was successful, thereturned string contains the file name. If not, the function returns an empty
string.

96
96

XADpopupmenu
PurposeCreation of a pop-up menu.
Synopsisfunction XADpopupmenu(menuitems:set of string):stringArgument
menuitems Menu items
Return value
Selected item, or empty string if no selection was made.
ExampleTo create a menu with the items Action A and Action B separated by a line, use
the following:
choice:=XADpopupmenu({"ActionA", "XADseparator", "Action B"})
Further information
It is customary for user interfaces to display a menu of options when the user
right-clicks on something. This routine achieves just that. When the user
makes a choice, it is returned as a string. If the user does not select anything,
the returned string will be empty.

9797

Chapter 9

ExampleXAD が Mosel とどのように連携して、対話型の数学的プログラミングモデルを作成するかを説明するため、簡単な割当ての問題を使います。
以下は、アプリケーションの画面ショットです:

図 9.1: 対話型数学的プログラミングモデル
ユーザーは左上の角にある入力ボックスの数字を変更して優先度を変更することができます。
Solve を押すと、結果が図表に表示されます。この手順は、何度でも繰り返すことができます。
コードを一つ一つ調べてみましょう:98
98

このアプリケーションを構築するためには、XAD(mmxad)だけでなく Xpress オプティマイザー(mmxprs)も使う必要があります。また、決定変数の配列 assign のような後でモデル中で使用する識別子をいくつか宣言します。
次の部分では:優先度の例を割り当てます(これはユーザーが編集することができます)。目的関数
Satisfaction は、割当てがされるかどうかに依存する優先度のすべての合計を示します。2
つの制約、つまり 1 プロジェクトにつき 1 人、1 人につき 1 プロジェクトという制約によってこのモデルの数学的公式化が完了します。
ユーザーインターフェースのコードを調べてみましょう:99
99

上記のコードでは、一意の ID を種々の GUI オブジェクトに割り当てるための宣言を、新たにまとめてしています。まずウィンドウを生成し、次に id_win を親として XAD オブジェクトを一つずつ生成します。id_inputs および id_texts は、1 以上のアイテムに対して一意の ID を生成するために、i および j と組み合わせて使用しているという意味で、特別である点に注意してください。また、""+PREF(i,j)という表現が、実際どのように各入力オブジェクトに、対応する優先度の評価を入れるのかにも注意してください。
すべての GUI オブジェクトの座標と大きさは、Xpress アプリケーションディベロッパーデザイ
ナーツールを使って得ることができます。このツールは What You See Is What You Getの GUI エディタとして動く Mosel プログラム(XAD で記述されたもの)です。最終結果に納得がいくまでに、何度かレイアウトの試験が必要となるかもしれません。
XAD オブジェクトに対する ID として整数を使用すると、理解しやすく、(上記のすべての入力のような)カテゴリの管理がしやすいオブジェクトのグループ化が容易になります。特に大きなモデル/アプリケーションでこの特徴を活かしてください。
キャンバス id_canvas は、今の最適化問題の結果を表示します。プロシージャ全体で、このオブジェクトを最新の情報に更新します:

一般に、キャンバスは最初に XADcanvaserase を使って消去してください。すべての描画が終わった後、XADcanvasrefresh を呼んで、キャンバスの内容を更新してください。
UpdateCanvas プロシージャはグリッドを描画し、次に配列 assign の最適化された値を基にして、各セルを更新します。割り当てられる場合には、セルにビットマップ画像ファイルのチェックマークも描画します。割り当てられない場合には、セルのテキストを、強調しないように薄く陰のかかった灰色で描画します。
では、イベントを処理するコールバックプロシージャおよびアプリケーションを開始するコード

100
100

を調べましょう。

このアプリケーションでは、ウィンドウを開いたとき、および 2 つのボタンのいずれかを押した
ときの 3 つのイベントが重要です。
id_buttonsolve ボタンを押すと、Mosel は優先度の配列を更新し(入力オブジェクトから直接取得します)、新しい優先度に基づいて目的関数を更新し、問題を最適化し、最後に一連の新しい割当てを表示するためにキャンバスを更新しなければなりません。
id_buttonexit ボタンを押すと、直ちにウィンドウを閉じます。
XAD_EVENT_WINDOW_OPENEDイベントは、ユーザーがウィンドウを操作する機会を得る前に、ウィンドウの状態を更新するために処理をしてください。これはウィンドウのライフタイムで最初のイベントです。
Moselコードの中にあと 2 つ重要なステートメントがあります。XADseteventcallbackは、
必ずウィンドウを開く前に呼ばなければなりません。ウィンドウがイベントを送ることができるよ
うにするためです。最後にXADwindowopenでウィンドウを開き、(イベントを通しての)実行の制御をウィンドウに渡します。
XADwindowcloseを呼んだとき、またはマウスでウィンドウを閉じたとき、Moselコードの実
行は、実際XADwindowopenに続くステートメントを継続する点に注意してください（この例では、他に実行するものがないためアプリケーションは終了します）。これは、ウィンドウがイ
ベントハンドラーを通してMoselの実行を一時的に制御する、Moselアプリケーションの単なるコンポーネントであると常に考えるべきであることを意味します。Moselが常に管理を行い、いつでもウィンドウを終わらせることができます。
(XAD アプリケーションを Xpress-IVE で開発する場合、プログラムの実行を終わらせるため

101
101

に停止機能を使用しないでください。Mosel と IVE が不正な状態になり、ユーザーオブジェク
トを扱うシステムコールの間、Mosel の実行を中断することがあります。停止を使用する代わりに、すべての XAD ウィンドウは常に閉じてください。)
この他の XAD アプリケーションの例については、XAD に伴う一連の例を参照してください。

102
102