Страница 1 из 1

Добавление скрытого значения в элемент listbox

Добавлено: 29 июн 2010, 16:46
4e6ypek
Товарищи! Помогите решить проблему!!! Суть такова - надо в элемент listbox, помимо отображаемой надписи, записать целое число чтобы в последствии считать его из элемента через ItemIndex.
Подробнее: есть listbox, строки которого заполняются циклом из книги excel, и image, в котором в зависимости от listbox.itemindex отображается определённое изображение. Необходимо записать номер строки excel, из которой заполняется listbox.item, в этот item, чтобы потом в методе image.picture.loadfromfile можно было обратиться к ячейке содержащей имя файла.
Погуглил, почитал, вроде можно это осуществить используя listBox.items.addobject. Попробовал - listbox всё также заполняется, но что-то число толи не записывается толи у мну ручки кривые, что я не могу его извлечь...
Буду премного благодарен за любую помощь/советы всем откликнувшимся, дело оч срочное!!!
Ниже прилагаю код:
[syntax='Delphi']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.[/syntax]

Re: Добавление скрытого значения в элемент listbox

Добавлено: 30 июн 2010, 08:26
BHy4ok
Куда то вы в дебри лезите.
Если у вас идет по порядку в excel (сомневаюсь что она у вас random типа), а считаете вы поля ровно со второй строки, то при считывании строки прибавлейте эти две строки и уровняете порядок item'a с полем excel (либо на то значение которое у вас разрывает это уравнивание):

Код: Выделить всё

i:=ListBox1.ItemIndex;
Image1.Picture.LoadFromFile(Sheet2.Cells[i+2,1]

Re: Добавление скрытого значения в элемент listbox

Добавлено: 01 июл 2010, 10:36
Игорь Акопян
а если приспичило именно целое, то обычная практика такая:
Поскольку вторым параметром в AddObject нужен указатель, то приводите целое к типу pointer а потом обратно, т.е.

then ListBox1.Items.AddObject(Sheet2.Cells[i,1], pointer(i));

а обратно как у вас