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

Вниз

Проблема с процедурой OnDrawCell   Найти похожие ветки 

 
nickmas   (2005-11-29 03:40) [0]

Есть процедура TForm1.StringGrid1DrawCell, которая занимается раскраской StringGrid-а.
 Далее динамически создается StringGrid2 и к нему прикручивается это процедура: StringGrid2.OnDrawCell:=StringGrid1.OnDrawCell;

  Теперь суть проблемы: В StringGrid2 дублируются значения из StringGrid1. И эта проблема возникла из-за подключения процедуры OnDrawCell. А нужно, чтобы StringGrid2 отображал свои собственные значения.

 Если кто знает - подскажите!


 
Германн ©   (2005-11-29 04:05) [1]

2 nickmas   (29.11.05 03:40)  
>Есть процедура TForm1.StringGrid1DrawCell, которая занимается раскраской >StringGrid-а.

Формально сия процедура должна заниматься не только "раскраской", но и полным отображением "всей информации" для данной ячейки данного грида.


 
nickmas   (2005-11-29 07:22) [2]

Понятно, но это не решает проблему.


 
MBo ©   (2005-11-29 07:29) [3]

Решает проблему правильный обработчик OnDrawCell.
Раз ты свой не привел - и говорить пока не о чем.


 
nickmas   (2005-11-29 07:46) [4]

Вот сам обработчик:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
const
 clPaleBlue = TColor(clSkyBlue);
 clPaleCream = TColor(clCream);
begin
 if (PageControl1.ActivePageIndex=0) then
   with FindComponent("StringGrid"+IntToStr(PageControl1.ActivePageIndex+1)) as TStringGrid do
     begin
       if (gdFocused in State) then
         begin
           Canvas.Brush.Color:=clNavy;
           Canvas.Font.Color:=clWhite;
         end
       else
         begin
           if (ARow>=Range11) and (ARow<=Range12) then
             Canvas.Brush.Color:=clSkyBlue;
           if (ARow>=Range21) and (ARow<=Range22) then
             Canvas.Brush.Color:=clCream;
           if (ARow>=Range31) and (ARow<=Range32) then
             Canvas.Brush.Color:=clMoneyGreen;
         end;
       if (ACol>0) and (ARow>0) then
         begin
           Canvas.FillRect(Rect);
           Canvas.TextOut(Rect.Left+6,Rect.Top+2,StringGrid1.Cells[ACol,ARow]);
         end;
     end;
 
 if (PageControl1.ActivePageIndex>0) then
   with Form3 do
     with FindComponent("StringGrid"+IntToStr(PageControl1.ActivePageIndex+1)) as TStringGrid do
       begin
         if (gdFocused in State) then
           begin
             Canvas.Brush.Color:=clNavy;
             Canvas.Font.Color:=clWhite;
           end
         else
           begin
             if (ARow>=Range11) and (ARow<=Range12) then
               Canvas.Brush.Color:=clSkyBlue;
             if (ARow>=Range21) and (ARow<=Range22) then
               Canvas.Brush.Color:=clCream;
             if (ARow>=Range31) and (ARow<=Range32) then
               Canvas.Brush.Color:=clMoneyGreen;
           end;
         if (ACol>0) and (ARow>0) then
           begin
             Canvas.FillRect(Rect);
             Canvas.TextOut(Rect.Left+6,Rect.Top+2,StringGrid1.Cells[ACol,ARow]);
           end;
       end;
end;

А теперь какие идеи?


 
nickmas   (2005-11-29 07:47) [5]

Вот сам обработчик:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
const
 clPaleBlue = TColor(clSkyBlue);
 clPaleCream = TColor(clCream);
begin
 if (PageControl1.ActivePageIndex=0) then
   with FindComponent("StringGrid"+IntToStr(PageControl1.ActivePageIndex+1)) as TStringGrid do
     begin
       if (gdFocused in State) then
         begin
           Canvas.Brush.Color:=clNavy;
           Canvas.Font.Color:=clWhite;
         end
       else
         begin
           if (ARow>=Range11) and (ARow<=Range12) then
             Canvas.Brush.Color:=clSkyBlue;
           if (ARow>=Range21) and (ARow<=Range22) then
             Canvas.Brush.Color:=clCream;
           if (ARow>=Range31) and (ARow<=Range32) then
             Canvas.Brush.Color:=clMoneyGreen;
         end;
       if (ACol>0) and (ARow>0) then
         begin
           Canvas.FillRect(Rect);
           Canvas.TextOut(Rect.Left+6,Rect.Top+2,StringGrid1.Cells[ACol,ARow]);
         end;
     end;
 
 if (PageControl1.ActivePageIndex>0) then
   with Form3 do
     with FindComponent("StringGrid"+IntToStr(PageControl1.ActivePageIndex+1)) as TStringGrid do
       begin
         if (gdFocused in State) then
           begin
             Canvas.Brush.Color:=clNavy;
             Canvas.Font.Color:=clWhite;
           end
         else
           begin
             if (ARow>=Range11) and (ARow<=Range12) then
               Canvas.Brush.Color:=clSkyBlue;
             if (ARow>=Range21) and (ARow<=Range22) then
               Canvas.Brush.Color:=clCream;
             if (ARow>=Range31) and (ARow<=Range32) then
               Canvas.Brush.Color:=clMoneyGreen;
           end;
         if (ACol>0) and (ARow>0) then
           begin
             Canvas.FillRect(Rect);
             Canvas.TextOut(Rect.Left+6,Rect.Top+2,StringGrid1.Cells[ACol,ARow]);
           end;
       end;
end;


 
MBo ©   (2005-11-29 07:57) [6]

Не смущает вот эта строка?

Canvas.TextOut(Rect.Left+6,Rect.Top+2,StringGrid1.Cells[ACol,ARow]);

Используй Sender, и заодно избавься от использования FindComponent


 
nickmas   (2005-11-29 08:16) [7]

Да... Это уже невнимательность...
 
 Спасибо за подсказку.

 А что там на счет Sender, и чем плох FindComponent? Дело в том, что я с этим первый раз работаю и был бы признателен за любой полезный совет.


 
MBo ©   (2005-11-29 08:29) [8]

Sender - объект, компонент, инициировавший событие.
Поскольку у тебя это один из гридов, то можно сразу получить и использовать TStringGrid(Sender), а не указывать в коде конкретный грид.


 
nickmas   (2005-11-29 08:31) [9]

Ясно, спасибо - над этим поработаю.



Страницы: 1 вся ветка

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.06 c
2-1133276360
Piero
2005-11-29 17:59
2005.12.18
Подскажите, про класс


4-1129391237
Tristania
2005-10-15 19:47
2005.12.18
Работа с винчестером напрямую


14-1132835209
ArtemESC
2005-11-24 15:26
2005.12.18
Потерял статью...


4-1129830394
Maksyta
2005-10-20 21:46
2005.12.18
Выключение, перезагрузка системы


2-1133367276
gan
2005-11-30 19:14
2005.12.18
Находимтся ли файл в папке