マニュアルトップ / 逆引きヘルプ / 部品〜ツリー
←　前のページ 次のページ　→

チェックつきツリーを使いたい。

  プログラミング質問掲示板でwatara氏がすばらしいサンプルを作ってくださったので転載します。

  `'サンプル1

  『user32.dll』の、『int SetWindowLongA(int,int,int)』を、 『?,?,?』の、『ウィンドウ情報設定』として、DLLを利用。 『user32.dll』の、『int GetWindowLongA(int,int)』を、 『?,?』の、『ウィンドウ情報取得』として、DLLを利用。 『user32.dll』の、『int SendMessageA(int,DWORD,int,char*)』を、 『?,?,?,?』の、『ポインタでメッセージ送信』として、DLLを利用。 TVM_GETNEXTITEM = $110A; TVM_GETITEM = $110C; TVM_SETITEMHEIGHT = $111B; 『ツリーアイテム状態取得』を、『?の』で、関数定義。 '■ツリーの作成 テストを、ツリーとして、作成。 その、アイテムは、『果物\りんご\王林 果物\りんご\ジョナゴールド 果物\みかん 野菜\キャベツ 野菜\トマト』 '■スタイルを変更 'ツリーのスタイルにTVS_CHECKBOXES($100)を足して、チェックボックスを付ける。 ウィンドウ情報取得( (テストの、ハンドル),(-16{GWL_STYLE})) それ=OR(それ,$100)。 ウィンドウ情報設定( (テストの、ハンドル),(-16{GWL_STYLE}),それ) 'チェックボックスの下部が欠けるのでツリーアイテムの高さを16ピクセルに調節。 テストに、「{TVM_SETITEMHEIGHT},16,0」と、メッセージ送信。 ツリー状態ボタンを、作る。 その、テキストは、「全アイテムの状態」 その、イベントは、( 集計は、(テストの、アイテム)。 '閉じたままでの列挙は面倒なので全て展開させる。 テストの、「」を、ツリー展開。 '先頭のアイテムのハンドルを取得 テストに、「{TVM_GETNEXTITEM},$0,0」と、メッセージ送信。//TVGN_ROOT アイテムハンドルへ、入れる。 (アイテムハンドル<>0)で、ループ( アイテムハンドルの、ツリーアイテム状態取得。 それ=(AND(それ,$2000)=$2000)。'$2000を含めばチェック状態。 集計#(回数-1)=「{それ},{集計#(回数-1)}」。 '次のアイテムのハンドルを取得。次が無ければ0になる。 テストに、「{TVM_GETNEXTITEM},$6,{アイテムハンドル}」と、メッセージ送信。//TVGN_NEXTVISIBLE アイテムハンドルへ、入れる。 ) 「{集計}」と、言う。 ) 選択アイテム状態ボタンを、作る。 その、テキストは、「選択中アイテムの状態」 その、イベントは、( '選択中のアイテムのハンドルをそれに得る テストに、「{TVM_GETNEXTITEM},$9,0」と、メッセージ送信。//TVGN_CARET それの、ツリーアイテム状態取得。 それ=(AND(それ,$2000)=$2000)。'$2000を含めばチェック状態。 もし、それが、はいならば、( 「{テスト}は、チェックされています」と、言う。 )違えば、( 「{テスト}は、チェックされていません。」と、言う。 ) ) 待機。 '--------------------------------------------- ＊ツリーアイテム状態取得 '"テスト"という名前のツリー部品から、 'ハンドルで指定されたアイテムの状態を取得する。 引数取得。 アイテム情報に、40バイトを、確保。 $8を、アイテム情報の、1に、『DWORD』形式で、バイナリ設定。 それを、アイテム情報の、5に、『DWORD』形式で、バイナリ設定。 ポインタでメッセージ送信((テストの、ハンドル), TVM_GETITEM, 0, アイテム情報) アイテム情報の、$9を、『DWORD』形式で、バイナリ取得。 戻る。

  `
  2003/07/04　watara 様

  作成日　2003/07/11　作成時のひまわりバージョン　1.77

←　前のページ 次のページ　→
マニュアルトップ / 逆引きヘルプ / 部品〜ツリー