Вот еще наработки по данной теме:
| Код | const mcol :array[0..3] of tcolor=($FAA6EA, // 0 цвет по-умолчанию $FADD8A, // 1 выделенная ячейка $AAFFAA, // 2 правильно заполненная ячейка $AFAAFF);// 3 неправильно заполненная ячейка const mfont:array[0..3] of tcolor=($000000, // 0 цвет шрифта по-умолчанию $000000, // 1 выделенная ячейка $000000, // 2 правильно заполненная ячейка $000000);// 3 неправильно заполненная ячейка type tstrcolor = class(TObject) public bkcolor :TColor; fontcolor:tcolor; end; ...
//-------------- создание класса с цветами ячеек таблицы ----------------------- //-------------- и очистка полей таблицы --------------------------------------------- procedure strgridcolor(protocol: TStringGrid); var i,j:integer; begin with protocol do for i:=1 to ColCount-1 do for j:=1 to RowCount-1 do begin if (Objects[i,j])=nil then Objects[i,j]:=tstrcolor.Create; cells[j,i]:=''; (Objects[i,j] as TStrColor).bkcolor:=mcol[0]; (Objects[i,j] as TStrColor).fontcolor:=mfont[0]; end; end; //------------------------------------------------------------------------------
//-------------- меняем цвет ячейки на нужный ---------------------------------- procedure setcolorcell(protocol:tstringgrid;ACol,ARow:Integer;flagcol:byte); var rect:trect; begin rect:=protocol.CellRect(acol,arow); with protocol.Canvas do begin case flagcol of 0: begin Brush.color:=(protocol.Objects[acol,arow] as TStrColor).bkcolor; Font.Color :=(protocol.Objects[acol,arow] as TStrColor).fontcolor; end; 1: begin Brush.color:=mcol[flagcol]; Font.Color :=mfont[flagcol]; end; 2,3: begin Brush.color:=mcol[flagcol]; Font.Color :=mfont[flagcol]; (protocol.Objects[acol,arow] as TStrColor).bkcolor:=mcol[flagcol]; (protocol.Objects[acol,arow] as TStrColor).fontcolor:=mfont[flagcol]; end; end; FillRect(Rect); TextOut(Rect.Left+2,Rect.Top+2,protocol.Cells[ACol,ARow]); end; end; //------------------------------------------------------------------------------
//-------------- при перемещении по протоколу ---------------------------------- procedure Tworkwin.protocolDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if (acol>0)and(arow>0) then begin setcolorcell(protocol,acol,arow,0); if arow<2 then begin arow:=2; protocol.row:=2; end; if (gdFocused in State)or(gdselected in State) then setcolorcell(protocol,acol,arow,1) end; end; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ var protocol: TStringGrid;
и при инициализации формы: strgridcolor(protocol); // создадуться обьекты для каждой ячейки, хранящие цвета
|
|