Главная страница
    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.048 c
1-1099490129
Oleg_
2004-11-03 16:55
2004.11.21
ТЕКСТ НА РИСУНКЕ РЕЖЕТСЯ


1-1099423937
Hyboid
2004-11-02 22:32
2004.11.21
Рамка


14-1099549296
ИМХО
2004-11-04 09:21
2004.11.21
Болеро.РУ лежит трупиком


4-1097157794
Arnold
2004-10-07 18:03
2004.11.21
Вопрос по ловушке WH_KEYBOARD


3-1098518072
TALLA
2004-10-23 11:54
2004.11.21
связь с MySQL: почему ZeosLib работает, а через механизм ADO -нет





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