Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Вниз

TStringGrid:   Найти похожие ветки 

 
^Sanya   (2002-09-05 14:39) [0]

как избежать генерации события OnDrawCell при изменении свойства Cell[x,x] ?
Задача: менять цвет ячейки посредством FillRect.
FillRect хакрашивает всё вместе с надписью...
Ей нужно восстановить, но т.к. FillRect идёт в OnDrawCell, возникает бесконечный цикл...


 
MBo   (2002-09-05 14:42) [1]

где-то ошибка. код OnDrawCell покажи


 
pasha_golub   (2002-09-05 14:43) [2]

Используй ФиллРект не в обработчике события!


 
Shaman_Naydak   (2002-09-05 15:35) [3]

Или сам восстанавливай надпись
Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);


 
Song   (2002-09-05 16:23) [4]

FillRect() не может вызвать бесконечного цикла. Какого TCanvas FillRect() Вы вызываете?


 
^Sanya   (2002-09-05 16:58) [5]

2All:
Во-первых, кто опровергнет тот факт, что
StringGrid1.Cells[1,1] := "test" вызывает
OnDrawCell для ячейки [1,1] ?

Вывод №1:
Так вот, из этого следует, что писать подобные вещи в обработчике события OnDrawCell не следует из-за возникновения бесконечной рекурсии.

Вывод №2:
Писать что-то типа:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
StringGrid1.Canvas.Brush.Color := cllime;
StringGrid1.Canvas.FillRect(rect);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
StringGrid1.Cells[1,1] := "gffdfdfd"
end;


также не имеет смысла, т.к. после нажатия на BitBtn и изменения св-ва Cells произойдёт перерисовка, т.е. OnDrawCell, и текст закрасится, т.е. исчезнет.

Вывод №3:
как правильно заметил Shaman_Naydak © (05.09.02 15:35)
один из возможных вариантов - это TextOut, но оправдан ли этот вариант??? Возможно есть что-то менее грузящее машину, вроде того, чтобы метод закраски не трогал текст...
[честно говоря, сам сомневаюсь...]

Но цель-то состоит в том, чтобы в первую очередь менять цвет не фона, а бордеров, т.е. разделителей ячеек посредством:

StringGrid1.Canvas.Brush.Color := цвет фона;
StringGrid1.Canvas.Pen.Color := цвет бордера;
StringGrid1.Canvas.Rectangle(Rect.Left-1, Rect.Top-1, Rect.Right+1, Rect.Bottom+1);

В итоге для изменения цвета разделителя приходится дёргать все записи и фоны...

А FillRect я написал для простоты...

Корректирую вопрос:
Можно ли "меньшей кровью" менять цвет разделителя (border"а)?
P.S.: указанное выше несомненно работает, но я был бы рад увидеть менее ресурсоёмкий метод...

Заранее благодарен...


 
Юрий Зотов   (2002-09-06 00:57) [6]

> Можно ли "меньшей кровью" менять цвет разделителя (border"а)?

1. F1. FrameRect. Polyline.

2. Написав свой TextOut, Вы не увеличиваете загрузку машины. Просто внутренний TextOut заменяется Вашим.




 
Aleks1   (2002-09-06 03:05) [7]

Не подвергая сомнению ответ Юрий Зотов © (06.09.02 00:57),
предложу лишь автору вопроса понять когда и для чего вызывается событие OnDraw"Something".


 
^Sanya   (2002-09-06 11:28) [8]


> Юрий Зотов © (06.09.02 00:57)


Благодарю за ответ.


> Aleks1 (06.09.02 03:05)

???
Когда необходима перерисовка, когда ж ещё?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
14-50947
Oleg_Gashev
2002-08-20 20:42
2002.09.16
Online/Offline- enum/class/..?


3-50626
Ник
2002-08-26 17:38
2002.09.16
ftGraphic


1-50830
V
2002-09-04 10:35
2002.09.16
Клипарт


1-50682
id_privin
2002-09-04 12:43
2002.09.16
Почему падает деструктор


1-50839
Filat
2002-09-04 11:39
2002.09.16
Как сделать вывод панели с ProgressBar.





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