2013-08-11 4 views
0

Я просто знаю, что я делаю что-то действительно глупо здесь, но, похоже, я не могу это исправить.Проблема с преобразованием цвета Delphi

У меня есть первая попытка раскрасить фон ячейки в DBGrid, чего я до сих пор избегал. У меня есть поле под названием «Buttoncolour», которое имеет шестнадцатеричный цвет в форме «CCFFCC». У меня есть еще одна колонка, которую я хочу раскрасить, называемую «ColourDescription». Я хочу использовать шестнадцатеричный цветовой код для окраски холста ячейки «ColourDescription».

У меня есть этот код:

procedure TProductForm.MDBGrid2DrawColumnCell(Sender: TObject; 
    const Rect: TRect; DataCol: Integer; Column: TDBGColumn; 
    State: TGridDrawState); 
var 
    CCol : String; 
begin 
    if column.fieldname = 'ColourDescription' then begin 
     CCol := ProdGroupQuery.FieldByName('Buttoncolour').AsString; 
     Canvas.Brush.Color:= StringToColor(CCol); 
    end; 
end; 

я получаю ошибку компиляции, говоря мне, что что-то не является целым числом. Я предполагаю, что у меня все получилось не так. Может ли кто-нибудь из вас добрых людей сказать мне, что я ДОЛЖЕН делать, пожалуйста?

Спасибо!

+2

Мое предположение, что ошибка появляется (во время выполнения) от 'StringToColor', когда вы пытаетесь преобразовать значение не целое число (не гекс). Вы должны добавить '$' char в начале этой строки (чтобы быть как '$ CCFFCC', поэтому в вашем коде это будет' Canvas.Brush.Color: = StringToColor ('$' + CCol); '). – TLama

ответ

0

Ваша строка кодируется в шестнадцатеричном формате. Чтобы StringToColor декодировал это, вы должны префикс строки с символом $.

Canvas.Brush.Color := StringToColor('$'+CCol); 

Это стало ясно в documentation, который всегда стоит читать, когда вы застряли.

Может быть проще назвать StrToInt вместо StringToColor, поскольку StringToColor делает больше, чем вам нужно.

Canvas.Brush.Color := TColor(StrToInt('$'+CCol)); 
+0

Спасибо - я пробовал это сейчас, и ошибка уходит - но цвета не меняются. Я также добавил изменение цвета шрифта, когда запись отмечена как неактивная, и это тоже не работает. – Capfka

+0

Прежде всего, вы устанавливаете цвет кисти холста формы, но вы, очевидно, хотите изменить цвет ячейки, поэтому вы должны использовать либо «MDBGrid2.Canvas.Brush.Color», либо «TDBGrid (Sender) .Canvas. Brush.Color'. Следующее, что вы ничего не рисуете. Я думаю, вам нужно заполнить прямоугольник и нарисовать текст самостоятельно (но, возможно, я ошибаюсь в последнем). – TLama

+0

Вы спросили, как решить вашу непосредственную проблему, ошибка времени выполнения, потому что вы передали неправильное значение в StringToColor. Это отвечает на это. Пожалуйста, не просите нас отлаживать всю вашу программу. Для вас это реально? Нам отлаживать код, который мы не видим? Во всяком случае, проблема, вероятно, в том, что вы работаете на холсте формы, а не на холсте элемента управления. –

Смежные вопросы