Товарищи! Помогите решить проблему!!! Суть такова — надо в элемент listbox, помимо отображаемой надписи, записать целое число чтобы в последствии считать его из элемента через ItemIndex.
Подробнее: есть listbox, строки которого заполняются циклом из книги excel, и image, в котором в зависимости от listbox.itemindex отображается определённое изображение. Необходимо записать номер строки excel, из которой заполняется listbox.item, в этот item, чтобы потом в методе image.picture.loadfromfile можно было обратиться к ячейке содержащей имя файла.
Погуглил, почитал, вроде можно это осуществить используя listBox.items.addobject. Попробовал — listbox всё также заполняется, но что-то число толи не записывается толи у мну ручки кривые, что я не могу его извлечь...
Буду премного благодарен за любую помощь/советы всем откликнувшимся, дело оч срочное!!!
Ниже прилагаю код:
[QUOTE]unit Unit3;
procedure TForm3.Button2Click(Sender: TObject);
begin
Form3.Close;
Form2.Show;
end;
procedure TForm3.FormShow(Sender: TObject);
begin
if Form1.RadioGroup1.ItemIndex=0 then
for i:=2 to Sheet2.UsedRange.Rows.Count do
ListBox1.Items.Add(Sheet2.Cells[i,1])
else
for i:=2 to Sheet2.UsedRange.Rows.Count do
if Sheet2.Cells[i,Form1.RadioGroup1.ItemIndex + 2].Value=1
then ListBox1.Items.AddObject(Sheet2.Cells[i,1], TObject(i));
end;
Здравствуйте, 4e6ypek, Вы писали:
4>Товарищи! Помогите решить проблему!!! Суть такова — надо в элемент listbox, помимо отображаемой надписи, записать целое число чтобы в последствии считать его из элемента через ItemIndex.
var S:String;
N:integer;
////---------------
S:=ListBox1.Items.Strings[Index]; // строка
N:=integer(ListBox1.Items.Objects[Index]); // твое значение.
Т.е. суть в чем:
ListBox1.Items.AddObject('Эта строка для отображения в ListBox',Pointer(_А_это_целое_число)); // обращение к ним - выше
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[2]: Добавление скрытого значения в элемент listbox
Здравствуйте, DarkMaster, Вы писали:
DM>Здравствуйте, 4e6ypek, Вы писали:
4>>Товарищи! Помогите решить проблему!!! Суть такова — надо в элемент listbox, помимо отображаемой надписи, записать целое число чтобы в последствии считать его из элемента через ItemIndex.
Здравствуйте, Aniskin, Вы писали:
A>Здравствуйте, 4e6ypek, Вы писали:
4>>Спасибо огромное, всё работает!!!
A>Не забывайте, что не сможете считать значение -1, хотя записывается оно без проблемм.
Серьезная заява!
sl:=TStringList.Create;
for i:=1 downto -5 do
sl.AddObject('sss',Pointer(i));
for I := 0 to sl.Count-1 do
ShowMessage(IntToStr(Integer(sl.Objects[i])));
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
Re[4]: Добавление скрытого значения в элемент listbox
Здравствуйте, Aniskin, Вы писали:
A>Здравствуйте, 4e6ypek, Вы писали:
4>>Спасибо огромное, всё работает!!!
A>Не забывайте, что не сможете считать значение -1, хотя записывается оно без проблемм.
Всё зависит от того, к чему его тайпкастить и каков размер Integer-а. Если размер совпадает с размером указателя и тайпкастить в Signed-тип то без проблем.
RSDN@Home v.1.2.0 ORIGIN:Больше чем юзеры сисадмина могут замучить только юзерши.
Re[5]: Добавление скрытого значения в элемент listbox
Здравствуйте, Aniskin, Вы писали:
A>Здравствуйте, FilosOFF, Вы писали:
A>>>Не забывайте, что не сможете считать значение -1, хотя записывается оно без проблемм. FOF>>Серьезная заява!
FOF>> sl:=TStringList.Create;
A>Какая связь между TListBox.Items и TStringList?
Я вам скажу, по секрету, только ни кому, договорились?
TListBox.Items это и есть TStringList.
Вы бы это, в хелп чтоль заглянули.
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
Re[7]: Добавление скрытого значения в элемент listbox
Здравствуйте, FilosOFF, Вы писали:
A>>Какая связь между TListBox.Items и TStringList? FOF>Я вам скажу, по секрету, только ни кому, договорились? FOF>TListBox.Items это и есть TStringList. FOF>Вы бы это, в хелп чтоль заглянули.
Если бы вы в хелп, а лучше в исходники, заглянули, то вы бы увидели, что TListBox.Items это TStrings. А TStrings — это далеко не TStringList.
Re[8]: Добавление скрытого значения в элемент listbox
Здравствуйте, Aniskin, Вы писали:
A>Если бы вы в хелп, а лучше в исходники, заглянули, то вы бы увидели, что TListBox.Items это TStrings. А TStrings — это далеко не TStringList.
Ну так загляни в исходники! А затем почитай что есть абстрактные классы и что есть полиморфизм. И почему TListBox.Items — это действительно TStringList.
RSDN@Home v.1.2.0 ORIGIN:ALL RIGHTS REVERSED
Re[9]: Добавление скрытого значения в элемент listbox
Здравствуйте, Aniskin, Вы писали:
A>Здравствуйте, Eagle-XK, Вы писали:
EX>>Ну так загляни в исходники!
A>Я то заглянул в исходники, а ты туда смотрел? Я увидел следующее:
A>1) Свойство Items объявлено в классе TCustomListBox как Tstrings. A>2) Свойство Items иницилизируется в конструкторе класса TCustomListBox строкой Fitems := TListBoxStrings.Create A>3) TListBoxStrings = class(TStrings) A>4) TStringList = class(TStrings)
A>А что ты увидел там?
Хмм.. Да, в этом моя оплошность — действительно там TListBoxStrings. Но это сути дела не меняет, т.к. в рассматриваемом примере эти классы-наследники TStrings работают сравнимо одинаково.
RSDN@Home v.1.2.0 ORIGIN:Если отладка — уничтожение багов, то программирование — их создание.
Re[10]: Добавление скрытого значения в элемент listbox
Здравствуйте, Aniskin, Вы писали:
A>Здравствуйте, Eagle-XK, Вы писали:
EX>>Ну так загляни в исходники!
A>Я то заглянул в исходники, а ты туда смотрел? Я увидел следующее:
A>1) Свойство Items объявлено в классе TCustomListBox как Tstrings. A>2) Свойство Items иницилизируется в конструкторе класса TCustomListBox строкой Fitems := TListBoxStrings.Create A>3) TListBoxStrings = class(TStrings) A>4) TStringList = class(TStrings)
A>А что ты увидел там?
EX>>А затем почитай что есть абстрактные классы и что есть полиморфизм. И почему TListBox.Items — это действительно TStringList.
A>Твои познания в области ООП позволяют утверждать тебе, что два класса являются одинаковыми лиш на том основании, что они имеют общего предка?
А ведь твоя правда, сейчас посмотрел что там делаецо, там переопределен метод GetObject. Принимаю свои слова обратно и приношу извинения, был не прав.
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
Re[11]: Добавление скрытого значения в элемент listbox
function TComboBoxStrings.GetObject(Index: Integer): TObject;
begin
Result := TObject(SendMessage(ComboBox.Handle, CB_GETITEMDATA, Index, 0));
if Longint(Result) = CB_ERR then
Error(SListIndexError, Index);
end;
CB_ERR = -1... Не учёл. Сконфужен... Прошу прощения
RSDN@Home v.1.2.0 ORIGIN:Хуже грабель могут быть только... детские грабли.
Re[11]: Добавление скрытого значения в элемент listbox