-
Здравствуйте. Я добавляю записи в ListBox и какую либо служебную информацию к ней через TObject так:
ListBox.AddItem('Item_1', TObject(1));
Подскажите как не удаляя и добавляя запись заново, изменить по адресу где лежит этот TObject значение "1" на какое либо другое.
-
Хотя вопрос сформулирован коряво, видимо имеется в виду что-то вроде этого:
var
I: integer;
...
I := ListBox.AddItem('Item_1', TObject(1));
ListBox.Objects[I] := TObject(2);
-
А таким образом: ListBox.AddItem('Item_1', TObject(1)); можно ли запихивать более одного значения, не прибегая к созданию своего класса? Ведь тогда прийдется создавать и уничтожать данный объект самостоятельно.
-
procedure TForm1.Button4Click(Sender: TObject);
type
TIntRec = packed record
Half: Word;
Quart1, Quart2: byte;
end;
TSet = set of 0..31;
var
IntRec: TIntRec;
S: TSet;
begin
IntRec.Half := 1;
IntRec.Quart1:= 2;
IntRec.Quart2:= 3;
ListBox.AddItem('Item_1', TObject(IntRec));
IntRec.Half := 4;
IntRec.Quart1:= 5;
IntRec.Quart2:= 6;
ListBox.AddItem('Item_2', TObject(IntRec));
IntRec.Half := 7;
IntRec.Quart1:= 8;
IntRec.Quart2:= 9;
ListBox.AddItem('Item_3', TObject(IntRec));
S:= [1, 15, 21];
ListBox.AddItem('Item_4', TObject(S));
end;
procedure TForm1.Button5Click(Sender: TObject);
type
TIntRec = packed record
Half: Word;
Quart1, Quart2: byte;
end;
var
IntRec: TIntRec;
begin
if ListBox.ItemIndex = -1 then Exit;
IntRec:= TIntRec(ListBox.Items.Objects[ListBox.ItemIndex]);
Edit1.Text:= IntToStr(IntRec.Half)+':'+IntToStr(IntRec.Quart1)+':'+IntToStr(IntRec.Quart2);
Edit2.Text:= IntToStr(TIntRec(ListBox.Items.Objects[ListBox.ItemIndex]).Half);
end;
-
> валя © (12.03.19 22:02) [2] > > А таким образом: ListBox.AddItem('Item_1', TObject(1)); > можно ли запихивать более одного значения, не прибегая к > созданию своего класса? Ведь тогда прийдется создавать и > уничтожать данный объект самостоятельно.
Можно. В принципе в свойстве TStrings.Objects[] хранится всего лишь целое число. 32-х битное или 64-х битное в зависимости от разрядности ОС, под которую пишется программа. Так что всё зависит от того какие "значения" вы хотите там хранить.
P.S. И-краткое в слове придётся - лишняя.
-
var P: Pointer; V: Variant; procedure ShowValue(P: Pointer); var s: string; begin s := string(Variant( P^ )); ShowMessage(s); end; begin P := addr(V); ListBox1.AddItem('Item_1', TObject(P) ); V := 1; ShowValue(ListBox1.Items.Objects[0]); V := now; ShowValue(ListBox1.Items.Objects[0]); V := 'hello'; ShowValue(ListBox1.Items.Objects[0]);
-
ВладОшин © (14.03.19 11:25) [5] вспомнилось... давно было, дискету принесли говорят вот база клиента, посмотри в чем проблема... база? на дискете? она пустая почти пол мегабайта (access), а чуть поработать на дискету не влезет (1.47 мегабайта). не, не, все влезло, мы еще для гарантии несколько копий записали, сам контролировал (менеджер). блин, даже не смотря скажу, если несколько копий влезло, то она "покоцана" возможно до 0-ля байт... ... ... в общем базы там не было, как понимаете, были линк файлы ведущие на диск C: оставшийся у клиента, с номерами (хх), первая копия, вторая и т.д. штук 7 "для гарантии" на копировали.
даже не знаю к чему я это вспомнил... так просто, наверное.
-
> ВладОшин © (14.03.19 11:25) [5]
Ответ не по вопросу.
-
> sniknik © (14.03.19 18:49) [6]
исключительно показать, что там указатель )
> Германн © (15.03.19 02:21) [7]
А имхо, исключительно по вопросу. Причем демонстрация в чистом виде, что ты сказал.
-
> ВладОшин © (15.03.19 17:43) [8] > > > Германн © (15.03.19 02:21) [7] > > А имхо, исключительно по вопросу. Причем демонстрация в > чистом виде, что ты сказал. >
"Более одного значения не прибегая к созданию своего класса" я понял как "две и более сущности одновременно". Например координаты точки на земной поверхности. Широта и долгота. Или индексы ячейки в многомерном массиве. Или...
-
буквально читаем:
>> Подскажите как не удаляя и добавляя запись заново, изменить по адресу где лежит этот TObject значение "1" на какое либо другое.
по адресу P := addr(V);
не удаляя и добавляя запись заново ListBox1.AddItem('Item_1', TObject(P) );
изменить V := 1; V := now;
-
> ВладОшин © (16.03.19 09:34) [10] > > буквально читаем:
А. ТС оказывается нарушил правила и задал два вопроса в одной теме.
|