Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

Не все ячейки красяться в stringgride   Найти похожие ветки 

 
sergey1126   (2005-11-25 03:41) [0]

Нужно красить текс, который выводиться в ячейках 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)... ничего не понимаю... помогите, плз.


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

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


 
ЮЮ ©   (2005-11-25 04:03) [2]

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


 
sergey1126   (2005-11-25 04:11) [3]

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


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

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


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

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


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

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


 
Separator ©   (2005-11-25 04:59) [7]

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


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


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

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


 
Separator ©   (2005-11-25 05:25) [9]


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;



 
Separator ©   (2005-11-25 05:30) [10]

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

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


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


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

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


 
ЮЮ ©   (2005-11-25 06:28) [12]

Вот только у 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;


 
ЮЮ ©   (2005-11-25 06:31) [13]

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

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


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


> 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 не красится...


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2005.12.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
2-1132691867
Stive
2005-11-22 23:37
2005.12.11
Изменение размеров панелей как в Total Commander


4-1128670772
Stanislav
2005-10-07 11:39
2005.12.11
как использовать CreateThread


14-1132587990
oldman
2005-11-21 18:46
2005.12.11
Вот тебе и раз...


2-1132426180
tigrenok
2005-11-19 21:49
2005.12.11
Помогите с именами компонентов!!!


5-1116412125
Другой Дмитрий
2005-05-18 14:28
2005.12.11
Каким образом можно отследить вставку и удаление компонент в ..