Добавление скрытого значения в элемент listbox
От: 4e6ypek  
Дата: 29.06.10 14:21
Оценка:
Товарищи! Помогите решить проблему!!! Суть такова — надо в элемент listbox, помимо отображаемой надписи, записать целое число чтобы в последствии считать его из элемента через ItemIndex.
Подробнее: есть listbox, строки которого заполняются циклом из книги excel, и image, в котором в зависимости от listbox.itemindex отображается определённое изображение. Необходимо записать номер строки excel, из которой заполняется listbox.item, в этот item, чтобы потом в методе image.picture.loadfromfile можно было обратиться к ячейке содержащей имя файла.
Погуглил, почитал, вроде можно это осуществить используя listBox.items.addobject. Попробовал — listbox всё также заполняется, но что-то число толи не записывается толи у мну ручки кривые, что я не могу его извлечь...
Буду премного благодарен за любую помощь/советы всем откликнувшимся, дело оч срочное!!!
Ниже прилагаю код:
[QUOTE]unit Unit3;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, jpeg, ComObj, StdCtrls;

type
TForm3 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
Image1: TImage;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form3: TForm3;

implementation

uses unit1, unit2;

var
x,i : integer;

{$R *.dfm}

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;

procedure TForm3.ListBox1Click(Sender: TObject);
begin
Button1.Enabled:=True;
x:=Integer(ListBox1.Items.Objects[Listbox1.ItemIndex]);
Label4.Caption:=Inttostr(x);
// Image1.Picture.LoadFromFile(Sheet2.Cells[x, 2]);
Edit1.Text:=Sheet2.Cells[ListBox1.ItemIndex+2, 3];
Edit2.Text:=Sheet2.Cells[ListBox1.ItemIndex+2, 4];
end;

end.[/QUOTE]
delphi excel listbox item.addobject itemindex
Re: Добавление скрытого значения в элемент listbox
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 29.06.10 14:31
Оценка: 3 (1)
Здравствуйте, 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
От: 4e6ypek  
Дата: 29.06.10 17:36
Оценка:
Здравствуйте, DarkMaster, Вы писали:

DM>Здравствуйте, 4e6ypek, Вы писали:


4>>Товарищи! Помогите решить проблему!!! Суть такова — надо в элемент listbox, помимо отображаемой надписи, записать целое число чтобы в последствии считать его из элемента через ItemIndex.



DM>
DM>var S:String;
DM>    N:integer;
DM> ////---------------
DM>S:=ListBox1.Items.Strings[Index];          // строка
DM>N:=integer(ListBox1.Items.Objects[Index]); // твое значение.
DM>


DM>Т.е. суть в чем:


DM>

DM>  ListBox1.Items.AddObject('Эта строка для отображения в ListBox',Pointer(_А_это_целое_число)); // обращение к ним - выше
DM>

Спасибо огромное, всё работает!!!
Re[3]: Добавление скрытого значения в элемент listbox
От: Aniskin  
Дата: 29.06.10 18:55
Оценка: +1 -1
Здравствуйте, 4e6ypek, Вы писали:

4>Спасибо огромное, всё работает!!!


Не забывайте, что не сможете считать значение -1, хотя записывается оно без проблемм.
Re[4]: Добавление скрытого значения в элемент listbox
От: FilosOFF Россия  
Дата: 01.07.10 10:46
Оценка:
Здравствуйте, 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
От: Eagle-XK Украина http://esoft.pp.ua
Дата: 01.07.10 10:52
Оценка:
Здравствуйте, Aniskin, Вы писали:

A>Здравствуйте, 4e6ypek, Вы писали:


4>>Спасибо огромное, всё работает!!!


A>Не забывайте, что не сможете считать значение -1, хотя записывается оно без проблемм.


Всё зависит от того, к чему его тайпкастить и каков размер Integer-а. Если размер совпадает с размером указателя и тайпкастить в Signed-тип то без проблем.


RSDN@Home v.1.2.0
ORIGIN: Больше чем юзеры сисадмина могут замучить только юзерши.
Re[5]: Добавление скрытого значения в элемент listbox
От: Aniskin  
Дата: 01.07.10 10:56
Оценка: :))
Здравствуйте, FilosOFF, Вы писали:


A>>Не забывайте, что не сможете считать значение -1, хотя записывается оно без проблемм.

FOF>Серьезная заява!

FOF> sl:=TStringList.Create;


Какая связь между TListBox.Items и TStringList?
Re[6]: Добавление скрытого значения в элемент listbox
От: FilosOFF Россия  
Дата: 01.07.10 11:02
Оценка:
Здравствуйте, 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
От: Aniskin  
Дата: 01.07.10 11:10
Оценка: +1 -1 :))
Здравствуйте, FilosOFF, Вы писали:

A>>Какая связь между TListBox.Items и TStringList?

FOF>Я вам скажу, по секрету, только ни кому, договорились?
FOF>TListBox.Items это и есть TStringList.
FOF>Вы бы это, в хелп чтоль заглянули.

Если бы вы в хелп, а лучше в исходники, заглянули, то вы бы увидели, что TListBox.Items это TStrings. А TStrings — это далеко не TStringList.
Re[8]: Добавление скрытого значения в элемент listbox
От: Eagle-XK Украина http://esoft.pp.ua
Дата: 01.07.10 11:19
Оценка: +1
Здравствуйте, Aniskin, Вы писали:

A>Если бы вы в хелп, а лучше в исходники, заглянули, то вы бы увидели, что TListBox.Items это TStrings. А TStrings — это далеко не TStringList.


Ну так загляни в исходники! А затем почитай что есть абстрактные классы и что есть полиморфизм. И почему TListBox.Items — это действительно TStringList.


RSDN@Home v.1.2.0
ORIGIN: ALL RIGHTS REVERSED
Re[9]: Добавление скрытого значения в элемент listbox
От: Aniskin  
Дата: 01.07.10 11:37
Оценка: 2 (1) +2 -1
Здравствуйте, Eagle-XK, Вы писали:

EX>Ну так загляни в исходники!


Я то заглянул в исходники, а ты туда смотрел? Я увидел следующее:

1) Свойство Items объявлено в классе TCustomListBox как Tstrings.
2) Свойство Items иницилизируется в конструкторе класса TCustomListBox строкой Fitems := TListBoxStrings.Create
3) TListBoxStrings = class(TStrings)
4) TStringList = class(TStrings)

А что ты увидел там?

EX>А затем почитай что есть абстрактные классы и что есть полиморфизм. И почему TListBox.Items — это действительно TStringList.


Твои познания в области ООП позволяют утверждать тебе, что два класса являются одинаковыми лиш на том основании, что они имеют общего предка?
Re[10]: Добавление скрытого значения в элемент listbox
От: Eagle-XK Украина http://esoft.pp.ua
Дата: 01.07.10 11:54
Оценка:
Здравствуйте, 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
От: FilosOFF Россия  
Дата: 01.07.10 12:01
Оценка:
Здравствуйте, 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
От: Eagle-XK Украина http://esoft.pp.ua
Дата: 01.07.10 12:12
Оценка:
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
От: Aniskin  
Дата: 01.07.10 12:14
Оценка:
Здравствуйте, FilosOFF, Вы писали:

FOF>приношу извинения, был не прав.


Принимаю извинения.
Re[12]: Добавление скрытого значения в элемент listbox
От: Aniskin  
Дата: 01.07.10 12:15
Оценка:
Здравствуйте, Eagle-XK, Вы писали:

EX>Прошу прощения


Принимаю извинения.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.