Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: CL | DM;

Вниз

Хм... OnDrawCell работает не так, как задумано.   Найти похожие ветки 

 
Cosinus ©   (2004-11-03 15:14) [0]


if (gdSelected in State) and (ACol<>16) then
   begin
     Brush.Color:=clSilver;
     FillRect(Rect);
     FillRect(CellRect(ACol+17,ARow));
     Font.Color:=clBlack;
     TextOut(Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);
     TextOut((CellRect(ACol+17,ARow)).Left + 2, (CellRect(ACol+17,ARow)).Top + 2, Cells[ACol+17, ARow]);
   end else ...

Собственно мысль, почему не работает только одна. Потому что при FillRect(CellRect(ACol+17,ARow)) снова вызывается OnDrawCell и так как для этой ячейки not (gdSelected in State), то он и не прорисовывается. Ясно, что необходимо еще одно условие. Была идея предварительно насильно установить gdSelected для нужной ячейки, но как это сделать я так и не нашел (вообще, возникло сильное подозрение, что этого никак не добиться). Так вот вопрос, можно ли установить/снять gdSelected для определенной ячейки и если нет, то как можно добиться необходимого результата (кроме матрицы)?


 
antonn ©   (2004-11-03 15:43) [1]

Я че то не разберу: зачем FillRect(CellRect(ACol+17,ARow)); Там же выше есть? Что она делает?


 
Семен Сорокин ©   (2004-11-03 15:45) [2]

хоть что за компонента (судя по написанному - StringGrid), а что если ACol = ColCount-1, что вернет Cells[ACol+17, ARow]??
Ладно отвлекся, а что мешает вызвать явно OnDrawCell, с необходимыми параметрами (ACol+17) еще раз?


 
Cosinus ©   (2004-11-03 16:12) [3]


> antonn ©   (03.11.04 15:43) [1]


> Семен Сорокин ©   (03.11.04 15:45) [2]

Мне необходимо, чтобы помимо тех ячеек, по которым "проехалась" (gdSelected) мышь, выделились еще некоторые, смещенные вправо на delta=17.


 
Defunct ©   (2004-11-03 16:17) [4]

FillRect(Rect);
TextOut(Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);

заменяется на:
TextRect( Rect, 2, 2, Cells[ACol, ARow] );


-> ACol+17
так лучше не делать.
не забывайте, что DrawCell вызывает для прорисовки каждой ячейки, соответственно надо сделать проверку для каждой ячейки, которая рисуется отдельным цветом.


 
Cosinus ©   (2004-11-03 16:44) [5]


> Defunct ©   (03.11.04 16:17) [4]
> FillRect(Rect);
> TextOut(Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);
>
> заменяется на:
> TextRect( Rect, 2, 2, Cells[ACol, ARow] );

Спасибо.
> -> ACol+17
> так лучше не делать.
> не забывайте, что DrawCell вызывает для прорисовки каждой
> ячейки, соответственно надо сделать проверку для каждой
> ячейки, которая рисуется отдельным цветом.

Так в том то и проблемма, что похоже я в алгоритм уперся. Попробую объяснить поподробнее, что мне необходимо.
Допустим, у меня есть таблица с N*2+1 количеством столбцов. В "левой" половине (с 0 до N-1) находятся одни данные, в "правой" половине (с N+1 до N*2+1) другие. {*N-пустой столбец для визуального разделения*}. Так вот, если я в "левой" части выдяляю ячейки, допустим, с 0 до N-m, то в "правой" должны также выделиться ячейки c N+1 до N*2-1-m. Не знаю, как этого добиться.


 
Rem ©   (2004-11-03 18:25) [6]

Cosinus ©   (03.11.04 16:44) [5]

Не нарушайте причинно-следственных связей. Не надо столь явно прорисовывать "правые" ячейки. Вам надо лишь определять при рисовании "правых" ячеек, является ли выделенной соответствующая "левая" ячейка, и рисовать соответственно. См. свойство TCustomGrid.Selection. А еще разберитесь, по каким событиям происходит прорисовка Grid"а.

P.S. Присмотритесь к методам TCustomGrid: InvalidateCell(); InvalidateCol(); procedure InvalidateRow(); InvalidateRect();

P.P.S. TCustomGrid должна сама инициализировать прорисовку ячейки; и рисование ячейки должно быть только в методе OnDrawCell; и нигде иначе; и рисовать в этом методу нужно только переданную в качестве параметра ячейку; никакую иначе.



Страницы: 1 вся ветка

Текущий архив: 2004.11.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
1-1099472659
Rule
2004-11-03 12:04
2004.11.21
Ну вот такой вопроски про QuantumGrid4


3-1098696836
Карелин Артем
2004-10-25 13:33
2004.11.21
Нужен сложный "григ", в котором можно показать связанные таблицы.


14-1099394951
AlexG
2004-11-02 14:29
2004.11.21
Откопал топор войны и разжег огонь сопротивления


14-1099210504
Lenor
2004-10-31 11:15
2004.11.21
EAC: глюки или ?..


1-1099513719
Adnrey
2004-11-03 23:28
2004.11.21
Какой компонент нужно использовать?