Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Вниз

Проблема с процедурой 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.012 c
3-1130770669
DancerMan
2005-10-31 17:57
2005.12.18
Ошибка при подключении к базе FireBird


2-1133353696
MasterVovan
2005-11-30 15:28
2005.12.18
Отслеживание события из функции.


1-1132904035
psa247
2005-11-25 10:33
2005.12.18
Application.Hint


2-1133245363
Andry
2005-11-29 09:22
2005.12.18
Фокус бутона


6-1125558278
integery
2005-09-01 11:04
2005.12.18
што значит range check error





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