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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2016, 15:06   #1
SLAUR
Пользователь
 
Регистрация: 16.10.2014
Сообщений: 51
По умолчанию StringGrid подсветка

Как подсветить выбранную Ячейку в StringGrid
Бывает что ячейка подсвечивается синим цветом а как ее подсветить программно не знаю
SLAUR вне форума Ответить с цитированием
Старый 22.04.2016, 15:37   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Бывает что ячейка подсвечивается синим цветом
это ячейка, в которой находится фокус ввода.

просто присвойте значения переменным
Код:
StringGrid1.Row:= НомерСтроки;
StringGrid1.Col:= НомерСтолбца;
но можно ещё и разными цветами разукрасить ваш грид.
Это уже другое немного.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.04.2016, 15:50   #3
SLAUR
Пользователь
 
Регистрация: 16.10.2014
Сообщений: 51
По умолчанию

Это я уже сделал (StringGrid1.Row:= НомерСтроки;StringGrid1.Col:= НомерСтолбца )
Подсветки нет есть только рамка вокруг ячейки
Может можно эту рамку сделать цветной?

Последний раз редактировалось SLAUR; 22.04.2016 в 15:54. Причина: Добавление
SLAUR вне форума Ответить с цитированием
Старый 22.04.2016, 16:07   #4
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

да можно весь грид перерисовать как вам захочется

Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
StringGrid1.Canvas//и вперед
end;
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 22.04.2016, 17:22   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В options в дизайне goDrawFocusSelected в True
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.04.2016, 18:36   #6
SLAUR
Пользователь
 
Регистрация: 16.10.2014
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
В options в дизайне goDrawFocusSelected в True
Спасибо , помогло.
SLAUR вне форума Ответить с цитированием
Старый 22.04.2016, 19:07   #7
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от SLAUR Посмотреть сообщение
Как подсветить выбранную Ячейку в StringGrid
Бывает что ячейка подсвечивается синим цветом а как ее подсветить программно не знаю
Ничего сложного тут нет.
Вот примерчик:
Код:
//Зададим какой-нибудь текст в ячейках StringGrid1
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[1,1]:='AAA';
StringGrid1.Cells[2,1]:='BBB';
StringGrid1.Cells[1,2]:='CCC';
StringGrid1.Cells[2,2]:='DDD';
end;

//Зададим некоторые условия для "раскраски"
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var al: TAlignment;  
begin
//Эти цвета будут использованы по умолчанию
StringGrid1.Canvas.Brush.Color := clWhite;
StringGrid1.Canvas.Font.Color := clBlack;
//Цвета для фиксированного столбца и строки сделаем, например, стандартными
if ((ARow=0) or (ACol=0)) then
begin
StringGrid1.Canvas.Font.Color:=clBlack;
StringGrid1.Canvas.Brush.Color:=clSilver;
end else
//Зададим наше условие - если содержимое ячейки равно "BBB", то будем ее раскрашивать
if StringGrid1.Cells[ACol,ARow]='BBB' then
begin
//Если ячейка с "BBB" в фокусе - инвертируем цвета
if (gdfocused in State) then 
begin
StringGrid1.Canvas.Brush.Color := clRed;
StringGrid1.Canvas.Font.Color := clWhite;
end  else
//Если ячейка с "BBB" не в фокусе - не инвертируем цвета
begin
StringGrid1.Canvas.Brush.Color := clWhite; 
StringGrid1.Canvas.Font.Color := clRed;
end;
end else
//Немного добавила - это чтобы все ячейки выделялись при получении фокуса...
begin
if (gdfocused in State) then
begin
StringGrid1.Canvas.Brush.Color := clBlue;
StringGrid1.Canvas.Font.Color := clWhite;
end  else
begin
StringGrid1.Canvas.Brush.Color := clWhite;
StringGrid1.Canvas.Font.Color := clBlack;
end;
end;
//На случай пустой ячейки заливаем фон ячейки получившимся цветом Brush.Color
StringGrid1.Canvas.FillRect(Rect);
//Задаем выравнивание текста в ячейках (можно задать свое хоть для каждой) - мы захотели по центру
al:=taCenter;
//Выводим текст ячейки с получившимися цветами шрифта и фона
WriteText(StringGrid1.Canvas, Rect, 2, 2, StringGrid1.Cells[ACol,ARow], al);
end;

//А вот и процедура вывода текста с любыми параметрами
procedure TForm1.WriteText(ACanvas: TCanvas; ARect: TRect; DX, DY: Integer;
  const Text: string; Alignment: TAlignment);
const
  AlignFlags : array [TAlignment] of Integer =
    ( DT_LEFT or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX,
      DT_RIGHT or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX,
      DT_CENTER or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX );
var
  I, Left: Word;
begin
  I := ColorToRGB(ACanvas.Brush.Color);
  if GetNearestColor(ACanvas.Handle, I) = I then
  begin
   case Alignment of
      taLeftJustify:
        Left := ARect.Left + DX;
      taRightJustify:
        Left := ARect.Right - ACanvas.TextWidth(Text) - 3;
    else
    Left := ARect.Left + (ARect.Right - ARect.Left) shr 1
        - (ACanvas.TextWidth(Text) shr 1);
    end;
    ExtTextOut(ACanvas.Handle, Left, ARect.Top + DY, ETO_OPAQUE or
      ETO_CLIPPED, @ARect, PChar(Text), Length(Text), nil);
  end;
end;
А для DBGrid все получается гораздо проще...

P.S. Еще одно дополнение. Если выравнивание не волнует, можно вообще убрать процедуру procedure TForm1.WriteText и завершать обработчик procedure TForm1.StringGrid1DrawCell строкой
Код:
StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[ACol,ARow]);
вместо
Код:
WriteText(StringGrid1.Canvas, Rect, 2, 2, StringGrid1.Cells[ACol,ARow], al);

Последний раз редактировалось kropotkina-alice; 22.04.2016 в 22:19.
kropotkina-alice вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсветка синтаксиса => Патрон Общие вопросы Delphi 21 03.01.2016 11:48
Подсветка строки Quzya2 БД в Delphi 5 06.06.2011 07:45
Подсветка текста alexprey Общие вопросы Delphi 8 07.08.2010 10:55
Подсветка Патрон Общие вопросы Delphi 7 27.03.2008 20:27
Подсветка синтаксиса Simply-Art Общие вопросы Delphi 2 29.05.2007 16:22