Цвет выделенной строки фиксированной колонки RxDbGrid

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Цвет выделенной строки фиксированной колонки RxDbGrid

Сообщение alexmai » 11.09.2009 16:33:28

Гсспода помогите разрулить, нету времени смотреть исходники
Нужно чтобы менялся цвет строки фиксированной колонки если строка выделена
Я уже подрихтовал RxDbGrid чтобы цвет заголовка и остальных строк фиксированной колонки были разными, а вот подсвечивать строку фиксированной колонки в выделенной строке никак не могу разобраться
процедура
procedure TRxDBGridMainForm.RxDBGrid1GetCellProps(Sender: TObject;
Field: TField; AFont: TFont; var Background: TColor);
не видит фиксированных колонок
alexmai
постоялец
 
Сообщения: 106
Зарегистрирован: 02.02.2009 14:58:42

Re: Цвет выделенной строки фиксированной колонки RxDbGrid

Сообщение GAMER » 16.09.2009 11:49:35

..Grid1DrawCell не помогает?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Цвет выделенной строки фиксированной колонки RxDbGrid

Сообщение alexmai » 16.09.2009 16:58:47

нет, слишком не правильно понимается понятие фиксированная ячейка, просто тупо как маркер строки или поле дял нумерации, а я понимаю это как
неподвижные при скролинге ячейки.
Пэтому все это я реализовал сам через TStrinGrid, THeaderControl , но пришлось рихтовать исходники
headercontrol.inc
comctrl.pp и
grid.pas
Мне кажется, что не плохо было наследовать класс TRxDbGrid и от класса TStringrid.
alexmai
постоялец
 
Сообщения: 106
Зарегистрирован: 02.02.2009 14:58:42

Re: Цвет выделенной строки фиксированной колонки RxDbGrid

Сообщение alexs » 16.09.2009 23:13:44

он и так от него наследуется - только от CustomGrid-а
а то что не доступна колонка маркера - это перекрыто в DBGrid-е.
Вопрос - зачем она тебе нужна? если обоснуеш и убедиш меня - то подумаем.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Цвет выделенной строки фиксированной колонки RxDbGrid

Сообщение alexmai » 17.09.2009 14:05:04

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 в разные цвета
вот бы еще конкретную строку строку фиксированной колонки подкрашивать по номеру строки ?
Нет времени копаться, было бы неплохо, хотя многострочные заголовки работают криво если менять их ширину, тупо увеличивается высота
самого нижнего слоя заголовка, хотя длинная строка может быть у самого вехнего слоя заголовка
alexmai
постоялец
 
Сообщения: 106
Зарегистрирован: 02.02.2009 14:58:42


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31

Рейтинг@Mail.ru