alexs писал(а):Вопрос - зачем она тебе нужна? если обоснуеш и убедиш меня - то подумаем.
Пожалуйста, обосновываю.
Я вывожу в сетку
1. № пп
2.Наименование организации
3.....N - значения оказателей
1 и 2 колонки делаю фиксироваными , чтобы при скроллинге вправо не исчезало наименование.
При движении по сетке выделятся определенная ячейка в колонках от 3 до N, но фиксированые ячейки при этом остаются
неизменны и невидно по какому наименованию (колонки 1..2) я смотрю параметры, в Stringrid я подкрашиваю строку фиксированной ячейки чтобы было понятно с каким наменованием я работаю
вот скриншот моего stringrid
http://lexmai.vndv.com/stringrid.jpg, поторить такое же на rxDbGrid не возможно
- Код: Выделить всё
procedure TMainForm.pagemicroDrawCell(Sender: TObject; aCol, aRow: Integer;
aRect: TRect; aState: TGridDrawState);
var i:integer;
begin
with (Sender as TStringGrid) do
if gdFixed in aState then
begin
if (ACol = Col) or (ARow = Row)
then
begin
Canvas.Font.Color :=clBlack;
Canvas.Brush.Color :=$E7EEF5;
end
else
Canvas.Font.Color :=clBlack;
Canvas.FillRect(aRect);
DrawText(Canvas.Handle, PChar(Cells[ACol, ARow]), -2, aRect, DT_SINGLELINE or DT_VCENTER);
end
else
begin
aRect := CellRect(ACol, 0);
for I := 1 to FixedRows - 1 do
with CellRect(ACol, I) do
Inc(aRect.Bottom, Bottom - 1);
InvalidateRect(Handle, @aRect, True);
aRect := CellRect(0, ARow);
for I := 1 to FixedCols - 1 do
with CellRect(I, ARow) do
Inc(aRect.Right, Right - Left);
InvalidateRect(Handle, @aRect, True);
end;
procedure TMainForm.pagemicroMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var ACol, ARow: integer;
p:TPoint;
begin
//Если произошло отпускание правой кнопки мыши
if Button=mbLeft then
begin
//Узнаем номер ячейки, над которой произошло отпускание кнопки мыши
(Sender as TStringGrid).MouseToCell(X, Y, ACol, ARow);
//Делаем эту ячейку активной
(Sender as TStringGrid).Col:=ACol;
(Sender as TStringGrid).Row:=ARow;
//TPoint - это структура, обозначающая координаты точки
p:=Point(X, Y);
//Переводим локальную координату точки в экранную
p:=(Sender as TStringGrid).ClientToScreen(p);
end;
end;
Добавлено спустя 2 часа 12 минут 6 секунд:а вот как себя ведет последний релиз svn ( 957)
http://lexmai.vndv.com/rxDbGrid.jpgвнизу disigne-time
Вот подправил код процедуры defaltdrawtitle если надо могут выставить код
тут все цветные ячейки фиксированы, в существующем 957 релизе rxdbgrid этого сделать нельзя
http://lexmai.vndv.com/newRxdbgrid.jpg теперь можно раскрашивать всю колонку фиксированную и её title в разные цвета
вот бы еще конкретную строку строку фиксированной колонки подкрашивать по номеру строки ?
Нет времени копаться, было бы неплохо, хотя многострочные заголовки работают криво если менять их ширину, тупо увеличивается высота
самого нижнего слоя заголовка, хотя длинная строка может быть у самого вехнего слоя заголовка