![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
StringGrid событие DrawCell [D2005, XP]
alex810 © (2006-11-17 09:10:00)Помогите пожалуйста как мне можно вызвать процедуру DrawCell щелчком по кнопке. Я думаю так но не знаю что такое Rect: TRect
procedure TForm1.Button1Click(Sender: TObject);;
begin
TForm3.StringGrid2DrawCell(StringGrid2, X, Y, ?????, gdFixed);
end
ЮЮ (2006-11-17 11:44:00) [41]Когда ты выделяешь мышью грид рисует только ячейку с которой ты ушел и в которую ты пришел. Проведи над гридом после этого другой формой и удивись тому, как у тебя всё запущено. :)
alex810 (2006-11-17 11:44:00) [42]
> То что ты пропишеш в 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
Сюда что надо написать
Elen (2006-11-17 11:43:00) [43]
> когда создается форма.
При Креате прорисавка не выполняется.
alex810 (2006-11-17 11:41:00) [44]
> Ты читать научишься? Или писать только умеешь?
У меня этот обработчик уже есть. Он рисует когда я выделяю мышью. А мне надо чтобы он рисовал еще и тогда когда создается форма.
ЮЮ (2006-11-17 11:41:00) [45]
Brush.Color := ЦВЕТА_ЯЧЕЕК[ARow, ACol];
FillRect(Rect);
TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);
Естественно, сначала стереть с доски, а потом на ней написать :)
Elen (2006-11-17 11:41:00) [46]
> А что он нарисует???????
То что ты пропишеш в OnDrawCell.
Автор не обижайся - просто ты и сам не знаеш чего хочеш. Легкие пути далеко не всегда правильны. А TForm3.StringGrid2DrawCell(StringGrid2, X, Y, ?????, gdFixed); не даст тебе прорисовку, по крайней мере придется цикл делать.
Сергей М. (2006-11-17 11:40:00) [47]
> alex810 © (17.11.06 11:36) [104]
> А если у меня уже есть один обработчик?
Обработчик чего?
ЮЮ (2006-11-17 11:39:00) [48]
> Но мне надо перерисовать определенные ячейки с определенным
> цветом
Ты читать научишься? Или писать только умеешь?
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;
Elen (2006-11-17 11:39:00) [49]
> что мне вместо вопросов поставить???
Габариты нужной ячейки.
alex810 (2006-11-17 11:38:00) [50]
> ПУСТЬ ПЕРЕРИСОВЫВАЕТ ВСЕ!!! Чем плохо?
А что он нарисует???????
alex810 (2006-11-17 11:37:00) [51]
TForm3.StringGrid2DrawCell(StringGrid2, X, Y, ?????, gdFixed);
что мне вместо вопросов поставить??? Я уже больше ничего не прошу
Elen (2006-11-17 11:37:00) [52]
> Но мне надо перерисовать определенные ячейки с определенным
> цветом
Ага. Давайте человек будет дышать правой частью грудной клетки, а левой так помахивать.
ПУСТЬ ПЕРЕРИСОВЫВАЕТ ВСЕ!!! Чем плохо?
ЮЮ (2006-11-17 11:37:00) [53]alex810 © (17.11.06 11:27) [97] Так что то есть.
ЮЮ © (17.11.06 10:19) [35]
Есть это надо было ещё час назад. А теперь уже так пережевали, что и есть противно :)
alex810 (2006-11-17 11:36:00) [54]
> Если уж на то пошло, то массив тут нужен скорее для хранения
> TColor-значений, ассоциированных с каждой ячейкой грида.
> Перед уничтожением формы пиши массив в файл, а при создании
> считывай файл в массив. В событии OnDrawCell обращайся к
> соотв.элементу массива и бери оттуда готовый цвет. И все
> ! К чему непонятные выкрутасы ?
А если у меня уже есть один обработчик?
alex810 (2006-11-17 11:34:00) [55]
> Пусть перерисовывает все. Тебе же лучше будет
Но мне надо перерисовать определенные ячейки с определенным цветом
ЮЮ (2006-11-17 11:31:00) [56]procedure TForm3.Edit1Click(Sender: TObject);
begin
with TEdit(Sender) do
begin
SelectedColor:=Colors[Tag];
end;
end;
если Colors[Tag] ты хочешь назначить выбранной на данный момент ячейке грида, это должна быть не переменная, а массис[кол-во строк, кол-во столбцов],
и надо выбирать значение из этого массива в соответствии с ACol и ARow
Elen (2006-11-17 11:30:00) [57]
> [96]
Ты сейчас Кетмара накликаеш. Это его заклинание - потом берегисЪЪЪ
alex810 (2006-11-17 11:29:00) [58][96] у меня есть цикл. Как можно это реалезовать.
Elen (2006-11-17 11:29:00) [59]
> Но как мне задать какие ячейки надо пересивать.
Пусть перерисовывает все. Тебе же лучше будет
Сергей М. (2006-11-17 11:28:00) [60]
> alex810 © (17.11.06 11:10) [68]
> А что при необходимости не проще ли обратится к массиву
> цветов по идентификатору чем проверять какому едиту соответсвует
> этот идентификатор?
При какой такой "необходимости" ?
И зачем нужен еще какой-то лишний ц/ч идентификатор, если тип TColor сам по себе идентифицирует цвет ?
Если уж на то пошло, то массив тут нужен скорее для хранения TColor-значений, ассоциированных с каждой ячейкой грида. Перед уничтожением формы пиши массив в файл, а при создании считывай файл в массив. В событии OnDrawCell обращайся к соотв.элементу массива и бери оттуда готовый цвет. И все ! К чему непонятные выкрутасы ?