Форум: "Начинающим";
Текущий архив: 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.006 c