Товарищи! Помогите решить проблему!!! Суть такова - надо в элемент 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]
Добавление скрытого значения в элемент listbox
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Куда то вы в дебри лезите.
Если у вас идет по порядку в excel (сомневаюсь что она у вас random типа), а считаете вы поля ровно со второй строки, то при считывании строки прибавлейте эти две строки и уровняете порядок item'a с полем excel (либо на то значение которое у вас разрывает это уравнивание):
Если у вас идет по порядку в excel (сомневаюсь что она у вас random типа), а считаете вы поля ровно со второй строки, то при считывании строки прибавлейте эти две строки и уровняете порядок item'a с полем excel (либо на то значение которое у вас разрывает это уравнивание):
Код: Выделить всё
i:=ListBox1.ItemIndex;
Image1.Picture.LoadFromFile(Sheet2.Cells[i+2,1]
< L3X. (ICQ: 8721378, Mail - l3x@list.ru)
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
а если приспичило именно целое, то обычная практика такая:
Поскольку вторым параметром в AddObject нужен указатель, то приводите целое к типу pointer а потом обратно, т.е.
then ListBox1.Items.AddObject(Sheet2.Cells[i,1], pointer(i));
а обратно как у вас
Поскольку вторым параметром в AddObject нужен указатель, то приводите целое к типу pointer а потом обратно, т.е.
then ListBox1.Items.AddObject(Sheet2.Cells[i,1], pointer(i));
а обратно как у вас
