Текущий архив: 2007.01.28;
Скачать: CL | DM;
Вниз
Тот же Stringgrid Найти похожие ветки
← →
Igor_Zal (2006-11-30 11:27) [0]Уважаемые Мастера.<br/>Посмотрите пожалуйста пример рабочего кода для Stringgrid.<br/><br/>procedure TForm1.sgDrawCell(Sen<span style="background-color: yellow">der</span>: TObject; ACol, ARow: Integer;<br/>  Rect: TRect; State: TGridDrawState);<br/>const<br/>   WidthCellBor<span style="background-color: yellow">der</span> = 3;<br/>var<br/>Clean:TRect;<br/>begin<br/>   with sg.Canvas do<br/>      begin<br/>         if gdFocused in State then<br/>            begin<br/>               Brush.Color:=clblack;<br/>               FillRect(Rect);<br/>               Brush.Color:=clwindow;<br/>               Pen.Width:=WidthCellBor<span style="background-color: yellow">der</span>;<br/>               pen.Color:=clblack;<br/>               Rectangle(Rect.Left,rect.Top,Rect.Right,Rect.Bottom);<br/>               Brush.Color:=clWindow;<br/>               Brush.Color:=$00CFA0A0;<br/>               if sg.FixedRows >0 then<br/>                  FillRect(sg.CellRect(ACol,0));<br/>               if sg.FixedCols > 0 then<br/>                  FillRect(sg.CellRect(0,ARow));<br/>               sg.Invalidate;<br/>            end else<br/>            begin<br/>               if gdSelected in State then<br/>                  begin<br/>                     Brush.Color:=$00CFA0A0;<br/>                     FillRect(Rect);<br/>                     Clean.Left:=sg.CellRect(sg.Selection.Left,sg.Selection.Top).Left;<br/>                     Clean.Right:=sg.CellRect(sg.Selection.Right,sg.Selection.Top).Right;<br/>                     Clean.Top:=sg.CellRect(sg.Selection.Left,sg.Selection.Top).Top;<br/>                     Clean.Bottom:=sg.CellRect(sg.Selection.Left,sg.Selection.Bottom).Bottom;<br/>                     Brush.Style := bsClear;<br/>                     pen.Color:=clblack;<br/>                     pen.Width:=WidthCellBor<span style="background-color: yellow">der</span>;<br/>                     Rectangle(Clean);<br/>                     Brush.Color:=clWindow;<br/>                     Pen.Color:=clWindow;<br/>                     pen.Width:=1;<br/>                     Brush.Color:=$00CFA0A0;<br/>                     if sg.FixedRows >0 then<br/>                        FillRect(sg.CellRect(0,ARow));<br/>                     if sg.FixedCols > 0 then<br/>                        FillRect(sg.CellRect(Acol,0));<br/>                     sg.Invalidate;<br/>                    end;<br/>            end;<br/>      end;<br/>end;<br/><br/>procedure TForm1.FormCreate(Sen<span style="background-color: yellow">der</span>: TObject);<br/>begin<br/>   sg.DoubleBuffered:=true;<br/>end;<br/><br/>Память при этом исполнении расходуется мало,<br/>но кода нажимаешь в Windows XP<br/>CTL+ALT+Del в менеждере видно,<br/>что у нашей программы (ЦП постоянно меняется)<br/>В Excel такого нет (после выделения ЦП = 0), когда<br/>выделяешь по такому же принципу.<br/><br/>Помогите решить такую проблему.<br/>Заранее спасибо.
← →
Elen © (2006-11-30 11:31) [1]<i><br/>> Igor_Zal<br/></i><br/>А проблема то в чем? Что сильно меняется?
← →
Elen © (2006-11-30 11:31) [2]<font color="red">Удалено модератором<br/><b>Примечание: </b><i>дубль</i></font>
← →
icWasya © (2006-11-30 12:26) [3]а зачем sg.Invalidate внутри sgDrawCell ??
← →
Igor_Zal (2006-12-01 09:52) [4]А можно ли в данном случае обойтись без Invalidate?<br/>Как тогда перерисоват диапазон с жирной линией по краям(как в Excel).<br/>Если использовать OnSelectCell - трудно сделать для дипазона, когда одна ячейка все получается.<br/>Помогите решить проблему.<br/>Получается, чтомы перерисовываем ячейки дважды и идет постоянная нагрузка на уровень загруженности процесса.<br/>Заранее спасибо.
← →
ЮЮ © (2006-12-01 12:38) [5]Поставь Invalidate в другой обработчит, в не в DrawCell. Туда - где надо принудительно вызвать перерисовку, ибо перерисовка требуется именно твоему гриду и не нужна стандартному. <br/><br/><i>Если использовать OnSelectCell - трудно сделать для дипазона, когда одна ячейка все получается.</i><br/>Если этот обработчик вызывается при изменении области выделения. то там и ставь Invalidate. А отрисовка все-равно в OnDrawCell
← →
Igor_Zal (2006-12-01 12:52) [6]Значит пытаться перерисовать дипазон в OnSelectCell, даже если<br/>выделяется более чем одна ячейка. То есть, как я понял, Invalidate нужно<br/>применить в этом месте?
← →
ЮЮ © (2006-12-01 13:22) [7]<i><br/>> Значит пытаться перерисовать дипазон в OnSelectCell, даже <br/>> если<br/>> выделяется более чем одна ячейка.<br/></i><br/><br/>Только код в OnDrawCell должен сразу закладываться на TStringGrid<b>.Selection</b>
← →
Igor_Zal (2006-12-01 13:41) [8]Так в OnDrawCell sg и ориентируется на Sg.Selection, зачем закладывать<br/>на TStringGrid.Selection или я что-то не понимаю.<br/>Если можно покажите на примере.
← →
Leonid Troyanovsky © (2006-12-01 13:48) [9]<i><br/>> Igor_Zal   (01.12.06 13:41) [8] <br/><br/>> Если можно покажите на примере.<br/></i><br/>http://rsdn.ru/Forum/Message.aspx?mid=631076&only=1<br/><br/>--<br/>Regards, LVT.
Страницы: 1 вся ветка
Текущий архив: 2007.01.28;
Скачать: CL | DM;
Память: 1.08 MB
Время: 0.069 c