2013-08-11 5 views
0

나는 정말로 내가 여기있는 바보 같은 짓을하고 있다는 것을 알고 있지만, 나는 그것을 풀어 낼 수없는 것처럼 보인다.Delphi의 색상 변환 문제

DBGrid에서 셀 배경을 채색하는 데 처음 시도하고 있습니다. 지금까지 피할 수 없었습니다. 나는 "Buttoncolour"라는 필드를 가지고 있는데,이 필드는 "CCFFCC"형태로 16 진수를 유지합니다. 나는 ColourDescription이라고 불리는 다른 칼럼을 가지고 있습니다. "ColourDescription"셀의 캔버스를 색칠하기 위해 16 진수 색상 코드를 사용하고 싶습니다.

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

정수가 아닌 (16 진수가 아닌) 값을 변환하려고 할 때 오류가 (런타임시)'StringToColor'에서 나타납니다. 이 문자열의 시작 부분에'$'char을 추가해야합니다 ('$ CCFFCC'와 같아야합니다. 그래서 코드에서'Canvas.Brush.Color : = StringToColor ('$'+ CCol);'). – TLama

답변

0

문자열이 16 진수로 인코딩됩니다. StringToColor가이를 디코딩하려면 문자열 앞에 $ 기호를 붙여야합니다.

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

항상 문제가 발생할 때 읽을 가치가 documentation에 분명히있다.

StringToColor가 필요한 것보다 많기 때문에 StringToColor 대신 StrToInt를 호출하는 것이 더 간단 할 수 있습니다.

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

고마워요. 지금 시도해 보았습니다. 오류가 사라졌지만 색상이 변하지 않았습니다. 또한 레코드가 비활성으로 표시 되어도 작동하지 않는 경우 글꼴 색상 변경을 추가했습니다. – Capfka

+0

우선 폼의 캔버스 브러시의 색상을 설정하고 있지만 분명히 셀 색상을 변경하려고하므로 'MDBGrid2.Canvas.Brush.Color' 또는'TDBGrid (Sender) .Canvas 중 하나를 사용해야합니다. Brush.Color'. 다음은 당신이 아무것도 그리지 않는다는 것입니다. 직사각형을 채우고 혼자서 텍스트를 그릴 필요가 있다고 생각합니다.하지만 후자를 잘못 생각한 것 같습니다. – TLama

+0

StringToColor에 잘못된 값을 전달했기 때문에 즉각적인 문제를 해결하는 방법을 묻는 질문에 런타임 오류가 발생했습니다. 이 대답. 전체 프로그램을 디버그하도록 요청하지 마십시오. 당신이 그렇게하는 것이 현실적입니까? 우리가 볼 수없는 코드를 디버깅하려면? 어쨌든, 문제는 아마 당신이 컨트롤의 캔버스보다는 폼의 캔버스에서 작동하는 것입니다. –