Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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/> &#xA0;Rect: TRect; State: TGridDrawState);<br/>const<br/> &#xA0; WidthCellBor<span style="background-color: yellow">der</span> = 3;<br/>var<br/>Clean:TRect;<br/>begin<br/> &#xA0; with sg.Canvas do<br/> &#xA0; &#xA0; &#xA0;begin<br/> &#xA0; &#xA0; &#xA0; &#xA0; if gdFocused in State then<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;begin<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Brush.Color:=clblack;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; FillRect(Rect);<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Brush.Color:=clwindow;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Pen.Width:=WidthCellBor<span style="background-color: yellow">der</span>;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; pen.Color:=clblack;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Rectangle(Rect.Left,rect.Top,Rect.Right,Rect.Bottom);<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Brush.Color:=clWindow;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Brush.Color:=$00CFA0A0;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; if sg.FixedRows &gt;0 then<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;FillRect(sg.CellRect(ACol,0));<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; if sg.FixedCols &gt; 0 then<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;FillRect(sg.CellRect(0,ARow));<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; sg.Invalidate;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;end else<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;begin<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; if gdSelected in State then<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;begin<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Brush.Color:=$00CFA0A0;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; FillRect(Rect);<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Clean.Left:=sg.CellRect(sg.Selection.Left,sg.Selection.Top).Left;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Clean.Right:=sg.CellRect(sg.Selection.Right,sg.Selection.Top).Right;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Clean.Top:=sg.CellRect(sg.Selection.Left,sg.Selection.Top).Top;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Clean.Bottom:=sg.CellRect(sg.Selection.Left,sg.Selection.Bottom).Bottom;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Brush.Style := bsClear;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; pen.Color:=clblack;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; pen.Width:=WidthCellBor<span style="background-color: yellow">der</span>;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Rectangle(Clean);<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Brush.Color:=clWindow;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Pen.Color:=clWindow;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; pen.Width:=1;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Brush.Color:=$00CFA0A0;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; if sg.FixedRows &gt;0 then<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;FillRect(sg.CellRect(0,ARow));<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; if sg.FixedCols &gt; 0 then<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;FillRect(sg.CellRect(Acol,0));<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; sg.Invalidate;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;end;<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;end;<br/> &#xA0; &#xA0; &#xA0;end;<br/>end;<br/><br/>procedure TForm1.FormCreate(Sen<span style="background-color: yellow">der</span>: TObject);<br/>begin<br/> &#xA0; 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/>&gt; 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/>&gt; Значит пытаться перерисовать дипазон в OnSelectCell, даже <br/>&gt; если<br/>&gt; выделяется более чем одна ячейка.<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/>&gt; Igor_Zal &#xA0; (01.12.06 13:41) [8] <br/><br/>&gt; Если можно покажите на примере.<br/></i><br/>http://rsdn.ru/Forum/Message.aspx?mid=631076&amp;only=1<br/><br/>--<br/>Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2007.01.28;
Скачать: CL | DM;

Наверх




Память: 1.08 MB
Время: 0.069 c
15-1167861371
Palladin
2007-01-04 00:56
2007.01.28
Орешник


3-1162580357
Adil
2006-11-03 21:59
2007.01.28
Oracle 10g Unicode, TntComponents


15-1167857316
rolex
2007-01-03 23:48
2007.01.28
NEC 1100


15-1166237552
for
2006-12-16 05:52
2007.01.28
Сишные циклы FOR в Паскаль не переводятся?


2-1168378180
Mettt
2007-01-10 00:29
2007.01.28
Сортировка по дате