Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2009, 18:09   #1
cowboy
Форумчанин
 
Регистрация: 12.03.2009
Сообщений: 109
По умолчанию расрисовать STRINGGRIG

Добрый день!. Понимаю , что вопрос уже сто раз обсасывался но тем не менее сделать эту не сложную функцию у меня так и не получается.. Мне нужно раскрасить строку в Стринггриде на Пэйджесдиалоге.

Я скомуниздил вот такую не хитрую процедру
procedure StringGrid1DrawCell(Sender: TObject; Col, Row: Longint;

Rect: TRect; State: TGridDrawState);
const

CharOffset = 3;
begin

with PagesDlg.StringGrid1.canvas do
begin
font.color := clMaroon;
textout(rect.left + CharOffset, rect.top + CharOffset, 'L');
font.color := clNavy;
textout(rect.left + CharOffset + TextWidth('L'),
rect.top + CharOffset, 'loyd');
end;
end;

Но тем не менее не понмаю как ее дальше к себе приспособить..Мне нужно ячейки которые больше нуля раскрасить в зеленый..Спасибо всем за помощь...

Или просто дайте мне кто нить простую процедурку которая раскрашивает все поля на стринггриде на пэйджес диалог-а дальше попробую сам разобратся.
cowboy вне форума Ответить с цитированием
Старый 27.07.2009, 18:21   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Типа так
Код:
for i:=0 to StrigGrid1.RowCount-1 do
for j:=0 to StrigGrid1.ColCount-1 do
if StrToInt(StrigGrid1.Cells[i,j])>0 then раскрасить(Ваша процедура).
puporev вне форума Ответить с цитированием
Старый 27.07.2009, 18:55   #3
cowboy
Форумчанин
 
Регистрация: 12.03.2009
Сообщений: 109
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Типа так
Код:
for i:=0 to StrigGrid1.RowCount-1 do
for j:=0 to StrigGrid1.ColCount-1 do
if StrToInt(StrigGrid1.Cells[i,j])>0 then раскрасить(Ваша процедура).
а вызывать ее вот так
Код HTML:
procedure StringGrid1DrawCell(StrigGrid1, i,j,???, ???);
?
Что вместо вопросов то ставить?
cowboy вне форума Ответить с цитированием
Старый 27.07.2009, 19:07   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Да вроде процедуру надо другую написать, нестандартную.
puporev вне форума Ответить с цитированием
Старый 27.07.2009, 19:24   #5
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Компонент TStringGrid - назначение цвета для каждой строки
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 27.07.2009, 19:39   #6
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Установить свойство StringGrid DefaultDrawing в False.
На закладке Events Object Inspector щелкнуть два раза на строке OnDrawCell.
В тексте появится заготовка процедуры, связанная с событием отрисовки ячеек таблицы.
В ней уже можно раскрашивать и фон и текст ячееек

Как пример:
Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
                            Rect: TRect; State: TGridDrawState);
var R : TRect;
begin
  R := Rect;
  OffsetRect(R, 0, 2);  //для "красоты", чтобы текст не прижимался к разделительным линиям таблицы
  
  if gdSelected in State then begin   //для выделения активной строки
    StringGrid1.Canvas.Brush.Color := clHighlight;
    StringGrid1.Canvas.FrameRect(Rect);
    StringGrid1.Canvas.Font.Color := clWhite;
  end else begin     //другие строки
    if StringGrid1[ACol, ARow] > '0' then
      StringGrid1.Canvas.Brush.Color := clLime
    else
      StringGrid1.Canvas.Brush.Color := clWhite;
    StringGrid1.Canvas.FillRect(Rect);
  end;
  //в любом случае отрисовка текста
  if ARow = 0 then //текст заголовков по центру
    DrawText(StringGrid1.Canvas.Handle, pchar(StringGrid1.Cells[ACol, ARow]), -1, R, DT_CENTER)
  else
    DrawText(StringGrid1.Canvas.Handle, pchar(StringGrid1.Cells[ACol, ARow]), -1, R, DT_LEFT);
end;

Последний раз редактировалось Karabash; 27.07.2009 в 20:25.
Karabash вне форума Ответить с цитированием
Старый 27.07.2009, 20:16   #7
cowboy
Форумчанин
 
Регистрация: 12.03.2009
Сообщений: 109
По умолчанию

Спасибо большое!Это мне и надо было
cowboy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц