|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.11.2010, 17:00 | #1 |
Форумчанин
Регистрация: 06.10.2009
Сообщений: 121
|
Закрасить ячейки в строках StringGrid в потоках
Здравствуйте еще раз.
Мучаюсь таки вопросом, нужно в StringGrid закрашивать ячейки в потоках, в каждом потоке в отдельной строке, то есть, первый поток должен закрашивать ячейки первой строки, с определёнными индексами, как ему нужно, в своей DrawCell, второй поток - второй строки в своей DrawCell и как ему нужно т.д.
Ищущий да обрящет
|
15.11.2010, 17:19 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
ИМХО ничего не выйдет.
За закраску ячеек отвечает канва грида, а срабатывать они будет только при перерисовке, плюс к тому закраску нужно по хорошему проводить в обработчике OnDrawCell того же Грида, так что потоки тут только мешать будут. Или это бзик преподавателя?
I'm learning to live...
|
15.11.2010, 17:29 | #3 |
Форумчанин
Регистрация: 06.10.2009
Сообщений: 121
|
Нет, просто хотел сделать визуальное сравнение четырёх алгоритмов поиска, то есть, как бы искали алгоритмы в массиве элемент, так бы и выделялись бы ячейки, например, линейный алгоритм выделял бы последовательно каждую ячейку, пока не найдётся ячейка, с искомым элементом, которая выделится последней. И, это с задержкой, чтобы было видно всё.
Может попробовать выделять не ячейку а менять цвет шрифта у элемента?
Ищущий да обрящет
|
15.11.2010, 17:35 | #4 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Можно сделать. Обрабатывай OnDrawCell. В нем раскрашивай как нужно, в зависимости от условий. Когда нужно обновить, вызывай Repaint таблицы. А из потоков управляй переменными глобальными например, для каждого потока свою. Эти переменные и будут условиями раскраски. Главное потоки правильно разрули, синхронизируй, или критические секции организуй если надо.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
15.11.2010, 17:36 | #5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Запутаешся быстро...
Единственное что могу посоветовать, так это решение поиска в потоке, а из него вызывай перерисовку грида. В перерисовке анализирую условие закраски. Но не закрашивай ничего из потока, просто вызови всю перерисовку грида, и опиши OnDrawCell
I'm learning to live...
|
15.11.2010, 17:45 | #6 |
Форумчанин
Регистрация: 06.10.2009
Сообщений: 121
|
У меня решение поиска в потоке, а процедуру перерисовки в классе потока объявлять или нет?
например так? Код:
Прекращайте ненужное цитирование предыдущих сообщений! Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе... А кроме кнопки "Цитата" внизу есть простое окно для ввода своего сообщения. Или маленькая кнопочка "Быстрый ответ" справа от кнопки "Цитата". Попадаете туда же. Модератор
Ищущий да обрящет
Последний раз редактировалось mihali4; 15.11.2010 в 18:18. |
15.11.2010, 17:52 | #7 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Вызывай ее когда какой-либо из потоков сделал что-то, что необходимо показать. Вызывается она так: Grid.Repaint; Следи только, чтобы одновременно потоки к одной и той же сущности не обращались. Это можно критическими секциями организовать.
А грид сам будет знать как ему отрисовываться, т.к. ты ему это укажешь в обработчике.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
15.11.2010, 18:00 | #8 |
Форумчанин
Регистрация: 06.10.2009
Сообщений: 121
|
Спасибо, Мутабор, попробую и, Stilet, тебе тоже спасибо.
Ищущий да обрящет
|
16.11.2010, 14:52 | #9 |
Форумчанин
Регистрация: 06.10.2009
Сообщений: 121
|
Процедура OnDrawCell запускается сразу по открытии формы, а мне нужно перед её запуском поработать с формой, а потом нужно вызвать эту процедуру по нажатии кнопки, или я что-то не то говорю? В Delphi я недавно помогите пожалуйста новичку.
Ищущий да обрящет
|
17.11.2010, 10:27 | #10 |
Форумчанин
Регистрация: 06.10.2009
Сообщений: 121
|
Никак не могу разобраться с OnDrawCell, в потоках у меня вычисляется какую ячейку нужно закрасить, потоки запускаются по нажатии на кнопку "поиск", перед тем как нажать на кнопку "поиск" я должен ввести в одно поле эдит размер массива, нажать на кнопку "Вывод случайного массива", после нажатия на эту кнопку четыре строки StringGrid заполняются числами, в каждой строке один и тот же массив, затем нужно ввести во второе поле эдит элемент, который нужно найти, и нажать на кнопку поиск. После нажатия на кнопку поиск запускаются потоки, каждый из которых по своему алгоритму поиска дает номер ячейки, которую нужно закрасить в OnDrawCell, первый поток вычисляет номер ячейи в первой строке, второй во второй строке и т.д. Я попробовал сделать это с одним потоком, хотя бы, но при открытии формы сразу запускается OnDrawCell, и не даёт ничего сделать.
Вот частичный код бреда, который я написал. Процедура потока, процедура OnDrawCell и процедура кнопки "поиск". Код:
Ищущий да обрящет
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Координаты ячейки в StringGrid??? | aslanbek | Общие вопросы Delphi | 13 | 01.08.2014 16:53 |
ячейки в StringGrid | Desha | Компоненты Delphi | 3 | 06.09.2010 20:32 |
Вопрос по выделению ячейки в stringgrid | robin39 | Помощь студентам | 8 | 08.07.2010 10:18 |
Ячейки в StringGrid | ImmortalAlexSan | Общие вопросы Delphi | 2 | 17.05.2010 17:41 |
Выделение ячейки цветом - StringGrid. | Chudo4258 | Помощь студентам | 1 | 01.04.2009 07:03 |