Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.13;
Скачать: CL | DM;

Вниз

StringGrid. Несколько вопросов.   Найти похожие ветки 

 
User1   (2005-02-28 22:52) [0]

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

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


 
Anatoly Podgoretsky ©   (2005-02-28 23:03) [1]

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

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

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


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


> Anatoly Podgoretsky



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

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


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

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


 
Anatoly Podgoretsky ©   (2005-02-28 23:15) [3]

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


 
sniknik ©   (2005-02-28 23:18) [4]

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

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


TCustomDrawGrid = class(TCustomGrid)

FOnDrawCell: TDrawCellEvent;

property OnDrawCell: TDrawCellEvent read FOnDrawCell write 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;


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


> Anatoly Podgoretsky

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


 
Leonid Troyanovsky ©   (2005-02-28 23:23) [6]


> User1   (28.02.05 23:12) [2]

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


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

--
Regards, LVT.


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

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

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


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


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

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


 
Amoeba ©   (2005-03-01 14:49) [9]

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


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


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

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


 
ЮЮ ©   (2005-03-02 05:14) [11]

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

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

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

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


 
REP ©   (2005-03-02 09:01) [12]

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


 
ЮЮ ©   (2005-03-02 09:31) [13]

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

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



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

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

Наверх




Память: 0.5 MB
Время: 0.027 c
9-1102253410
Bryke
2004-12-05 16:30
2005.03.13
Клик!


1-1109006380
Alek
2005-02-21 20:19
2005.03.13
Фреймы из длл


1-1109574679
mmms
2005-02-28 10:11
2005.03.13
Как бы зациклить "Tab" на одной панели, не переходить на другие


1-1109661973
Sancho
2005-03-01 10:26
2005.03.13
изменить настройки Locale


1-1109298096
Prove
2005-02-25 05:21
2005.03.13
Помогите разобраться с указателями