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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2009, 19:37   #1
ИВэТэшка
Пользователь
 
Аватар для ИВэТэшка
 
Регистрация: 01.02.2009
Сообщений: 52
Стрелка Закрашивание ячеек в StringGrid

Помогите пожалуйста с одним вопросиком... как в стринг гриде сделать, чтобы при щелчке лк мыши на определенную ячейку, она закрашивалась цветом? при повторном щелчке ячейка вновь становилась бы белой. Текста в ячейках нет, ширина столбцов разная.
Машины должны работать! Люди должны думать!
ИВэТэшка вне форума Ответить с цитированием
Старый 11.04.2009, 19:49   #2
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

создай обработчик события OnDrawCell у StringGrid и напиши в нем:
Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin

 if (gdFocused in State) then begin
      StringGrid1.Canvas.Brush.Color :=($BBBBBB) ;
      StringGrid1.Canvas.Font.Color:=   ($FFFFCC); //для текста
      StringGrid1.canvas.fillRect(Rect);
      StringGrid1.canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[ACol,ARow]); //для текста


 end;
end;

end.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 11.04.2009, 20:26   #3
ИВэТэшка
Пользователь
 
Аватар для ИВэТэшка
 
Регистрация: 01.02.2009
Сообщений: 52
По умолчанию

выделяется, но только одна ячейка (т.е. текущая, на которую нажимаю) А как сохранить выделение цветом этой ячейки и выделить еще другие? если наглядно, то это как диаграмма состояний Ганта
Машины должны работать! Люди должны думать!
ИВэТэшка вне форума Ответить с цитированием
Старый 11.04.2009, 20:44   #4
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Таак.. Тебе надо чтобы при щелчке выделялась ячейка? При повторном щелчке было снято выделение? И еще чтобы можно было выделять много разных ячеек? Так?
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 11.04.2009, 20:49   #5
ИВэТэшка
Пользователь
 
Аватар для ИВэТэшка
 
Регистрация: 01.02.2009
Сообщений: 52
По умолчанию

да, именно так :-)
Машины должны работать! Люди должны думать!
ИВэТэшка вне форума Ответить с цитированием
Старый 11.04.2009, 23:46   #6
Niarb
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 38
По умолчанию

проще и легче, на мой взгляд, будет хранить данные о ячейках в массиве

Код:
fa: array of array of boolean;

procedure TForm1.FormCreate(Sender: TObject);
var i, j: integer;
begin
   setLength(fa,StringGrid1.ColCount);
   for i:=0 to Length(fa)-1 do
      setLength(fa[i],StringGrid1.RowCount);
   for i:=0 to Length(fa)-1 do
      for j:=0 to Length(fa[i])-1 do
         fa[i][j]:=false;
end;

procedure TForm1.StringGrid1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var acol, arow: integer;
begin
   stringgrid1.MouseToCell(x,y,acol,arow);
   fa[acol][arow]:=not fa[acol][arow];
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
   if (acol>StringGrid1.FixedCols-1) and (arow>StringGrid1.FixedRows-1) then begin
      if fa[acol][arow] then begin
         StringGrid1.Canvas.Brush.Color:=clBlack;
         StringGrid1.Canvas.Font.Color:=clWhite;
      end
      else begin
         StringGrid1.Canvas.Brush.Color:=clWhite;
         StringGrid1.Canvas.Font.Color:=clBlack;
      end;
      StringGrid1.Canvas.FillRect(Rect);
      StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[ACol,ARow]);
   end;
end;
...соответственно при изменении числа строк/столбцов, необходимо будет и изменять массив
Чем меньше вы знаете, тем больше я ценен как специалист...
Niarb вне форума Ответить с цитированием
Старый 11.04.2009, 23:53   #7
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Да, самое простое - записать в двумерный массив. Вот мое решение:
Вложения
Тип файла: rar color.rar (7.7 Кб, 47 просмотров)
Изо всей благодати
В руках крепко сжатых
Я донесу только капли

Последний раз редактировалось Roof; 11.04.2009 в 23:56.
Roof вне форума Ответить с цитированием
Старый 12.04.2009, 11:09   #8
ИВэТэшка
Пользователь
 
Аватар для ИВэТэшка
 
Регистрация: 01.02.2009
Сообщений: 52
По умолчанию

Спасибо большое!
Машины должны работать! Люди должны думать!
ИВэТэшка вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Границы ячеек AnnNet Microsoft Office Excel 4 20.02.2009 12:19
Закрашивание столбцов в Stringgrid ertar Общие вопросы Delphi 3 19.02.2009 00:31
Сумма ячеек artemavd Общие вопросы Delphi 11 24.07.2008 16:36
StringGrid: Выделение и закрашивание mazdakilla Общие вопросы Delphi 1 14.05.2008 22:55
Объединение ячеек StringGrid Македонский Общие вопросы Delphi 1 15.11.2007 12:07