Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Список цветов

Автор: Client 25.05.2009 21:24

var
ATypeInfo: PTypeInfo;
i:Tcolor;
begin
memo1.Clear;
ATypeInfo := TypeInfo(Tcolor);
for i:=high(tcolor)-40 to high(tcolor) do
memo1.Lines.Add(GetEnumName(ATypeInfo, ord(i)));
end;
или
var
i:Tcolor;
begin
memo1.Clear;
for i:=high(tcolor)-40 to high(tcolor) do
memo1.Lines.Add(colortostring(i));
end;
Выдает список из номеров цветов, а не из их названий. Как можно взять имя цвета?

Автор: volvo 25.05.2009 21:58

Я ж написал, что не получится у тебя работать с константами через GetEnumName... Проверил? Убедился? smile.gif

Вот так попробуй:

procedure TForm1.MyColorCallback(const S: string); // Опиши в классе формы
begin
Memo1.Lines.Add(S);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
memo1.Clear;
GetColorValues(MyColorCallback); // Описано в модуле Graphics
end;

Автор: Client 25.05.2009 22:02

Все получилось
Тока что-то не понял работу всего этого. В первой процедуре идет добавление в список и все. На кнопку мемо очищается и вызывается GetColorValues со странным параметром...

Цитата
Описано в модуле Graphics
А как посмотреть? CTRL+F1?

Автор: volvo 25.05.2009 22:27

Это Callback процедура... Вот так это все работает:

1) есть описание всех цветов:

const
Colors: array[0..51] of TIdentMapEntry = ( ... );

2) есть сама процедура GetColorValues:
procedure GetColorValues(Proc: TGetStrProc);
var
I: Integer;
begin
for I := Low(Colors) to High(Colors) do Proc(Colors[I].Name);
end;
, и твоя, которая передается в GetColorValues, и вызывается на каждой итерации цикла. Теперь понятнее, как это печатается?

Цитата
А как посмотреть? CTRL+F1?
Если исходники доступны - то Ctrl + клик мышью на имени процедуры... Если нет - то Ctrl+F1, хоть что-то...

Автор: Client 25.05.2009 22:40

Получается что к этому массиву цветов нельзя просто так обратиться. Он описан где-то как недоступный для других модулей (в секции private модуля graphics)?

Автор: volvo 25.05.2009 22:42

Цитата
Он описан где-то как недоступный для других модулей (в секции private модуля graphics)?
yes2.gif Ну сам посуди, если б он был доступен, стали бы делать специальные средства доступа к нему? (только не в секции Private, а в Implementation)

Автор: Client 25.05.2009 22:51

а так хочется чего-то попроще smile.gif
СПАСИБО БОЛЬШОЕ VOLVO