Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.036 c
3-1098886360
Александр С
2004-10-27 18:12
2004.11.21
Параметрический запрос


14-1099309827
ИМХО
2004-11-01 14:50
2004.11.21
Слово о Брюсе Ли


8-1093546062
Kind
2004-08-26 22:47
2004.11.21
Скорость InvalidateRect


1-1100076951
LEXX_55
2004-11-10 11:55
2004.11.21
Нужна помощь! Файл сохраняется не там где надо!


8-1093192962
iudjen
2004-08-22 20:42
2004.11.21
как сделать пианино





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский