Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Вниз
StringGrid событие DrawCell Найти похожие ветки
← →
Elen © (2006-11-17 11:15) [80]
> ЛЮДИ Давайте я скину кому нибудь на мыло скриншот с объяснение
> что мне нужно. Может он более понятней сформирует вопрос
> чем я.
Только не мне!!! Я точно не пойму скрин - я уже ничего не понимаю... Привет Кондратик!
← →
Плохиш © (2006-11-17 11:15) [81]
> Elen © (17.11.06 11:13) [77]
>
> > Плохиш
>
> Описка !!!
Ну вот :-( а как хорошо начиналось ;-)
← →
Elen © (2006-11-17 11:17) [82]
> Я так и сделал
Ну так сопоставляеш индент в таге с цветом папочки и получаеш нужную связку
← →
alex810 © (2006-11-17 11:17) [83]
> Ты хоть раз приведёшь код этого злосчастного OnDrawCell,
> который до закрытия программы все красит как надо, а после,
> изверг, никак не хочет?
procedure TForm3.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (state = [gdSelected]) then
with TStringGrid(Sender), Canvas do
begin
Brush.Color := SelectedColor;
TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);
FillRect(Rect);
end;
end;
← →
Elen © (2006-11-17 11:18) [84]
> а как хорошо начиналось
Главное хорошо кончить (т.е. закончить)... ХМ прикольная ветка - не дает мне в преферанс доиграть
← →
ASoft (2006-11-17 11:18) [85]>alex810
...хоть кусочек кода, где у тебя красится все или не красится.
кстати, а OnDrawCell у тебя присутствует в Гридах? Так... риторически спрашиваю
← →
ЮЮ © (2006-11-17 11:19) [86]
> alex810 © (17.11.06 11:17) [83]
Ну и где здесь разноцветный грид, если используется только один цвет SelectedColor?
← →
alex810 © (2006-11-17 11:19) [87]Задам вопрос еще раз. Что мне ставить после скобок при вызове процедуры
StringGrid2DrawCell(????????????????)
StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
← →
ASoft (2006-11-17 11:19) [88]о, присутствует... ну что ж за связь такая :(
← →
Elen © (2006-11-17 11:20) [89]
> alex810
ИМХО тут проблема не в реализации а в постановке задачи и способе решения. Продумай, Автор, еще раз что и как хочеш получить в мелочах.
← →
Плохиш © (2006-11-17 11:21) [90]
> alex810 © (17.11.06 11:19) [87]
> Задам вопрос еще раз. Что мне ставить после скобок при вызове
> процедуры
>
> StringGrid2DrawCell(????????????????)
Я тебе по секрету скажу. Можешь поставить что угодно, хоть свои паспортные данные, результат от этого не изменится.
← →
alex810 © (2006-11-17 11:22) [91]
> Ну и где здесь разноцветный грид, если используется только
> один цвет SelectedColor?
SelectedColor - перемення которая берет цвет с массива Colors[Tag] [Tag] - идентификатор цвета который берется с Edit.Tag
procedure TForm3.Edit1Click(Sender: TObject);
begin
with TEdit(Sender) do
begin
SelectedColor:=Colors[Tag];
end;
end;
← →
ASoft (2006-11-17 11:22) [92]
> alex810 © (17.11.06 11:19) [87]
>
> Задам вопрос еще раз. Что мне ставить после скобок при вызове
> процедуры
а такой вопрос был что ли?.. просмотрел я однако...
← →
ЮЮ © (2006-11-17 11:23) [93]
> Задам вопрос еще раз. Что мне ставить после скобок при вызове
> процедуры
Отвечу еще раз. Этот метод не вызываю в рукописном коде. Это - самый настоящий обработчик события. Всякий раз, когда грид должен нарисовать ячейку он вызывает этот метод. И именно в этом методе ты и должен разукрасить эту ячейку так как надо.
StringGrid.Inavalidate - перерисуются все видимые ячкйки грида
← →
alex810 © (2006-11-17 11:25) [94]
> Я тебе по секрету скажу. Можешь поставить что угодно, хоть
> свои паспортные данные, результат от этого не изменится.
>
Спосибо за дельный совет я ставил
StringGrid2DrawCell( StringGrid2, X, Y, (тут я не знаю что ставить), gdFixed);
← →
ЮЮ © (2006-11-17 11:27) [95]Обраьотчик OnDrawCell вызывается <количкство видимых строк> * <количкство видимых столбцов раз> и SelectedColor при этих вызовах один и тот же
← →
Elen © (2006-11-17 11:27) [96]
> Помогите пожалуйста как мне можно вызвать процедуру DrawCell
> щелчком по кнопке. Я думаю так но не знаю что такое Rect:
> TRect
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> TForm3.StringGrid2DrawCell(StringGrid2, X, Y, ?????, gdFixed);
>
> end;
> alex810
Этот код сработает только для одной ячейки (если вообще сработает). Тебе нужен цикл (Хотя уверенности в этом совете у меня нет)
← →
alex810 © (2006-11-17 11:27) [97]
> Отвечу еще раз. Этот метод не вызываю в рукописном коде.
> Это - самый настоящий обработчик события. Всякий раз, когда
> грид должен нарисовать ячейку он вызывает этот метод. И
> именно в этом методе ты и должен разукрасить эту ячейку
> так как надо.
> StringGrid.Inavalidate - перерисуются все видимые ячкйки
> грида
Так что то есть. Но как мне задать какие ячейки надо пересивать.
← →
Сергей М. © (2006-11-17 11:28) [98]
> alex810 © (17.11.06 11:10) [68]
> А что при необходимости не проще ли обратится к массиву
> цветов по идентификатору чем проверять какому едиту соответсвует
> этот идентификатор?
При какой такой "необходимости" ?
И зачем нужен еще какой-то лишний ц/ч идентификатор, если тип TColor сам по себе идентифицирует цвет ?
Если уж на то пошло, то массив тут нужен скорее для хранения TColor-значений, ассоциированных с каждой ячейкой грида. Перед уничтожением формы пиши массив в файл, а при создании считывай файл в массив. В событии OnDrawCell обращайся к соотв.элементу массива и бери оттуда готовый цвет. И все ! К чему непонятные выкрутасы ?
← →
alex810 © (2006-11-17 11:29) [99][96] у меня есть цикл. Как можно это реалезовать.
← →
Elen © (2006-11-17 11:29) [100]
> Но как мне задать какие ячейки надо пересивать.
Пусть перерисовывает все. Тебе же лучше будет
← →
Elen © (2006-11-17 11:30) [101]
> [96]
Ты сейчас Кетмара накликаеш. Это его заклинание - потом берегисЪЪЪ
← →
ЮЮ © (2006-11-17 11:31) [102]procedure TForm3.Edit1Click(Sender: TObject);
begin
with TEdit(Sender) do
begin
SelectedColor:=Colors[Tag];
end;
end;
если Colors[Tag] ты хочешь назначить выбранной на данный момент ячейке грида, это должна быть не переменная, а массис[кол-во строк, кол-во столбцов],
и надо выбирать значение из этого массива в соответствии с ACol и ARow
← →
alex810 © (2006-11-17 11:34) [103]
> Пусть перерисовывает все. Тебе же лучше будет
Но мне надо перерисовать определенные ячейки с определенным цветом
← →
alex810 © (2006-11-17 11:36) [104]
> Если уж на то пошло, то массив тут нужен скорее для хранения
> TColor-значений, ассоциированных с каждой ячейкой грида.
> Перед уничтожением формы пиши массив в файл, а при создании
> считывай файл в массив. В событии OnDrawCell обращайся к
> соотв.элементу массива и бери оттуда готовый цвет. И все
> ! К чему непонятные выкрутасы ?
А если у меня уже есть один обработчик?
← →
ЮЮ © (2006-11-17 11:37) [105]alex810 © (17.11.06 11:27) [97] Так что то есть.
ЮЮ © (17.11.06 10:19) [35]
Есть это надо было ещё час назад. А теперь уже так пережевали, что и есть противно :)
← →
Elen © (2006-11-17 11:37) [106]
> Но мне надо перерисовать определенные ячейки с определенным
> цветом
Ага. Давайте человек будет дышать правой частью грудной клетки, а левой так помахивать.
ПУСТЬ ПЕРЕРИСОВЫВАЕТ ВСЕ!!! Чем плохо?
← →
alex810 © (2006-11-17 11:37) [107]
TForm3.StringGrid2DrawCell(StringGrid2, X, Y, ?????, gdFixed);
что мне вместо вопросов поставить??? Я уже больше ничего не прошу
← →
alex810 © (2006-11-17 11:38) [108]
> ПУСТЬ ПЕРЕРИСОВЫВАЕТ ВСЕ!!! Чем плохо?
А что он нарисует???????
← →
Elen © (2006-11-17 11:39) [109]
> что мне вместо вопросов поставить???
Габариты нужной ячейки.
← →
ЮЮ © (2006-11-17 11:39) [110]
> Но мне надо перерисовать определенные ячейки с определенным
> цветом
Ты читать научишься? Или писать только умеешь?
procedure TForm3.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (state = [gdSelected]) then
with TStringGrid(Sender), Canvas do
begin
Brush.Color := ЦВЕТА_ЯЧЕЕК[ARow, ACol];
TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);
FillRect(Rect);
end;
end;
← →
Сергей М. © (2006-11-17 11:40) [111]
> alex810 © (17.11.06 11:36) [104]
> А если у меня уже есть один обработчик?
Обработчик чего ?
← →
Elen © (2006-11-17 11:41) [112]
> А что он нарисует???????
То что ты пропишеш в OnDrawCell.
Автор не обижайся - просто ты и сам не знаеш чего хочеш. Легкие пути далеко не всегда правильны. А TForm3.StringGrid2DrawCell(StringGrid2, X, Y, ?????, gdFixed); не даст тебе прорисовку, по крайней мере придется цикл делать.
← →
ЮЮ © (2006-11-17 11:41) [113]
Brush.Color := ЦВЕТА_ЯЧЕЕК[ARow, ACol];
FillRect(Rect);
TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);
Естественно, сначала стереть с доски, а потом на ней написать :)
← →
alex810 © (2006-11-17 11:41) [114]
> Ты читать научишься? Или писать только умеешь?
У меня этот обработчик уже есть. Он рисует когда я выделяю мышью. А мне надо чтобы он рисовал еще и тогда когда создается форма.
← →
Elen © (2006-11-17 11:43) [115]
> когда создается форма.
При Креате прорисавка не выполняется.
← →
alex810 © (2006-11-17 11:44) [116]
> То что ты пропишеш в OnDrawCell.
> Автор не обижайся - просто ты и сам не знаеш чего хочеш.
> Легкие пути далеко не всегда правильны. А TForm3.StringGrid2DrawCell(StringGrid2,
> X, Y, ?????, gdFixed); не даст тебе прорисовку, по крайней
> мере придется цикл делать.
Та я понимаю что прийдется делать цикл он у меня уже есть
for X := 1 to stringgrid1.colcount do
for y := 1 to stringgrid1.rowcount do
begin
if Stringgrid1.Cells[x,y] = "1" then
begin
Сюда что надо написать
← →
ЮЮ © (2006-11-17 11:44) [117]Когда ты выделяешь мышью грид рисует только ячейку с которой ты ушел и в которую ты пришел. Проведи над гридом после этого другой формой и удивись тому, как у тебя всё запущено. :)
← →
Сергей М. © (2006-11-17 11:45) [118]
> alex810 © (17.11.06 11:41) [114]
> Он рисует когда я выделяю мышью. А мне надо чтобы он рисовал
> еще и тогда когда создается форма.
>
Он рисует всегда, когда по тем или иным причинам требуется перерисовать ячейку. И одна из этих "причин" (в том числе и в первую очередь) - создание грида в ходе создания формы
← →
alex810 © (2006-11-17 11:46) [119]
> Когда ты выделяешь мышью грид рисует только ячейку с которой
> ты ушел и в которую ты пришел. Проведи над гридом после
> этого другой формой и удивись тому, как у тебя всё запущено.
> :)
Вот моя проблема. Как сделать чтобы она прорисовывалась опять так как была
← →
ЮЮ © (2006-11-17 11:47) [120]
procedure TForm3.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (state = [gdSelected]) then
with TStringGrid(Sender), Canvas do
begin
Brush.Color := ЦВЕТА_ЯЧЕЕК[ARow, ACol];
TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);
FillRect(Rect);
end;
end;
Это все что тебе нужно. Осталось в нужным местах заполнять и изменять массив цветов, вызывая после этого перерисовку всего грида StringGrid2.Invalidate
Страницы: 1 2 3 4 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.69 MB
Время: 0.11 c