NOEMBLEM/エンブレムが設定されていません。

メールの詳細(メール表示)

件名:

Re: ListBox#selected[index]

差出人: T Sakuraiさん T Sakurai<tos-sakurai…>
送信日時 2002/04/16 18:41
ML.NO [ap-dev:0442]
本文:

桜井です

> From: T Sakurai
> Sent: Tuesday, April 16, 2002 12:19 PM
> Subject: [ap-dev:0441] ListBox#selected[index]

> 以前,配列プロパティは難しいという話でしたので,
> 例えば以下のようなのではいかがでしょうか?

uIndexer.pasなるものがあるのを見つけました...
すみません.ちゃんと見て無かったです...

ということでこんな風にしました.
さっきのListBox#selected_itemsも何気に便利なので追加してあると
うれしいです.

---- uListBox.pas
function ListBox_selected_items(This: Tvalue): Tvalue; cdecl;
var
real: TListBox;
i, len: Integer;
begin
real := ap_data_get_struct(This);
len := real.items.Count;
result := rb_ary_new;
if real.MultiSelect then
for i := 0 to len - 1 do
if real.Selected[i] then
rb_ary_push(result, INT2FIX(i));
end;

function ListBox_set_selected(argc: Integer; argv: Pointer; This:
Tvalue): Tvalue; cdecl;
var
real: TListBox;
args: array of Tvalue;
begin
if argc < 2 then ap_raise(ap_eArgError, sToo_few_args);
SetLength(args, argc);
args := argv;
real := ap_data_get_struct(This);
real.Selected[FIX2INT(args[0])] := RTEST(args[1]);
result := args[1];
end;

function ListBox_get_selected(argc: Integer; argv: Pointer; This:
Tvalue): Tvalue; cdecl;
var
real: TListBox;
args: array of Tvalue;
begin
if argc < 1 then ap_raise(ap_eArgError, sToo_few_args);
SetLength(args, argc);
args := argv;
real := ap_data_get_struct(This);
result := ap_bool(real.Selected[FIX2INT(args[0])]);
end;

procedure Init_ListBox;
begin
OutputConstSetType(mPhi, TypeInfo(TListBoxStyle));
cListBox := OutputCompoClass(mPhi, TListBox, cWinControl,
ListBox_alloc_v);
DefineSingletonMethod(cListBox, new, ListBox_new);
DefineAttrGet(cListBox, sel_count, ListBox_get_sel_count);
rb_define_method(cListBox, clear, @…_clear, 0);
rb_define_method(cListBox, item_at_pos, @…_item_at_pos , 2);
rb_define_method(cListBox, item_rect, @…_item_rect ,1);
rb_define_method(cListBox, selected_items, @…_selected_items,
0); // ここを追加
DefineIndexer(cListBox, selected, @…_get_selected,
@…_set_selected); // ここを追加
DefineAttrGet(cListBox, item_index, ListBox_get_item_index);
DefineAttrSet(cListBox, item_index, ListBox_set_item_index);
OutputAttrMethod_retval(cListBox, on_measure_item);
rb_define_attr(cListBox, canvas, 1, 0);
end;

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

このメールは下記のメールに対する返信です:

このメールには下記のメールが返信されています:

更新順メールリスト