Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.7 MB
Время: 0.054 c
15-1163145469
Konst5719
2006-11-10 10:57
2006.12.03
Можно ли встроить в форму ехе-файл?


2-1163580497
Магедон
2006-11-15 11:48
2006.12.03
как убрать мерцание мышки?


1-1161708596
carmen
2006-10-24 20:49
2006.12.03
Создание dbgrideh на листе tabsheet компонента pagecontrol


15-1163708207
Yeg
2006-11-16 23:16
2006.12.03
PowerPoint и звуковой файл


4-1153470311
Степан
2006-07-21 12:25
2006.12.03
Как убрать полосы прокрутки у ListView