2012-10-15 50 views
9

Nó có thể là cơ bản nhưng tôi có một mã thời gian tìm mẫu để thay đổi màu hàng của chuỗi dựa trên giá trị từ cơ sở dữ liệu trong Chú khỉ lửa. Tôi có dữ liệu đến từ một MDB không có vấn đề nhưng cần hàng để có màu sắc nhất định cho ví dụ '1' = đỏ '2' = xanh vv Tôi biết tôi phải truy cập các yếu tố phong cách bằng cách nào đó 'OnApplyStyleLookup'? nhưng ở giai đoạn nào. Tôi đã thấy các câu hỏi về việc thay đổi kiểu chữ và màu sắc vv nhưng tôi đang đào một cái lỗ để bản thân cố gắng tìm đến phần tử 'nền' và áp dụng. Mọi sự trợ giúp sẽ rất được trân trọng. Cheers Richard ... (newbie để Firemonkey)Tô màu ô trên chuỗi dữ liệu màu cháy theo giá trị từ dữ liệu

+0

Để đặt màu bạn cần phải ghi đè lên các phương pháp SetData của các tế bào, nhưng lớp tế bào là cứng mã hóa trong một StringGrid. Bạn sẽ cần phải sử dụng một lưới bình thường với một lớp tế bào tùy chỉnh để làm điều đó. Hãy xem bài viết của tôi tại http://monkeystyler.com/blog/entry/firemonkey-grid-basics-custom-cells-and-columns để biết cách thực hiện điều đó. –

+0

Cảm ơn nhiều Mike. Bài viết của bạn có tài liệu tốt. Tôi làm việc toàn thời gian (không lập trình) vì vậy tôi biết những gì tôi sẽ làm vào cuối tuần này. –

Trả lời

4
{OnDrawColumnCell event} 

procedure OnDrawColumnCell(Sender: TObject; 
    const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; 
    const Row: Integer; const Value: TValue; const State: TGridDrawStates); 
var 
    RowColor : TBrush; 
begin 

    RowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha); 

{you can check for values and then set the color you want} 
    if Value.ToString = 'red' then 
    RowColor.Color := TAlphaColors.Red; 

    Canvas.FillRect(Bounds, 0, 0, [], 1, RowColor); 

    { perform default drawing } 
    TGrid(Sender).DefaultDrawColumnCell(Canvas, Column, Bounds, Row, 
    Value, State); 
end; 
0

Đây là mã của tôi với Delphi Berlin mà hoạt động tốt:

var 
    aRowColor: TBrush; 
begin 
    //it's better to write this line into create 
    aRowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha); 
    //----- 
    grid.DefaultDrawing := False; 
    if (myTbl.RcrdDataCount > 0) and (Row < myTbl.RcrdDataCount) then begin 
    if myTbl.RcrdDataItems[Row].State = TStateDeleted then begin 
     aRowColor.Color := TAlphaColors.Red; 
    end 
    else begin 
     aRowColor.Color := TAlphaColors.Gray; 
    end; 
    Canvas.FillRect(Bounds, 0, 0, [], 1, aRowColor); 
    Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State); 
    end; 
    //it's better to write this line into destroy 
    aRowColor.free; 
    //----- 
end; 
Các vấn đề liên quan