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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2014, 10:22   #11
loom12
Пользователь
 
Регистрация: 05.09.2014
Сообщений: 24
По умолчанию

Цитата:
Сообщение от IliaIT Посмотреть сообщение
в корне не верный подход. надо динамически определять тип и объект в данном случае
было
Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 StringGrid1.Canvas.Brush.Color:=clRed;
  if ((ACol=2)and(ARow=2)) then    // ((ACol=2) столбцов   ARow=3  строки
    StringGrid1.Canvas.FillRect(Rect);
end;
а надо (код не проверял может где орфография хромает)
Код:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  with (sender as TStringGrid) do 
  begin
    Canvas.Brush.Color:=clRed;
    if ((ACol=2)and(ARow=2)) then    // ((ACol=2) столбцов   ARow=3  строки
    Canvas.FillRect(Rect);
  end;
end;
Сейчас так и сделал

Код:
procedure TForm1.StringGridOnDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var i:Integer;
begin


    for i:=0 to (Sender as TStringGrid).RowCount-1 do
   if (Sender as TStringGrid).Cells[0,i]='!' then
    begin
      if ((ACol=0)and(ARow=i)) then
      begin
        (Sender as TStringGrid).Canvas.Brush.Color:=clRed;
        (Sender as TStringGrid).Canvas.FillRect(Rect);
      end;
    end;

end;
Код:
 // а привязка вот так
procedure Create_ObjNewStringGrid;
begin
..
  NewStringGrid[index_newform]:= TStringGrid.Create(NewForm[index_newform]);
..
  NewStringGrid[index_newform].OnDrawCell:=form1.StringGridOnDrawCell; //!!!
..
end;



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.
в дискуссии рождается истина

Последний раз редактировалось Serge_Bliznykov; 11.09.2014 в 12:53.
loom12 вне форума Ответить с цитированием
Старый 11.09.2014, 12:57   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сейчас так и сделал
нормально. чтобы каждый раз не писать (Sender as TStringGrid)
удобно использовать
Код:
with (Sender as TStringGrid) do ...
или объявить локальную переменную и обращаться через неё:
Код:
procedure TForm1.StringGridOnDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var i:Integer;
  locSG : TStringGrid
begin
   if Not Sender is TStringGrid then Exit; {выход из процедуры если вдруг её назначили не StringGrid}
   locSG := Sender as TStringGrid;
   for i:=0 to locSG.RowCount-1 do
      if  locSG.Cells[0,i]='!' then 
....
но так делать совсем не обязательно - это просто для удобства/упрощения читаемости кода.
На работоспособность это упрощение никак не повлиет.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как провесить процедуру на OnShow динамически созданных вкладок PageControl'a 1fixxer Общие вопросы Delphi 9 04.06.2014 15:24
Взаимодействие динамически созданных кнопок Rilmeer Помощь студентам 5 07.06.2013 13:51
обработчик динамически созданных кнопок andir Общие вопросы Delphi 5 02.03.2013 18:11
У динамически созданной формы есть событие OnClick, но само событие не происходит Hunter_bog Компоненты Delphi 25 23.01.2012 23:50
перетаскивание динамически созданных объектов kaizer131 Общие вопросы Delphi 13 15.06.2011 07:59