Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не все ячейки красяться в stringgride [D5, XP]


sergey1126 ©   (2005-11-25 03:41:00) 

Нужно красить текс, который выводиться в ячейках stringgrid-а в определенный цвет. Написал следующий код:

   with TStringGrid(Sender),TStringGrid(Sender).Canvas Do
     begin
       FillRect(Rect);

       Font.Color:=255;
       TextOut(Rect.Left,Rect.Top,Cells[ACol,ARow]);
     end;

И что мы видим... Запускаем и ячейки с координамати 0,0 не перекашиваются.
Я выводил список "перекаршиваемых" ячеек в Memo1 - ячейка обрабатывается обработчиком, но цвета не меняет.
Но если поместить мышь в стрингрид и щелкнуть куда-нить, то ячейка (0,0) краситься. Причем обработчик вызываеться ТОЛЬКО для одной этой ячейки (0,0)... ничего не понимаю... помогите, плз.


sergey1126   (2005-11-25 07:00:00) [1]

О. Похоже сделал. Надо просто руками вызывать событие onSelectCell для каждого стрингрида с координатами 0,0 при запуске программы :)

ВСЕМ ОГРОМНОЕ СПАСИБО!!!!!!


sergey1126   (2005-11-25 06:54:00) [2]


> procedure TForm1.StringGrid1SelectCell(Sender: TObject;
> ACol,
>  ARow: Integer; var CanSelect: Boolean);
> begin
>  // здесь определяем цвет для встроенного редактора
>  if ARow = 0 then
>    TStringGridHack(Sender).Font.Color := clRed
>  else
>    TStringGridHack(Sender).Font.Color := clGreen;
> end;
>

Это не совсем то. Да, при редактировании цвет такой какой указано тут. Но при запуске программы все равно ячейка 0,0 не красится...


ЮЮ   (2005-11-25 06:31:00) [3]

TStringGridHack(Sender) читать как TStringGrid(Sender)

(Hack нужен был для доступа к InplaceEditor)


ЮЮ   (2005-11-25 06:28:00) [4]

Вот только у InPLaceEditor нет Font, т.к. он создается с тем же Font, что и сам StringGrid.

А так как StringGrid.Font-ом можно пренебречь, то и переопределять его в OnSelectCell, например:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
  with TStringGrid(Sender),TStringGrid(Sender).Canvas Do
    begin
      FillRect(Rect);
      // здесь определяем цвет для ячейки без редактора
      if ARow = 0 then
        Font.Color := clRed
      else
       Font.Color := clGreen;
      TextOut(Rect.Left,Rect.Top,Cells[ACol,ARow]);
    end;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
 ARow: Integer; var CanSelect: Boolean);
begin
  // здесь определяем цвет для встроенного редактора
 if ARow = 0 then
   TStringGridHack(Sender).Font.Color := clRed
 else
   TStringGridHack(Sender).Font.Color := clGreen;
end;


sergey1126   (2005-11-25 05:50:00) [5]


> Все даже еще проще:
>
>  TInGrid = class(TStringGrid)
>  public
>      property InplaceEditor;
>  end;

Объясни, плз, мне, дураку такому, куда это вставлять и что с этим делать?
Правильно ли я все понял:
Удаляем все прежние стрингриды с формы. Вместо них в рантайме создаем объекты TInGrid-ы, которые являються наследниками от TSTringGrid-а и имеют дополнительное своейство - InPlaceEditor. И в последствии у этого InplaceEditor-а меняем шрифт через InGrid1.InPLaceEditor.Font.Color:=255;


Separator   (2005-11-25 05:30:00) [6]

Все даже еще проще:

 TInGrid = class(TStringGrid)
 public
     property InplaceEditor;
 end;


Separator   (2005-11-25 05:25:00) [7]


type
 TInGrid = class(TStringGrid)
 private
     function GetInplaceEditor: TInplaceEdit;
 public
     property InplaceEditor: TInplaceEdit read GetInplaceEditor;

 end;

implementation

{ TInGrid }

function TInGrid.GetInplaceEditor: TInplaceEdit;
begin
   Result:= inherited InplaceEditor
end;


sergey1126   (2005-11-25 05:02:00) [8]


> Как изменить цвет текста в InplaceEdit

Впринципе верно. А как это сделать? :)


Separator   (2005-11-25 04:59:00) [9]

тут надо в другую сторону копать.
Я так понимаю, что при включенном goAlwaysShowEdit постоянно запущен InplaceEditor, а в самой ячейке все нормально красится.
Теперь вопрос нужно озвучить так: Как изменить цвет текста в InplaceEdit


sergey1126   (2005-11-25 04:24:00) [10]

Нет. Кисть не менял. Да он же сначал очищаеться, а потом ставит шрифт в нужный цвет...


Германн   (2005-11-25 04:22:00) [11]

FillRect(Rect);
Выполняется текущей кистью. Ты что-нибудь предпринял, чтобы её изменить?
Ты что-нибудь предпринял, чтобы изменить Pen.Color?


sergey1126   (2005-11-25 04:21:00) [12]

Походу это где-то в программе надо смотреть - сейчас создал новый стрингрид, поместил туда текст - все краситься как надо.
Сравнение привело к следующему - данный эффект появляется после включения goAlwaysShowEditor. Как быть? Данная опция мне нужна (что бы редактировать ячейки)....


sergey1126   (2005-11-25 04:11:00) [13]

Да, в OnDrawCell. Отключил DefaultDrawing - никакого эффекта.


ЮЮ   (2005-11-25 04:03:00) [14]

Надеюсь код написан в обрабрьчике OnDrawCell гида?
Для чистоты отключи DefaultDrawing


serge1126   (2005-11-25 04:01:00) [15]

Корпаюсь дальше. Как я понял, данная проблеема получается из-за того, что по умолчаю, после "появления" stringgrid-а, поле 0,0 выделено (ну не как текст, а вся ячейка другим цветом). После помещения туда текста выделение пропадает, но текст не красится.
Можно сделать первую колонку "невидимой", думаю поможет. Есть более корректный способ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо