Главная страница
    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.035 c
1-1100069328
46_55_41_44
2004-11-10 09:48
2004.11.21
Как открыть окно Outlook?


1-1099571140
Mars
2004-11-04 15:25
2004.11.21
Как узнать предыдущий фокус


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


1-1099979166
nobse
2004-11-09 08:46
2004.11.21
Очищение StringGrid


14-1099854463
Ospa
2004-11-07 22:07
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский