Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Изменение шрифта в ячейке StringGrid  (Прочитано 7985 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Дмитрий777
Гость
« : 26-03-2010 07:54 » 

Здравствуйте.
Возникла непонятная (для меня)  ситуевина.
Из txt файла в StringGrid1 загружается таблица. Если во 2-й колонке каждой строки нет записей - цвет записи в 1-й колонке изменяется. В StringGrid1 все это прекрасно работает.
Далее часть строк из StringGrid1 копируется в StringGrid2, в котором тоже и таким-же образом происходит изменение цвета шрифта.
Вот здесь этот процесс и не "катит". Во 2-й колонке строки записей нет, а изменение цвета в 1-й колонке не происходит. Для проверки, добавил кнопку и после копирования в StringGrid2 очищаю (и без того пустую) ячейку во 2-й колонке. В 1-й - цвет изменяется. Такое впечатление, что в этих ячейках 2-й колонки что-то находится. Но на экране ничего нет.
Где моя квадратная голова дала сбой ?
Код:
 // копирование части строк из SG1в  SG2
 var Rmin, Rmax : integer;   // номера строк  в SG1
   NRow : integer;
begin
    for NRow  := Rmin  to  Rmax  do  
  StringGrid2.Rows[StringGrid2.RowCount].Text:=StringGrid1.Rows[NRow].Text;
  StringGrid2.RowCount:=StringGrid2.RowCount+1 ;
 end;

 //изменение цвета шрифта в 1-й колонке, при отсутствии записей во 2-й колонке
 procedure TForm1.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
       if (ACol = 1) and (StringGrid2.Cells[2,ARow] = '') then
 with StringGrid2.Canvas do begin
   Font.Color:= clMaroon ;
     FillRect(Rect);
    TextOut(Rect.Left, Rect.Top, StringGrid2.Cells[ACol, ARow]);
  end;  
end;

 // очистка  ячейки
procedure TForm1.Button1Click(Sender: TObject);
begin
    StringGrid2.Cells [2,4] := '';
end;
« Последнее редактирование: 26-03-2010 12:30 от Дмитрий777 » Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #1 : 26-03-2010 12:52 » 

а в обработчик StringGrid2 назначен именно StringGrid2DrawCell?
Записан

Дмитрий777
Гость
« Ответ #2 : 26-03-2010 13:50 » 

Да.
Здесь что-то происходит именно при копировании. Если я сохраняю часть строк SG1 в txt файл, а потом
загружаю его в SG2 - все работает правильно. Т.е. цвет шрифта меняется. А с промежуточными файлами не хочется связываться.
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #3 : 26-03-2010 14:01 » 

если это полный код -

Код:
var Rmin, Rmax : integer;   // номера строк  в SG1
   NRow : integer;
begin
    for NRow  := Rmin  to  Rmax  do 
  StringGrid2.Rows[StringGrid2.RowCount].Text:=StringGrid1.Rows[NRow].Text;
  StringGrid2.RowCount:=StringGrid2.RowCount+1 ;
 end;

 - то он неправильный. Rmin и rmax не инициализированы; неизвестно, чему равно StringGrid2.RowCount до начала цикла; непонятно, почему сначала идёт присвоение к последней строке (её ещё нет, вообще-то, максимальное значение строки - RowCount-1), а потом - увеличивается кол-во строк.

я бы переписал копирование целиком.
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines