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

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

StringGrid. Несколько вопросов.


User1 ©   (2005-02-28 22:52:00) 

Кинул на форму StringGrig. Сделал чтобы выделялась целая строка а не ячека. Собственно вопрос таков:
Как сделать чтобы выделенная строка имела не синий цвет фона а какой нибудь другой?
Почему выделяеться первая строка, сразу же после запуска программы?

И есть еще вопросик по поводу OnDrawCell:
Решил посчитать сколько раз генерируеться событие OnDrawCell. В итоге меня это очень разочаровало. Ничего не делая с программой - StringGrid генерирует порядка сотни событий в секунду. Почему так? Зачем такая трата ресурсов компьютера, если пользователь вообще с ним ничего не делает?


ЮЮ   (2005-03-02 09:31:00) [1]

>Иначе жестко заложеный цвет фона выделеной строки может совпасть с цветом текста.

Он же сам рисует ячейки и, наверняка, жёстко забитыми цветами.
Отключи DefaultDrawing и грид будет показывать только то, что сам нарисуешь в OnDrawCell


REP   (2005-03-02 09:01:00) [2]

А цвет выделения строки указывается в свойствах экрана на Панели инструментов. Пользователь сам решает какой цвет ему использовать для выделения.
Иначе жестко заложеный цвет фона выделеной строки может совпасть с цветом текста.


ЮЮ   (2005-03-02 05:14:00) [3]

> и начинаю рисовать как в [8].

Как ты рисуешь ты нигде код не приводил

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
 Tag := tag + 1;
 Caption := IntToStr(Tag);
end;

Вызывается только 2 раза при переходе внутри строки и 2 * ColCount - при переходе на другую строку.


Алхимик   (2005-03-01 14:57:00) [4]


> Amoeba ©   (01.03.05 14:49) [9]

При чем тут отладчик?
Ставлю я счетчик на каждый OnDrawCell, вывожу результаты в метку и начинаю рисовать как в [8]. Сабжевая проблема налицо.


Amoeba   (2005-03-01 14:49:00) [5]

Такое количество перерисовок происходит только если в отладчике стоит точка останова в этом методе. Это нормальное поведение в этой ситуации. При нормальном же запуске программы лишних перерисовок не будет. Так что не бери в голову.


Алхимик   (2005-03-01 09:52:00) [6]


> По поводу количество перерисовок

Есть мысль что при пееррисовке одной ячейки, заползаешь на другую, отсюда лавинообразное перерисовывание.


Anatoly Podgoretsky   (2005-02-28 23:45:00) [7]

User1   (28.02.05 23:19) [5]
Пример есть в справке и большинстве FAQ

По поводу количество перерисовок ничего сказать не могу, но смотри 6


Leonid Troyanovsky   (2005-02-28 23:23:00) [8]


> User1   (28.02.05 23:12) [2]

> Я имею ввиду что он генирирует 100 событий в сек OnDrawCell
> при 12 ячеках. И это продолжаеться до бесконечности. При
> этом ячейки пустые и вообще я его не трогаю. Зачем ему 100
> раз в секунду перерисовываться на пустом месте?


Возможно, что некое (отладочное) окно перекрывает грид,
вот оно и рисует.

--
Regards, LVT.


User1   (2005-02-28 23:19:00) [9]


> Anatoly Podgoretsky

Честно говоря я в [0] написал что сделал чтобы выделялась не ячейка я целая строка. Сделал это действительно в Options.
А не подскажете ли как поменять цвет фона выделенной строки?
И что насчет траты в пустую ресурсов на перерисовку в среднем 100 раз в сек?


sniknik   (2005-02-28 23:18:00) [10]

> Решил посчитать сколько раз генерируеться событие OnDrawCell.
неправильно считал

щт вообше не вызывается (если неопределено, а определено так ровно по количеству ячеек)


TCustomDrawGrid = class(TCustomGrid)

FOnDrawCell: TDrawCellEvent;

property OnDrawCell: TDrawCellEvent read FOnDrawCellwrite FOnDrawCell;

procedure TCustomDrawGrid.DrawCell(ACol, ARow: Longint; ARect: TRect;
 AState: TGridDrawState);
var
 Hold: Integer;
begin
 if Assigned( FOnDrawCell) then
 begin
   if UseRightToLeftAlignment then
   begin
     ARect.Left := ClientWidth - ARect.Left;
     ARect.Right := ClientWidth - ARect.Right;
     Hold := ARect.Left;
     ARect.Left := ARect.Right;
     ARect.Right := Hold;
     ChangeGridOrientation(False);
   end;
    FOnDrawCell(Self, ACol, ARow, ARect, AState);
   if UseRightToLeftAlignment then ChangeGridOrientation(True);
 end;
end;


Anatoly Podgoretsky   (2005-02-28 23:15:00) [11]

Ты просил сделать выделение строки, а не фона, на этот вопрос и отвечал.


User1   (2005-02-28 23:12:00) [12]


> Anatoly Podgoretsky



> Смотри свойство Options/

Честно говоря смотрел. Не увидел там где можно поменять цвет фона выделенной строки. D2005.


> По поводу ресурсов StringGrid очень сложный компонент, поэтому
> не удивительно.

Я имею ввиду что он генирирует 100 событий в сек OnDrawCell при 12 ячеках. И это продолжаеться до бесконечности. При этом ячейки пустые и вообще я его не трогаю. Зачем ему 100 раз в секунду перерисовываться на пустом месте?


Anatoly Podgoretsky   (2005-02-28 23:03:00) [13]

Смотри свойство Options/

А какую ты хочешь, во всех известных мне гридах, строка по умолчанию первая.

По поводу ресурсов StringGrid очень сложный компонент, поэтому не удивительно.


Наверх

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