◆マルチセレクトリストクラスについて ・マルチセレクトリストクラスは,スクロールバー付きリストクラスと組 み合わせて使用することで,任意の複数行を選択可能にするユーザーコ ントロールクラスライブラリです。 ・リスト行のタッチにより選択/非選択状態が切り替わります。
◆動作環境 ・シャープザウルスシリーズ ・動作確認機種:MI-310
◆更新履歴 1999/10/06 Ver0.80 ・基本的な機能作成完了。公開開始。 1999/10/14 Ver1.00 ・ほとんどのプロパティをサポート。 ・ソースコードの公開開始。 1999/11/02 Ver1.02 ・選択色を間違っていたバグを修正。 ・選択処理が正しく行われないバグを修正。 1999/12/26 Ver1.03 ・ToolCloseIDメッセージ処理時にマルチセレクトリストリス ト領域を解放後、NULLを返していないバグを修正。 (ToolOpenID, ToolCloseIDを繰り返すと異常終了する。)
◆ダウンロード ライブラリ+ヘッダファイル+説明書 MSELList.lzh ソースファイル+ヘッダファイル MSELList-src.lzh
◆仕様 @プロパティ名
プロパティ名 | 型 | RW | 概要 |
---|---|---|---|
VALUE_PID | int | RW | 対象となるリストクラス 設定するリストクラスは,予めフォームエディタで作成しておくこの値を変更後は,必ずToolInitIDメッセージを送信して下さい。 |
LEFT_X_PID | short | RW | リストの左上X座標(QP) |
TOP_Y_PID | short | RW | リストの左上Y座標(QP) |
WIDTD_PID | USHORT | RW | リストの横幅(QP-1) スクロールバーの横幅は含みません。 |
HEIGHT_PID | USHORT | RW | リストの1行の高さ(QP-1) |
TYPE_PID | UCHAR | R | リストのタイプ 対象リストで設定されている値を使用。LIST_DRAG_ENABE, LIST_DRAG_DISABLE,LIST_ACTIVE_LINEは,無視。 |
ALL_DATA_NO_PID | USHORT | RW | リストの項目総数 この値を変更後は,必ずToolInitIDメッセージを送信して下さい。 |
DISP_DATA_NO_PID | USHORT | R | リストの表示行数 |
LIST_REVERSE_OFFSET_X_PID | USHORT | RW | リストの非反転領域幅(QP) |
LIST_CALL_BACK_PID | PROC | W | リストの1項目を表示するためのコールバック関数 void barListCB(void *Work, USHORT Data, USHORT Line, int X1, int Y1, int X2, int Y2) barListCBは,ユーザ定義関数。 Work: LIST_CALL_BACK_WORK_PIDに設定されたワークのポインタ。通常はAplFormを使用します。 Data: 項目番号(0〜) Line: 表示行番号(1〜) X1: 表示位置左上X座標(QP) Y1: 表示位置左上Y座標(QP) X2: 表示位置右下X座標(QP) Y2: 表示位置右下Y座標(QP) |
LIST_CALL_BACK_WORK_PID | PTR | W | リストコールバック関数に渡すポインタ FormSetup関数内で,AplFormを渡してください。 |
LIST_LINE_COLOR_PID | COLOR | RW | リストの枠線,罫線の色 デフォルトはグレー。 |
LIST_BG_COLOR_PID | COLOR | RW | リストの非選択状態時の背景色 デフォルトは白。 |
LIST_REVERSE_COLOR_PID | COLOR | RW | リストの選択状態時の背景色 デフォルトはシステムの反転色。 |
LIST_ACTIVE_ITEM_PID | USHORT | R | 現在選択状態にある項目の総数 |
UC_CALL_BACK_WORK_PID | PTR | W | ユーザコールバック関数に渡すポインタ FormSetup関数内で,AplFormを渡してください。 |
A動作メッセージ
SetPropertyID プロパティの値を設定する。 メンバ ・Message.SetProperty.PropertyID(USHORT) プロパティID ・Message.SetProperty.Value 設定する値 リターン なし |
GetPropertyID プロパティの値を取得する。 メンバ ・Message.GetProperty.PropertyID(USHORT) プロパティID リターン ・Message.GetProperty.Value 取得した値 |
ToolOpenID マルチセレクトリストの領域を確保する。 |
ToolCloseID マルチセレクトリストの領域を解放する。 |
ToolInitID 内部状態を初期化,選択状態を全クリアする。 |
SetHiliteID 指定項目番号を選択状態に設定する。内部状態のみ変更する。 指定項目番号が項目総数以上の場合何もしない。 メンバ ・Message.SetHilite.TargetID (USHORT) 項目番号 リターン なし |
SetNormalID 指定項目番号を非選択状態に設定する。内部状態のみ変更する。 指定項目番号が項目総数以上の場合何もしない。 メンバ ・Message.SetNormal.TargetID (USHORT) 項目番号 リターン なし |
RedispID リストを再表示する。 |
ScrollUpdateID リストの項目総数,表示開始項目番号を設定する。(表示行数は変更しない) 表示開始項目番号が項目総数以上の場合,表示開始項目番号を項目総数-1に設定する。 メンバ ・Message.ScrollUpdate.AllDataNo (USHORT) 項目総数 ・Message.ScrollUpdate.DispDataNo (USHORT) 表示行数(未使用) ・Message.ScrollUpdate.DispOffset (USHORT) 表示開始項目番号 リターン なし |
NextPageID 次のページを表示する。 メンバ なし リターン なし |
PrevPageID 前のページを表示する。 メンバ なし リターン なし |
ScrollUpID 1行分スクロールアップする。 メンバ なし リターン なし |
ScrollDownID 1行分スクロールダウンする。 メンバ なし リターン なし |
CheckPartID 指定項目番号の選択状態を取得する。 メンバ ・Message.CheckPart.TargetID (USHORT) 対象項目番号(0〜) リターン ・Message.CheckPart.TargetStatus (UCHAR) 選択状態:0x00,非選択状態:0x01,範囲外:0x10 |
CheckActiveID 選択状態にある総数を取得する。 メンバ なし リターン ・Message.CheckActive.TargetID (USHORT) 選択されている総項目数 |
Bライブラリ関数
void MSELLIST_OPEN(int parts, APLFORMPTR AplForm, int barListParts) マルチセレクトリストの初期化関数。 parts: ユーザーコントロールクラス AplForm: アプリフォーム barListParts: スクロールバー付きリストクラス |
void MSELLIST_UPDATE(int parts, CONTROLHD ctrlHd) マルチセレクトリストの表示状態更新関数。 parts: ユーザーコントロールクラス ctrlHd: コントロールテーブル |
BOOLEAN MSELLIST_CB(MSELLIST **ppMSelList, MESSAGE* Message, WINDOWHD WnHandle, RECTANGLE* UserRect, void** Work) マルチセレクトリストメッセージ処理関数。 ppMSelList: マルチセレクトリスト構造体 Message: メッセージ WnHandle: ウィンドウハンドル UserRect: ユーザコントロール領域 Work: USER_CALL_BACK_WORK_PIDで設定したポインタの値 FormSetup関数内でAplFormを設定 |
void MSELLIST_CLOSE(int parts, CONTROLHD ctrlHd) マルチセレクトリストの終了関数。 parts: ユーザーコントロールクラス ctrlHd: コントロールテーブル |
◆使用方法 @libMSELList.aをSZABインストールディレクトリの下の lib ディレクト リにコピーする。 AMSELList.hをSZABインストールディレクトリの libheader/c ディレク トリにコピーする。 あるいは,各プロジェクトのディレクトリの csrc ディレクトリの下に コピーする。 BSZAB統合開発環境のリンカオプション LKFLAGS2 に -lMSELList を追加 する。 Cスクロールバー付きリストコントロールとユーザーコントロールクラス をメインフォームに作成する。 Dメインフォームの FormSetup関数内でマルチセレクトリストの初期化関 数(MSELLIST_OPEN)をコールする。次に,マルチセレクトリストクラ スの LIST_CALL_BACK_PIDにスクロールバー付きリストコントロールと 同様のコールバック関数を設定する。 例. MSELLIST_OPEN(mselList, AplForm, barList); SetCtrlProperty(mselList, LIST_CALL_BACK_PID, procValue, barListCB, AplForm->Control); Eユーザー関数として,上記コールバック関数(barListCB)を作成する。 Fメインフォームの FormEnd関数内でマルチセレクトリストの終了関数 (MSELLIST_CLOSE)をコールする。 Gユーザーリストコントロールクラスのコールバックルーチン内で,マル チセレクトリストメッセージ処理関数(MSELLIST_CB)をコールする。 例. static MSELLIST *pMSelList = NULL; if (*Work != NULL) { MSELLIST_CB(&pMSelList, Message, WnHandle, UserRect, Work); } Hスクロールバーの BarButtonSelect, BarListChangeActiveイベント関 数内でマルチセレクトリスト表示状態更新関数を(MSELLIST_UPDATE)コ ールする。 例. MESSAGE msg; MSELLIST_UPDATE(mselList, AplForm->Control); msg.CommonMsg.MessageID = RedispID; ControlCall(mselList, AplForm->Control, &msg);
◆制限事項 ・選択/非選択状態を保持できるのは,4096行までです。 ・リスト内を押したままリスト外に移動した場合,スクロールしません。 ・機能キーを用いた範囲指定はできません。
◆著作権・転載条件など ・本ライブラリは,制限なしで使用可能です。自由に使用してください。 但し,本ライブラリを使用して生じるあらゆる障害に対して,一切責任 を負いません。