Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Цвета в 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 вызывается только при необходимости перерисовки ячейки


Наверх

Титульная страница Поиск, карта сайта Написать письмо