Главная страница
    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.007 c
1-50862
zzet
2002-09-04 17:36
2002.09.16
Как обработать восстановление из трея?


1-50856
Shil
2002-09-04 16:35
2002.09.16
TServise OnStart, не хочет открывать файл?


6-50890
ReYka
2002-07-08 15:33
2002.09.16
Список машин в сети без тормозов приложения?


1-50757
jen_bond
2002-09-06 07:18
2002.09.16
Выбор ячейки в DBGrid


3-50621
SZap
2002-08-23 11:16
2002.09.16
Вопрос по TQuery





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