Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.13;
Скачать: CL | DM;

Вниз

Combobox Items   Найти похожие ветки 

 
Сатир   (2002-06-03 14:41) [0]

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

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

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


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

uses TypInfo;

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


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

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


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

К примеру: (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:17) [4]

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


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

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


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

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





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

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 16:49) [8]

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 17:00) [9]

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 17:50) [10]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2002.06.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
3-39961
zuz
2002-05-18 14:40
2002.06.13
Table


1-40080
indigo
2002-06-02 19:13
2002.06.13
forms


1-39978
Dizer
2002-05-31 15:17
2002.06.13
Из *.BMP 1024х768 в *.jpg 640х480


3-39940
SkyWalker
2002-05-20 13:17
2002.06.13
ADO


4-40202
zhmax
2002-04-08 14:43
2002.06.13
Как получить идентификаторы потоков одного процесса под NT ?