Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.035 c
6-1104903666
uny
2005-01-05 08:41
2005.03.13
ping каждые 2 минуты - спец маленькая прога


1-1109248689
Алина
2005-02-24 15:38
2005.03.13
Запрет отображения компонента


1-1109342641
Goga
2005-02-25 17:44
2005.03.13
Свойство объекта


4-1107150649
Progh
2005-01-31 08:50
2005.03.13
Получить имя процесса, по хандлу окна


1-1109444623
Stype
2005-02-26 22:03
2005.03.13
Область уведомлений Windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский