Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

подстановка значения в созданный тип [D7]


dixa ©   (2010-04-13 22:35:00) 

Здравствуйте уважаемые! Есть вопрос, который я не могу решить, замучился уже искать, если поможете буду очень рад:
Пользователь выбирает значение(предположим из listbox) и дальше мне нужно определить в каком значении это искать:
MyRec = record
Name: string[100];
property1: integer;
property2: integer;
property3: integer;
end;
var
kurs: MyRec;

Забили какими-то значениями(kurs.name:=бла бла бла,kurs.property1:=10, kurs.property2:=25, kurs.property3:=55) затем запустили прогу, пользователь выбрал значение например "property1"
Теперь мне надо достать значение из listbox :
Listbox1.Items[Listbox1.ItemIndex]
Достаю, теперь мне надо выдать значение предположим kurs.property1
То есть мне надо выдернуть значение "10".
Как это сделать?...


dixa   (2010-04-15 20:25:00) [1]

Спасибо большое за оперативность, инфа помогла)


Плохиш   (2010-04-14 10:47:00) [2]

Обучение программированию на форуме с нуля.

PS. Предлагаю переименовать "начинающим" в "делфи за 21 секунду для полных идиотов".


Leonid Troyanovsky   (2010-04-14 09:26:00) [3]


> dixa ©   (13.04.10 22:35)  

> Достаю, теперь мне надо выдать значение предположим kurs.
> property1


type
 TMyRec = record
   Name: string[100];
   property1: Longint;
   property2: Longint;
   property3: Longint;
 end;

const
 Map: array [0..2] of TIdentMapEntry = (
   (Value: 0; Name: 'Property1'),
   (Value: 1; Name: 'Property2'),
   (Value: 2; Name: 'Property3'));

function GetValByName(const rec: TMyRec; const PropName: string): Longint;
var
 pVal: PLongint;
 ofs: Longint;
begin
 if not IdentToInt(PropName, ofs, Map) then
   raise Exception.Create('Invalid property name');
 pVal := @rec.property1;
 Inc(pVal, ofs);
 Result := pVal^;
end;

var
 myrec : TMyRec;

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
 with Sender as TListBox do
   ShowMessage(IntToStr(GetValByName(myrec, Items[ItemIndex])));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 with myrec do
   begin
     Name := 'name';
     property1 := 1;
     property2 := 2;
     property3 := 3;
   end;
end;

Но, во-ще-то, в подобных случаях надо объявлять
properties: array [0..2] of Longint

--
Regards, LVT.


Dennis I. Komarov   (2010-04-14 08:54:00) [4]

ИМХО "X,Y,Z"


Германн   (2010-04-14 01:51:00) [5]


> Что достаёшь-то?
> ListBox.Items[n] - это строка.
>

Ага. Но и "property1: integer;" тоже строка.
Только эти строки находятся в разных пространствах. :)


Демо   (2010-04-14 01:46:00) [6]


> Теперь мне надо достать значение из listbox :Listbox1.Items[Listbox1.
> ItemIndex]Достаю,


Что достаёшь-то?
ListBox.Items[n] - это строка.


Германн   (2010-04-14 01:02:00) [7]

Можно конечно и извратиться, но имхо чем табличное представление данных не устроило?


Германн   (2010-04-14 01:00:00) [8]


> И. Павел ©   (13.04.10 23:38) [3]

Какой тогда смысл в записи?


И. Павел   (2010-04-13 23:38:00) [9]

MyRec = record
 property:array [0..x] of variant;
end;

...

n:=kurs.property[Listbox1.ItemIndex];


dixa   (2010-04-13 23:31:00) [10]

Если можно поподробней, я не до конца понял как тут поможет массив типа variant...
хочется чтобы было что-то вроде:
n:=kurs.Listbox1.Items[Listbox1.ItemIndex];
но он так работать не хочет собака, ругается на ошибку...


И. Павел   (2010-04-13 23:02:00) [11]

Можно сделать массив: property:array [0..x] of variant. Нужный элемент выбирать по ItemIndex.


Наверх

Титульная страница Поиск, карта сайта Написать письмо