![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с процедурой OnDrawCell [D7, XP]
nickmas © (2005-11-29 03:40:00)Есть процедура TForm1.StringGrid1DrawCell, которая занимается раскраской StringGrid-а.
Далее динамически создается StringGrid2 и к нему прикручивается это процедура: StringGrid2.OnDrawCell:=StringGrid1.OnDrawCell;
Теперь суть проблемы: В StringGrid2 дублируются значения из StringGrid1. И эта проблема возникла из-за подключения процедуры OnDrawCell. А нужно, чтобы StringGrid2 отображал свои собственные значения.
Если кто знает - подскажите!
nickmas (2005-11-29 08:31:00) [1]Ясно, спасибо - над этим поработаю.
MBo (2005-11-29 08:29:00) [2]Sender - объект, компонент, инициировавший событие.
Поскольку у тебя это один из гридов, то можно сразу получить и использовать TStringGrid(Sender), а не указывать в коде конкретный грид.
nickmas (2005-11-29 08:16:00) [3]Да... Это уже невнимательность...
Спасибо за подсказку.
А что там на счет Sender, и чем плох FindComponent? Дело в том, что я с этим первый раз работаю и был бы признателен за любой полезный совет.
MBo (2005-11-29 07:57:00) [4]Не смущает вот эта строка?
Canvas.TextOut(Rect.Left+6,Rect.Top+2, StringGrid1.Cells[ACol,ARow]);
Используй Sender, и заодно избавься от использования FindComponent
nickmas (2005-11-29 07:47:00) [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;
nickmas (2005-11-29 07:46:00) [6]Вот сам обработчик:
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:29:00) [7]Решает проблему правильный обработчик OnDrawCell.
Раз ты свой не привел - и говорить пока не о чем.
nickmas (2005-11-29 07:22:00) [8]Понятно, но это не решает проблему.
Германн (2005-11-29 04:05:00) [9]2 nickmas (29.11.05 03:40)
>Есть процедура TForm1.StringGrid1DrawCell, которая занимается раскраской >StringGrid-а.
Формально сия процедура должна заниматься не только "раскраской", но и полным отображением "всей информации" для данной ячейки данного грида.