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

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

Combobox Items [D6, Win2k]


Сатир ©   (2002-06-03 14:41:00) 

Народ! Подскажите, как присвоить в комбобокс в качестве элементов значения перечисляемых типов, напр., у меня есть тип:

type TRVAlignment = (rvaLeft, rvaRight, rvaCenter, rvaJustify);

Как призвоить все его значения комбобоксу, а потом при выборе, присваивать зничения из комбобокса переменной этого типа?


Игорь Шевченко   (2002-06-03 17:54:00) [1]

Кому нужно ? :-)))
Я написал пример, а в каком обработчике - это ведь без разницы
:-)


Сатир   (2002-06-03 17:50:00) [2]

2Игорь Шевченко ©
спасибо, только обработчик нужно ставить OnSelect....


Игорь Шевченко   (2002-06-03 17:00:00) [3]

procedure TForm1.ComboBox1Change(Sender: TObject);
var S : String;
I : TMyType;
begin
if ComboBox1.ItemIndex <> -1 then begin
S := ComboBox1.Items[ComboBox1.ItemIndex];
I := TMyType(GetEnumValue(TypeInfo(TMyType), S));
end;
end;

Я же писал про GetEnumValue...


Сатир   (2002-06-03 16:49:00) [4]

2Игорь Шевченко ©
кстати, я почти также сделал
i:=0;
with cbParaAlignment.Items do
for a:=low(TRVAlignment) to high(TRVAlignment) do begin
add(GetEnumName(TypeInfo(TRVAlignment),i));
i:=i+1;
end;
а как присвоить?
допустим у меня есть Combobox1.text и переменная T:TMyType
как присвоить строковое значение переменной этого типа?


Игорь Шевченко   (2002-06-03 15:53:00) [5]

uses TypInfo;

type
TMyType = (mcOne, mcTwo, mcThree);

procedure TForm1.Button6Click(Sender: TObject);
var
X : String;
ATypeInfo : PTypeInfo;
I : TMyType;
begin
ATypeInfo := TypeInfo(TMyType);
for I:=Low(TMyType) to High(TMyType) do begin
X := GetEnumName(ATypeInfo, Integer(I));
ComboBox1.Items.Add(X);
end;
end;

При выборе из ComboBox:
Использовать функцию GetEnumValue


Сатир   (2002-06-03 15:39:00) [6]

2Andrey007
а как их перечислять? руками набрать я-то их смогу, а как обратно присваивать значения? будет несовместимость типов:-(




Andrey007   (2002-06-03 15:31:00) [7]

А почему бы, не мудрствуя, не засунуть эти значения в Items?


Сатир   (2002-06-03 15:17:00) [8]

2Игорь Шевченко © (03.06.02 15:07)
Покажите, пожалуйста, как применить эти функции для заполнения списка значениями типа и наоборот, присвоением выбраного значения в списке переменной данного типа.


Игорь Шевченко   (2002-06-03 15:07:00) [9]

К примеру: (classes.pas)

procedure WriteSet(Value: Longint);
var
I: Integer;
BaseType: PTypeInfo;
begin
BaseType := GetTypeData(PropType)^.CompType^;
WriteValue(vaSet);
for I := 0 to SizeOf(TIntegerSet) * 8 - 1 do
if I in TIntegerSet(Value) then WriteStr(GetEnumName(BaseType, I));
WriteStr("");
end;


Сатир   (2002-06-03 15:04:00) [10]

2Игорь Шевченко © (03.06.02 14:44)
А можна пример использования этих функций, плз.


Игорь Шевченко   (2002-06-03 14:44:00) [11]

uses TypInfo;

function GetEnumName(TypeInfo: PTypeInfo; Value: Integer): string;
function GetEnumValue(TypeInfo: PTypeInfo; const Name: string): Integer;


Наверх

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