Главная страница
    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.


 
{RASkov} ©   (2007-12-07 22:01) [41]

> [40] Германн ©   (07.12.07 21:54)
> Или сам попробуй вызвать Invalidate в OnDrawCell.

Легко:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
 StringGrid1.Canvas.Brush.Color:=clRed;
 StringGrid1.Canvas.TextRect(Rect,Rect.Left, Rect.Top, "бр.бр.бр.бр.");
 StringGrid1.Invalidate;
end;

:)
У меня это "бр." выглядит как мелькающие полоски по всему гриду)
но грид читаем и как указано - красный.....
Ладно.... я в шутку спросил впрочем как и этот пост....
:о)


 
Германн ©   (2007-12-07 22:05) [42]


> У меня это "бр." выглядит как мелькающие полоски по всему
> гриду)
> но грид читаем и как указано - красный.....
>

А ты добавь кроме грида еще что-нибудь. Кнопочки например. Тогда и увидишь последствия бесконечной рекурсии :)


 
{RASkov} ©   (2007-12-07 22:18) [43]

> [42] Германн ©   (07.12.07 22:05)

Ага.... понял что есть бр :)
Но у меня и в этом случае все тип-топ :)
Во:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
 StringGrid1.Canvas.Brush.Color:=clRed;
 StringGrid1.Canvas.TextRect(Rect,Rect.Left, Rect.Top, "бр.бр.бр.бр.");
 StringGrid1.Invalidate;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage("бр");
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
 Label1.Caption:=Edit1.Text;
end;

end.

Кнопочки тыкаются, сообщения показываются, текст метки меняется..... а в это время по гриду полоски бегаютЪ
Анамалия :)


 
Германн ©   (2007-12-08 02:18) [44]


> {RASkov} ©   (07.12.07 22:18) [43]
>
> > [42] Германн ©   (07.12.07 22:05)
>
> Ага.... понял что есть бр :)
> Но у меня и в этом случае все тип-топ :)


 
Германн ©   (2007-12-08 02:21) [45]


> Германн ©   (08.12.07 02:18) [44]
>
>
> > {RASkov} ©   (07.12.07 22:18) [43]
> >
> > > [42] Германн ©   (07.12.07 22:05)
> >
> > Ага.... понял что есть бр :)
> > Но у меня и в этом случае все тип-топ :)
>

Тогда попробуй сначала кинуть на форму кнопочки и другие компоненты, а потом StringGrid.


 
{RASkov} ©   (2007-12-08 11:49) [46]

> [45] Германн ©   (08.12.07 02:21)

:(
:)
Пострадал из набора (Грид, метка, кнопка, эдит) только эдит, остальные после первой полной перерисовки(свернуть-развернуть окно) нормолизовались
Ну все, Сергей, нужно завязывать с этими экспериментами......)

Одно скажу.... для автора вопроса и не только - Ни в коем случае не вызывайте Invalidate в OnDrawCell грида
это ужасно (
:о)


 
Германн ©   (2007-12-08 13:51) [47]


> Ну все, Сергей, нужно завязывать с этими экспериментами.
> .....)

Да я уже давно завязал :)


 
{RASkov} ©   (2007-12-08 14:04) [48]

> [47] Германн ©   (08.12.07 13:51)
> Да я уже давно завязал :)

А меня подталкивал на них.... не чесно :)


 
Германн ©   (2007-12-08 14:57) [49]


> А меня подталкивал на них.... не чесно :)

Ты сам напросился {RASkov} ©   (07.12.07 14:53) [34]
:)


 
{RASkov} ©   (2007-12-08 15:24) [50]

> [49] Германн ©   (08.12.07 14:57)
>
> > А меня подталкивал на них.... не чесно :)
>
> Ты сам напросился {RASkov} ©   (07.12.07 14:53) [34]
> :)

Я никуда не напрашивался :( Я просто поинтересовался у автора - не сделал-ли он глупость
:)



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.019 c
15-1196606871
Lip
2007-12-02 17:47
2008.01.06
ACM турниры и реальные задачи! Какая связь?


2-1197056115
AntiPupkin
2007-12-07 22:35
2008.01.06
Перечислить ID потоков в открытом процессе


15-1196426548
Автор
2007-11-30 15:42
2008.01.06
О разделе "Статьи"


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


2-1197020595
Slym
2007-12-07 12:43
2008.01.06
Best practice в создании свойств-списков объектов в COM в многопо





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