Форум: "Основная";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
ВнизХм... 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.035 c