Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.009 c
2-1197110022
b86
2007-12-08 13:33
2008.01.06
массив


2-1197112580
Петр
2007-12-08 14:16
2008.01.06
семитировать ввод в поле с клавиатуры


6-1177413145
DVM
2007-04-24 15:12
2008.01.06
Почему начинает подтормаживать сервер.


2-1197368334
Alexandr Malygin
2007-12-11 13:18
2008.01.06
округление


8-1170839529
ZMRaven
2007-02-07 12:12
2008.01.06
dspack





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