Форум: "Основная";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.043 c