Форум: "Начинающим";
Текущий архив: 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