Главная страница
    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
2-1133648336
Fl@sh
2005-12-04 01:18
2005.12.18
Rave Report + BD


14-1133048630
Fl@sh
2005-11-27 02:43
2005.12.18
PIC контроллеры + литература


3-1130512604
Juice
2005-10-28 19:16
2005.12.18
Зачем нужны многозвенки ?


1-1132553257
dreamse
2005-11-21 09:07
2005.12.18
Как в DBChart выводить значения времени ?


8-1121407670
Хинт
2005-07-15 10:07
2005.12.18
Pixels, ScanLine и Массив





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