Stringgrid красим ячейку текущей строки

  • Автор темы HarDir
  • Дата начала
H

HarDir

#1
Как закрасить первую ячейку текущей строки? Т.е. необходимо реализовать нечто подобное как в MS Excel. Т.е. я перемещаюсь по полю с пом. мыши или стрелок а в этот момент слева от текущей ячейки самая первая ячейка меняет свой цвет. Как сменить цвет текущей ячейки я знаю,

Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if (gdFocused in State) then
begin
StringGrid1.Canvas.Brush.Color := clBlack;
StringGrid1.Canvas.Font.Color := clWhite;
end
end;
а вот как это сделать с любой другой?

 
09.11.2009
665
1
#2
красит в синий цвет
Код:
procedure TForm3.Button1Click(Sender: TObject);
begin
with stringgrid1 do
begin
Canvas.Brush.Color:=clblue;

Canvas.FillRect(bounds(0,Selection.Top*(RowHeights[Selection.Top]+1),
ColWidths[Selection.Top],RowHeights[Selection.Top]+1));

Canvas.FillRect(bounds(selection.Left*(ColWidths[Selection.Top]+1),
0,ColWidths[Selection.Top],RowHeights[Selection.Top]+1));
end;
end;
 
H

HarDir

#3
Dock1100 - нет, не то. Квадрат зарисовывает всё полностью, не исчезает после перехода на другую строку, и не рисует ниже, если строк около 100.
Может кто знает, как сделать хотя бы выделение текущей строки путём изменения шрифта в текущей строке на жирный. мне и такой вариант прокатит. За наградой дело не встанет, я не сильно богат, но 1 WMZ за рабочий вариант кода гарантирую.
Ещё раз перефразирую задачу:
Имеется поле размером 50 на 200 клеток. Первый столбец содержит нумерацию, второй ФИО, а далее служ. информация. Если юзер находится, скажем в конце текущей строки, то ему довольно сложно соорентироваться кого он щас редактирует. Нужно как-то выделить редактируемую строку, чтобы пользователь, проследив глазами до второй колонки, смог понять, кого он сейчас редактирует.
Для справки:
Первые 3 колонки и Первые две строки фиксированы. Поле содержит маленькие клетки.
 
09.11.2009
665
1
#4
Что код доработать сложно?

Добавлено:
Код:
procedure TForm3.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
stringgrid1.Repaint;
with stringgrid1 do
begin
Canvas.Brush.Color:=rgb(230,230,255);

Canvas.FillRect(bounds(0,Selection.Top*(RowHeights[Selection.Top]+1),
ColWidths[Selection.Top],RowHeights[Selection.Top]+1));
canvas.TextOut(0,Selection.Top*(RowHeights[Selection.Top]+1),Cells[0,Selection.Top]);

Canvas.FillRect(bounds(selection.Left*(ColWidths[Selection.Top]+1),
0,ColWidths[Selection.Top],RowHeights[Selection.Top]+1));
canvas.TextOut(selection.Left*(ColWidths[Selection.Top]+1),0,Cells[selection.Left,0]);
end;
end;
 
H

HarDir

#5
Короче сам придумал, Dock1100 навёл на некоторую идею, вроде прокатило:

Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (((Acol=0)and(Mrow=Arow))or(Acol=Mcol))and((Arow=Mrow)or((Arow=0)and(MCol=Acol))) then
begin
StringGrid1.Canvas.Brush.Color := clSkyBlue;
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextOut(Rect.Left+2, Rect.Top+2, StringGrid1.Cells[ACol, ARow]);
end;
end;
Mcol и Mrow берутся от сюда:
Код:
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
Mcol:=Acol;
Mrow:=Arow;
form1.StringGrid1.Repaint;
end;
Немного тормозит при перепрорисовке, но на пока прокатит.