Главная страница
    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.038 c
3-1098641955
Robin Hood
2004-10-24 22:19
2004.11.21
Обновление базы данных с помощью UpdateSQL


14-1099342994
Мирон
2004-11-02 00:03
2004.11.21
Есть вакансия жены...


1-1100155794
novice_man
2004-11-11 09:49
2004.11.21
Динамические переменные и утечки памяти.


1-1099552404
Владимир
2004-11-04 10:13
2004.11.21
OLE Contener


1-1099408347
Agent[007]
2004-11-02 18:12
2004.11.21
Всем hi. Как задать property у класса и можно ли его задать у r





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