Главная страница
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.011 c
1-40014
Валет
2002-06-03 17:19
2002.06.13
Поиск в StringList


1-40081
Goblinus
2002-06-02 20:58
2002.06.13
RichEdit


8-40112
DenKop
2002-01-28 22:01
2002.06.13
DirectSound


1-40064
DeMoN-777
2002-06-02 12:57
2002.06.13
StringList


4-40207
chernoruk
2002-04-09 19:08
2002.06.13
Народ! Ну что такое буфер, а?