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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2010, 17:44   #1
PK.Kirill
 
Аватар для PK.Kirill
 
Регистрация: 23.04.2010
Сообщений: 8
Лампочка Возможно изменить цвет фона при редактировании ячейки StringGrid ?

Возможно ли изменить цвет фона при редактировании ячейки StringGrid?

При редактировании ячейки StringGrid фон всегда белый, и если текст светлый то его плохо видно на белом фоне
Стандартными методами мне неудается изменить цвет фона редактируемой ячейки.

Может у кого есть необходимый опыт и/или знания, подскижите пожалуйста как это можно реализовать.
Изображения
Тип файла: png Безымянный.png (1.3 Кб, 161 просмотров)

Последний раз редактировалось PK.Kirill; 23.04.2010 в 17:47. Причина: убрал неточность
PK.Kirill вне форума Ответить с цитированием
Старый 23.04.2010, 18:07   #2
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Код:
procedure TForm1.StringGrid1Click(Sender: TObject);
var
  I, J: integer;
begin
  with StringGrid1 do
  begin
    for I := 0 to ColCount - 1 do
    begin
      for J := 0 to RowCount - 1 do
        Objects[I, J] := TObJect(0);
    end;
    Objects[Col, Row] := TObJect(1);
  end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  with StringGrid1 do
  begin
    Canvas.Font.Color := clBlack;
    if Integer(Objects[ACol, ARow]) = 0 then
      Canvas.Brush.Color := clWindow;
    if Integer(Objects[ACol, ARow]) = 1 then
      Canvas.Brush.Color := clGray;
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left + 5, Rect.Top + 5, Cells[ACol, ARow]);
  end;
end;
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 23.04.2010, 18:56   #3
PK.Kirill
 
Аватар для PK.Kirill
 
Регистрация: 23.04.2010
Сообщений: 8
Сообщение всеравно при редактировании фон-белый

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

Проект вложен:
Вложения
Тип файла: zip X3.zip (6.1 Кб, 11 просмотров)
PK.Kirill вне форума Ответить с цитированием
Старый 24.04.2010, 11:10   #4
PK.Kirill
 
Аватар для PK.Kirill
 
Регистрация: 23.04.2010
Сообщений: 8
Печаль

Вижу возникли сложности?

Неужели тут нет знающих людей которые сумеют сделать это быстрее меня, я уже "три дня и три ночи" пытаюсь найти способ
PK.Kirill вне форума Ответить с цитированием
Старый 25.02.2013, 05:35   #5
Lordar
Новичок
Джуниор
 
Регистрация: 25.02.2013
Сообщений: 2
Восклицание

Дружищще, нет ничего проще! TStringGrid создает строку ввода на общем предке TCustomEdit из класса TInplaceEdit, и по началу изменения текста в ячейке переносит его в нужное место. Оно создается только при первом изменении ячейки. Тоесть отыскать его например при загрузке программы неполучится!!!
Код:
procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String);
var
  i: Integer;
begin
  for i := 0 to TStringGrid(Sender).ControlCount - 1 do
    if TStringGrid(Sender).Controls[i].ClassName = 'TInplaceEdit' then begin
      TEdit(TStringGrid(Sender).Controls[i]).Color := clRed;
      TEdit(TStringGrid(Sender).Controls[i]).Font.Color := clWhite;
      { Break; // брейк принципеально не нужен, ведь строка одна, а значит код и так закончится, а если у вас новый компонент и она не одна, то для надежности надо и остальные зацепить}
    end;
end;
Пихать лучше всего в GetEditText, так как именно он срабатывает при начале редактирования ячейки.
Lordar вне форума Ответить с цитированием
Старый 25.02.2013, 07:08   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Вижу возникли сложности?
Моё самолюбие уязвлено

На Lazarus'е вот так
Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState);
begin
  if (gdFocused in aState) and (StringGrid1.EditorMode) then begin
    StringGrid1.Editor.Color := clBlack;
    StringGrid1.Editor.Font.Color := clWhite;
  end;
end;

Последний раз редактировалось Sibedir; 25.02.2013 в 07:21.
Sibedir вне форума Ответить с цитированием
Старый 25.02.2013, 17:27   #7
Lordar
Новичок
Джуниор
 
Регистрация: 25.02.2013
Сообщений: 2
Лампочка Способов много, а компонент один...

Уважаемый Sibedir, я использую исключительно 7 энтерпрайз, а там таких свойств (StringGrid1.Editor) нету! Так что DrawCell тут вообще не применим, ибо опыты показали что он работает только с самим TStringGrid а не с TInplaceEdit в котором собственно и вводится текст.
Вот еще один хакерский пример (без поиска), на основе полиморфизма, Просто получаем сам компонент, и присваиваем цвет через свойство Color, а он сам все нарисует:
Код:
uses Mask;

type // Переопределяем классы для получения доступа к инкапсуляционным свойствам
  TheGrid = class(TCustomGrid);
  TheEdit = class(TCustomMaskEdit);

procedure TForm1.StringGrid15GetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: String);
var
  Editor: TheEdit;
begin
  Editor := TheEdit(TheGrid(Sender).InplaceEditor); // получаем внутренний компонент
  if Assigned(Editor) then Editor.Color := clRed; // присвоим цвет
  // тутже можно задавать и любые другие параметры строки ввода
end;
Lordar вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить цвет отрисовки, допустим, линий у stringGrid? TwiX Общие вопросы Delphi 3 29.02.2012 11:51
КАК ИЗМЕНИТЬ ЦВЕТ ФОНА (ПАСКАЛЬ) mistertvister Помощь студентам 2 19.12.2009 23:10
Как с помощью JavaScript изменить цвет фона ячеек в таблице,так что бы можно было выбрать цвет из списка Gotessa JavaScript, Ajax 1 09.05.2009 16:05
Можно ли как-нить изменить цвет отдельной ячейки в DBGride? 3lander БД в Delphi 2 10.10.2007 21:23