Форум: "Начинающим";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];
ВнизМожно ли разукрашивать StringGrid в событии отличном от DrawCell? Найти похожие ветки
← →
Zheksik © (2007-12-07 11:18) [0]Здравствуйте. Проблема в том, что после обработки и получения табличных результатов нужно выделить максимальный элемент в каждом столбце. Я знаю как выделяется ячейка с помощью события DrawCell, но оно мне не подходит, т.к. оно происходит в момент прорисовки таблицы, а мне нужно, чтобы после полного построения таблицы.
← →
{RASkov} © (2007-12-07 11:36) [1]> [0] Zheksik © (07.12.07 11:18)
Не верно мыслишь....
Рисовать грид нужно именно в OnDrawCell, а вот перерисовать его весь можно вызовом Invalidate....
← →
Сергей М. © (2007-12-07 11:37) [2]
> оно мне не подходит
Оч даже подходит.
После построения таблицы создаешь ц/ч массив размером, равным числу столбцов. В цикле по всем столбцам для каждого столбца определяешь номер строки максимального эл-та в этом сторбце, полученный номер записываешь в соотв. элемент массива.
Теперь в обработчике OnDrawCell параметр ACol рассматриваешь как индекс эл-та массива, берешь из него хранимый в нем номер строки, сравниваешь с ARow, если равны, то выделяешь.
← →
Zheksik © (2007-12-07 11:43) [3]{RASkov}
это уже что-то... спасибо. буду пробовать...
to Сергей М. © (07.12.07 11:37) [2]
как вариант... спасибо.
← →
Zheksik © (2007-12-07 13:00) [4]бррррр, запутался...
Сергей М. ©
создал массив по вашему совету, где индекс элемента соответствует колонке, а значение ряду, но как в OnDrawCell правильно использовать этот массив??? Ведь for здесь нельзя использовать(((
← →
@!!ex © (2007-12-07 13:03) [5]> [4] Zheksik © (07.12.07 13:00)
Зачем for???
StringGrid сам переберет все элементы.
ACol и ARow дают тебе индексы нужно элемента массива!
← →
Сергей М. © (2007-12-07 13:04) [6]
> for здесь нельзя использовать
А нафига он там нужен ?
if MyArray(ACol) = ARow then .. выделяем ...
← →
Zheksik © (2007-12-07 13:20) [7]хм... вот и не верь после этого в чудеса...
private
MaxArray: array[1..16] of Integer;
procedure TForm1.AdvStringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if MaxArray(ACol) = ARow then AdvStringGrid1.Canvas.Brush.color := clRed;
end;
на ACol выдаёт - Missing operator or semicolon
← →
Сергей М. © (2007-12-07 13:23) [8]Чудес не бывает - где-то в областях видимости, доступных этому методу, идентификатор "MaxArray" уже определен и определен иным образом.
← →
Zheksik © (2007-12-07 13:30) [9]что значит, "где-то в областях видимости"???
единственное место где используется этот массив - это процедура где он наполняется значениями... Процедура простая... просто перебор всех значений таблицы и наполнение массива. Объявлен массив в привате.
Где "копать"?
← →
{RASkov} © (2007-12-07 13:34) [10]> [7] Zheksik © (07.12.07 13:20)
> MaxArray(ACol)
Скобки не массивные :) надо []
← →
Сергей М. © (2007-12-07 13:37) [11]
> место где используется
Разве я сказал "используется" ?
Я сказал определен (декларирован или объявлен, если угодно).
← →
Zheksik © (2007-12-07 13:38) [12]{RASkov} © (07.12.07 13:34) [10]
;D
Сергей М. © (07.12.07 13:23) [8]
и правда не бывает... что не лишний раз подтвердила моя ошибка.
спасибо.
← →
Сергей М. © (2007-12-07 13:38) [13]
> {RASkov}
Точно)
Автор содрал один в один пример в псевдокоде и сидит ждет чудес)
← →
Zheksik © (2007-12-07 13:48) [14]Сергей М. © (07.12.07 13:38) [13]
смешно.
{RASkov} © (07.12.07 11:36) [1]
точно invalidate??? эффекта нет.
← →
{RASkov} © (2007-12-07 13:50) [15]> [13] Сергей М. © (07.12.07 13:38)
> содрал один в один пример
[6]
:)
Бывает)
← →
Palladin © (2007-12-07 13:50) [16]
> Zheksik © (07.12.07 13:48) [14]
это грустно, а не смешно
← →
{RASkov} © (2007-12-07 13:50) [17]> [14] Zheksik © (07.12.07 13:48)
> точно invalidate??? эффекта нет.
Что значит нет????
← →
Сергей М. © (2007-12-07 13:59) [18]
> Zheksik © (07.12.07 13:48) [14]
> смешно.
Да, было бы, если бы не было так как в [14]
← →
Zheksik © (2007-12-07 14:09) [19]Сергей М. © (07.12.07 13:59) [18]
я ошибся, я это признал, что ещё то нужно??? кстати, про псевдокод ты чётко придумал ;)
там можно было и псевдофигурные скобки поставить...
← →
Сергей М. © (2007-12-07 14:15) [20]
> там можно было и псевдофигурные скобки поставить...
>
А то !)
Но вот ведь беда - не дотумкал я туда их поставить)
Да ты не расстраивайся - и на старуху бывает проруха, и на новичка справка)
← →
Zheksik © (2007-12-07 14:18) [21]Я и не расстраиваюсь, не я же делая подсказки делаю ошибки и потом начинаю глумиться над тем кто повторил твою ошибку.
← →
Сергей М. © (2007-12-07 14:20) [22]
> Zheksik © (07.12.07 14:18) [21]
Так.
Дуй уже учить Паскаль, обидчивый ты наш.
← →
{RASkov} © (2007-12-07 14:24) [23]> [21] Zheksik © (07.12.07 14:18)
У тебя уже все получилось? разобрался?
Чего дуешься.... Никто тебя здесь не обижает)
← →
Zheksik © (2007-12-07 14:34) [24]{RASkov} © (07.12.07 14:24) [23]
)))
я не дуюсь и не обижаюсь...
я с самого начала признал СВОЮ ошибку, а некоторые до сих пор не знают как оправдаться за неправильный совет с детской ошибкой, которую даже начинающий не совершает.
← →
Плохиш © (2007-12-07 14:34) [25]Что-то я не заметил в [7] отрисовки...
← →
Сергей М. © (2007-12-07 14:41) [26]
> Zheksik © (07.12.07 14:34) [24]
> некоторые до сих пор не знают как оправдаться за неправильный
> совет
Поплачься-поплачься)
Авось полегчает)
А врать хныкать и врать про "неправильный совет" уже не надо - тебе, несмотря на твое категоричное "оно мне не подходит", неоднократно и вразумительно сказано, что именно оно тебе и подходит.
← →
Zheksik © (2007-12-07 14:41) [27]{RASkov} © (07.12.07 14:24) [23]
по порядку:
1) построил таблицу
2) создал массив с максимальными значениями в столбцах.
3) т.к. наполнил таблицу открываю ключ для того, чтобы в DrawCell воспользоваться командойif MaxArray(ACol) = ARow then AdvStringGrid1.Canvas.Brush.color := clRed;
4) AdvStringGrid1.Invalidate;
5) В результате ничего не происходит(((
← →
Сергей М. © (2007-12-07 14:41) [28]
> Плохиш © (07.12.07 14:34) [25]
>
> Что-то я не заметил в [7] отрисовки...
>
А это будет отдельная история с отдельными обидами)
← →
Zheksik © (2007-12-07 14:42) [29]Сергей М. © (07.12.07 14:41) [26]
)))
← →
Плохиш © (2007-12-07 14:47) [30]
> 5) В результате ничего не происходит(((
А что должно происходить?
← →
{RASkov} © (2007-12-07 14:51) [31]> [27] Zheksik © (07.12.07 14:41)
Вот ты кисточку мокнул в краску, а дальше хочешь что б забор автоматом стал тем же цветом...
← →
{RASkov} © (2007-12-07 14:52) [32]> [27] Zheksik © (07.12.07 14:41)
и 4 пункт случаем не DrawCell??? :)
← →
Zheksik © (2007-12-07 14:53) [33]Плохиш © (07.12.07 14:47) [30]
упс...
if MArray[ACol] = ARow then
begin
AdvStringGrid1.Canvas.Brush.Color := clRed;
AdvStringGrid1.Canvas.FillRect(Rect);
AdvStringGrid1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, AdvStringGrid1.Cells[ACol, ARow]);
end;
по идее должны закрашиваться ечейки соответствующие индексам массива и их значениям.
← →
{RASkov} © (2007-12-07 14:53) [34]> не DrawCell
> 4) AdvStringGrid1.Invalidate;
Вот это случайно у тебя не в OnDrawCell?? )
← →
Zheksik © (2007-12-07 14:57) [35]{RASkov} © (07.12.07 14:53) [34]
нет конечно
Это сразу после окончания процедуры, которая наполняет массив
← →
{RASkov} © (2007-12-07 14:58) [36]> [33] Zheksik © (07.12.07 14:53)
> AdvStringGrid1.Canvas.Brush.Color := clRed;
> AdvStringGrid1.Canvas.FillRect(Rect);
> AdvStringGrid1.Canvas.TextRect(Rect, Rect.Left, Rect.Top,
> AdvStringGrid1.Cells[ACol, ARow]);
Здесь практически верно, а вот здесь:
> if MArray[ACol] = ARow then
Проверять нужно....
Почему - практически?
потому как не красиво делать
> AdvStringGrid1.Canvas
У метода есть Сендер, вот его и нужно использовать. Это не требование, но так правильнее....
Так можно использовать один обработчик на всех и "не страшно" переименование грида....
> [35] Zheksik © (07.12.07 14:57)
:) я рад за тебя)
← →
Zheksik © (2007-12-07 15:06) [37]
> :) я рад за тебя)
я конечно туповат, но не до такой степени ;)
а вообще, в моём сучае тупость сродни невнимательности.
в общем вопрос разрешился... как всегда моя невнимательность... ключ не перевёл в нужное положение.
спасибо. такому терпению в пятницу можно только позавидовать ;)
← →
Германн © (2007-12-07 21:43) [38]
> {RASkov} © (07.12.07 14:53) [34]
>
> > не DrawCell
>
>
> > 4) AdvStringGrid1.Invalidate;
>
> Вот это случайно у тебя не в OnDrawCell?? )
>
Если бы он так сделал, то давно бы встал на уши от бр.
← →
{RASkov} © (2007-12-07 21:49) [39]> [38] Германн © (07.12.07 21:43)
> встал на уши от бр.
А что такое "бр." ? )
← →
Германн © (2007-12-07 21:54) [40]
> А что такое "бр." ? )
>
Догадайся с трех раз :)
Или сам попробуй вызвать Invalidate в OnDrawCell.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.004 c