Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2011, 22:25   #1
dubailand
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 65
По умолчанию Раскрашивание отдельных ячеек StringGrid через разные функции

Итак, добрый вечер!
Появилась новая проблема: есть StringGrid с инфой, и происходит его закрашивание при определенных значениях:
Код:
    procedure TForm1.SG1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  const
  clPaleRed = TColor($CCCCFF);
  var cr:TRect;
      i:integer;
begin
    data(a,P);
   if (FindComponent('Stringgrid'+inttostr(a)) as TStringGrid).Cells[ACol, ARow] =IntToStr(k)  then
  StringGrid1.Canvas.Brush.color := clPalered
else
  StringGrid1.canvas.brush.Color := clWhite;

  if (ACol <> 0) and (ARow <> 0) then
  begin
    StringGrid1.Canvas.FillRect(Rect);
    StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
  end;

 for i:=1 to 12 do begin
   with (FindComponent('Stringgrid'+inttostr(i)) as TStringGrid).Canvas do begin
 cr:=(FindComponent('Stringgrid'+inttostr(i)) as TStringGrid).CellRect(acol,arow) ;
 FillRect(cr);
 TextOut(cr.left+((cr.Right-cr.Left) div 2)-(TextWidth((FindComponent('Stringgrid'+inttostr(i)) as TStringGrid).Cells[acol,arow]) div 2),
 cr.Top,(FindComponent('Stringgrid'+inttostr(i)) as TStringGrid).Cells[acol,arow]);
 end;
  end;
   end;
Ругается делфи вот в этом месте:
Код:
data(a,P);
   if (FindComponent('Stringgrid'+inttostr(k)) as TStringGrid).Cells[ACol, ARow] =IntToStr(a)
Из функции data получаем значение k и а, но, к сожалению не компилируется.

И еще один вопрос: Значение может быть как во второй, так и в третьей строке, а
Код:
   if Stringgrid.Cells[ACol, ARow] ='3' then
  StringGrid1.Canvas.Brush.color := clPalered;
(упращенная версия с функцией) закрашивает только вторую строку. Что можно предпринять?? Мне, в принципе,
Код:
else
  StringGrid1.canvas.brush.Color := clWhite
не нужен!
dubailand вне форума Ответить с цитированием
Старый 03.09.2011, 22:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ругается делфи
На эльфийском или на граттикапулианском?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.09.2011, 12:34   #3
dubailand
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 65
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
На эльфийском или на граттикапулианском?
Юморист нашелся, родственник Задорнова!
dubailand вне форума Ответить с цитированием
Старый 04.09.2011, 12:57   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Юморист нашелся, родственник Задорнова!
Мы тут все юмористы. Думаете ваш код кто-то будет компилировать, чтобы узнать текст сообщения об ошибке? Тогда ваш юмор вообще не имеет пределов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.09.2011, 14:45   #5
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Цитата:
Сообщение от dubailand Посмотреть сообщение
Юморист нашелся, родственник Задорнова!
С "супермодером" нужно поаккуратнее - можно невзначай и бан схлопотать...
А по делу - вам правильно сказали - ежели есть проблема, то опишите ее максимально, со всеми подробностями. Трудно дать совет, когда вы ведете себя как партизан на допросе у фашистов...
И еще...
В правилах форума четко написано - "Одна тема - один вопрос". Вы не удосужились почитать ? Вот ежели вернется Михалыч, он вас живенько "построит"
asmodey1 вне форума Ответить с цитированием
Старый 04.09.2011, 15:38   #6
dubailand
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 65
По умолчанию

Да, немножко я погорячился. Вот какая вылазит ошибка:
Изображения
Тип файла: jpg ошибка.jpg (17.3 Кб, 159 просмотров)
dubailand вне форума Ответить с цитированием
Старый 04.09.2011, 15:57   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так это не ошибка компиляции, это при выполнении. Если при вызове data(a,P), то что это за процедура, где её код, где параметры описаны? Где переменная k из следующей строки инициализируется?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.09.2011, 16:02   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

FindComponent возвращает nil если ничего не находит, так что твой код нужно переписать:
Код:
Var st:TStringGrid;
...
  st:=FindComponent('Stringgrid'+inttostr(a));
  if st<>nil then begin
    if st.Cells[ACol, ARow] =IntToStr(k)  then
    .....
  end;
Ну и замечания Аватара справедливы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет на редактирование отдельных ячеек soundstream Microsoft Office Excel 8 12.07.2011 14:29
запретить редактирование в отдельных ячейках Stringgrid Delphi JK0 Помощь студентам 6 07.12.2010 12:43
И по поводу раскрашивание ячеек от даты Wasily Microsoft Office Excel 9 18.06.2008 08:38
как в стрингриде задавать ширину(высоту) ячеек, а для отдельных строк (столбцов)) sdp Компоненты Delphi 3 20.06.2007 23:02