Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.06;
Скачать: CL | DM;

Вниз

Можно ли разукрашивать 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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.017 c
2-1197183138
s00r
2007-12-09 09:52
2008.01.06
Глобальные переменные в DLL


6-1177412912
Novic
2007-04-24 15:08
2008.01.06
Передача файла по сети


2-1197210457
San1712
2007-12-09 17:27
2008.01.06
Как копировать содежимое переменной типа Pointer -->String ?


15-1195988431
Kolan
2007-11-25 14:00
2008.01.06
А я че хуже Kerk а? А мне присоветуйте монитор :)


15-1196462298
Kostafey
2007-12-01 01:38
2008.01.06
С днем рождения ! 1 декабря