Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Стиль шрифта TstringGrid-a 
V
    Опции темы
AleksandraN
Дата 18.8.2009, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 11.8.2009
Где: Пермь

Репутация: нет
Всего: нет



Не прорисовывается StringGrid если стить шрифта изменить на жирный, курсив....
Делаю так:
обрабатываю событие OnDrawCell
Код

procedure TForm1.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 if (ACol = 1) and (ARow > 0) then
     TStringGrid(Sender).Font.Style := [fsBold, fsItalic]
    else if (ACol = 2) and (ARow > 0)  then
     TStringGrid(Sender).Font.Style := [fsBold]
    else if (ACol = 3) and (ARow > 0)  then
     TStringGrid(Sender).Font.Style := [fsItalic]
    else TStringGrid(Sender).Font.Style := [];
end;

после этого, если на форме больше 1-го StringGrida, то прорисовывается кое-как один....а остальные виснут....
Что-то я видимо не так делаю... 
PM MAIL   Вверх
Staruha
Дата 18.8.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 1
Всего: 27



Сливаю в Stringgrid данные заодно и малюю.
Код

StringGrid1.Canvas.Font.Color:=clred;
StringGrid1.Canvas.Font.Size:=10;
StringGrid1.Canvas.Font.Style:=[fsbold];
StringGrid1.Canvas.TextOut(390,5,'Заказ №'+s1);
StringGrid1.Canvas.TextOut(390,25,'Материалы Всего');

StringGrid1.Canvas.Rectangle(383,45,518,65);
StringGrid1.Canvas.TextOut(383,45,floattostr(SmItog)+'руб.');



--------------------
Возмездие настигнет
PM MAIL   Вверх
AleksandraN
Дата 18.8.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 11.8.2009
Где: Пермь

Репутация: нет
Всего: нет



Нет, мне надо, чтоб стиль разных  ячеек был разным...плюс ко всему у меня на форме этих StringGrid-ов много...шрифт во всех ячейках жирный или курсив я могу сделать...а для конкретной нет... это так почему-то на условный оператор реагирует....
при этом я ещё в этих стринггридах chek-box-ы использую и картинки в ячейки вставляю..на них он реагирует адекватно.... 
PM MAIL   Вверх
Staruha
Дата 18.8.2009, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 1
Всего: 27



Цитата

Нет, мне надо, чтоб стиль разных  ячеек был разным...

Вот и ставь заплатки на ячейки и малюй


--------------------
Возмездие настигнет
PM MAIL   Вверх
AleksandraN
Дата 19.8.2009, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 11.8.2009
Где: Пермь

Репутация: нет
Всего: нет



А можно пример...я ведь вроде бы так и делаю....

Добавлено через 1 минуту и 25 секунд
Если StringGrid один, то в целом все прорисовывается, но он как бы мерцает...если их много, то прорисовывается и мерцает только один, а остальные вообще не прорисовываются
PM MAIL   Вверх
RockClimber
Дата 19.8.2009, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



Цитата(AleksandraN @  19.8.2009,  08:22 Найти цитируемый пост)
прорисовывается и мерцает только один, а остальные вообще не прорисовываются

Проверь, какие у остальных обработчики события OnDrawCell. Возможно, только одна сетка привязана к приведенной выше процедуре.
А вот с мерцанием придется смириться. Я не очень плотно изучал этот вопрос, но скорее всего оно происходит потому, что обработчик вызывается после стандартного рисования. В итоге при каждом чихе пользователя вызывается сначала стандартная перерисовка (не исключено, что она оптимизирована "против мерцания"), а потом обработчик OnDrawCell, который рисует второй раз то же самое. В принципе, можно сделать своего наследника от TCustomStringGrid и перекрыть рисующие методы - но это путь для полных перфекционистов...


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
Romikgy
Дата 19.8.2009, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Цитата(RockClimber @  19.8.2009,  08:00 Найти цитируемый пост)
А вот с мерцанием придется смириться. 

Код

MainForm.DoubleBuffered:=true;



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
volvo877
Дата 19.8.2009, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 14
Всего: 116



Цитата(RockClimber @  19.8.2009,  09:00 Найти цитируемый пост)
А вот с мерцанием придется смириться.
Для начала надо поправить сам обработчик OnDrawCell, а потом уже смотреть, останется, с чем мириться, или нет. Я например, мерцания не наблюдаю при 4-х гридах и при любом количестве ячеек (даже при DoubleBuffered = false):

Код

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
const
  styles: array[1 .. 4] of TFontStyles =
  (
    [fsBold, fsItalic], [fsBold], [fsItalic], []
  );
begin
  if (ARow > 0) then
  begin

    if ACol > 3 then ACol := 4;
    case ACol of
      1 .. 4:
      with (Sender as TStringGrid).Canvas do
      begin
        FillRect(Rect);
        Font.Style:= styles[ACol];
        TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
      end;
    end;

  end;
end;

PM MAIL   Вверх
Staruha
Дата 19.8.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 1
Всего: 27



procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Я эту процедуру вообще не использую.Попробуй просто кнопку для начала.Все должно получиться


--------------------
Возмездие настигнет
PM MAIL   Вверх
AleksandraN
Дата 19.8.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 11.8.2009
Где: Пермь

Репутация: нет
Всего: нет



Спасибо огромное всем, получилось...при очень большом количестве гридов все равно мерцает, но по крайней мере все прорисовывает... smile  
PM MAIL   Вверх
RockClimber
Дата 19.8.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



Цитата(Romikgy @ 19.8.2009,  09:39)
Код

MainForm.DoubleBuffered:=true;

Спасибо за подсказку, я попробую.
Но только тут две проблемы:
Во-первых, я использую Lazarus, а там, хоть и все те же самые компоненты, но реализация может отличаться. А искать исходники из Delphi и сравнивать мне лень. Во-вторых, я для своих нужд уже давно сделал наследника от TCustomDrawGrid и пользуюсь им, он не мерцает...
И кроме того, мне показалось (именно показалось, на уровне ощущений), что мерцание меньше там, где оперативной памяти больше и проц помощнее...


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1123 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.