Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1163005158
Sergey Masloff
2006-11-08 19:59
2006.12.03
Про то как все ругались на 10 тыс зарплаты по письму Думкина


15-1163387593
vidiv
2006-11-13 06:13
2006.12.03
Вопрос по Active Directory


2-1163409817
ORMADA
2006-11-13 12:23
2006.12.03
Пересечение окон


2-1163340455
Itonixxx
2006-11-12 17:07
2006.12.03
переос данных из ibQuery


15-1163243828
Vansss
2006-11-11 14:17
2006.12.03
Помагите начинающиму!





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