![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 очень сложный компонент, поэтому не удивительно.