![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Цвета в StringGrid [D7, WinXP]
Квэнди © (2005-10-13 16:43:00)Здравствуйте, интересует следующий вопрос: возможно ли сделать так, чтобы после того, как я один раз прорисовал все необходимые цвета и шрифты в stringgrid, таблица больше не перерисовывалась ? Попробую объяснить подробней: положим так :
procedure Tfstart.tabtermDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
tabterm.Canvas.Brush.Color:=clred;
tabterm.Canvas.Font.Color:=clwhite;
tabterm.Canvas.Font.Size:=18;
tabterm.Canvas.FillRect(rect);
tabterm.Cells[2,1]:='AM11';
tabterm.Canvas.TextOut(rect.Left,rect.top,tabterm.Cell[acol,arow]);
end;
Разумеется, эта строчка будет мерцать, так как постоянно будет перерисовываться... можно ли этот эффект как- нибудь убрать ?
ЮЮ (2005-10-14 08:35:00) [1]>чтобы активная строка, т.е. на которой фокус
(gdFocused in State) = The cell has input focus, т.е. ячейка получила фокус ввода и сама при этом обычно не видна, т.к. перекрыта окном встоенного редактора
а "активная строка", это когда tabterm.Row = ARow (параметр обработчика)
Квэнди (2005-10-14 08:20:00) [2]Спасибо еще раз, действительно сразу не сообразил ( есть еще один вопрос, а как сделать , чтобы активная строка, т.е. на которой фокус подсвечивалась другим цветом и при этом, разумеется, созранялся текст, пробовал так :
if (gdFocused in State) then
begin
tabterm.Canvas.Brush.Color := clBlack;
tabterm.Canvas.Font.Color := clWhite;
end
Amoeba (2005-10-13 17:51:00) [3]> tabterm.Cells[2,1]:='AM11'
нужно делать в каком-нибудь другом месте, но никак не в DrawCell.
han_malign (2005-10-13 17:42:00) [4]
> К сожалению не помогло, видимо все же придется отказаться от
> tabterm.Cells[ 2,1]:='AM11'
- а какого... это вообще делать? Редактирование ячейки запретить не судьба? А если дело не в on place редактировании, то надо стереть Delphi, поставить какую нибудь игрушку, и расслабиться...
Квэнди (2005-10-13 17:40:00) [5]Ок, большое спасибо!
Defunct (2005-10-13 17:25:00) [6]Квэнди © (13.10.05 17:12) [4]
От TextOut тоже откажись. Есть TextRect
Amoeba (2005-10-13 17:19:00) [7]
> К сожалению не помогло, видимо все же придется отказаться
> от
> tabterm.Cells[2,1]:='AM11'
Не то, что придется, а просто необходимо. И нечего жалеть! Недопустимо делать присвоение текста ячейке при ее отрисовке. Просто передавай 'AM11' в TextOut.
Квэнди (2005-10-13 17:12:00) [8]К сожалению не помогло, видимо все же придется отказаться от
tabterm.Cells[2,1]:='AM11'
и писать текст в
TextOut, чего бы не хотелось (
han_malign (2005-10-13 17:02:00) [9]
> можно ли этот эффект как- нибудь убрать ?
- ага - убравtabterm.Canvas.FillRect(rect);, аTextOut(rect.Left,rect.top,tabterm.Cell[acol,arow]);заменив наTextRect(Rect, Rect.Left+2, Rect.Top+2,tabterm.Cell[acol,arow]);
> Вовсе не мерцает, поскольку OnDrawCell вызывается только
> при необходимости перерисовки ячейки
- tabterm.Cells[2,1]:='AM11'; - вот эта будет постоянно мерцать - видать такова воля аффтара...
Квэнди (2005-10-13 16:59:00) [10]Попробуйте испытать просто данный текст в Stringgrid и увидите, что будет именно это, потому что ячейки перерисовываются постоянно
MBo (2005-10-13 16:56:00) [11]>Разумеется, эта строчка будет мерцать, так как постоянно будет перерисовываться
???
Вовсе не мерцает, поскольку OnDrawCell вызывается только при необходимости перерисовки ячейки