Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

Не все ячейки красяться в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.043 c
4-1128578223
Stanislav
2005-10-06 09:57
2005.12.11
Как узнать имя компьютера?


11-1113674934
Dot
2005-04-16 22:08
2005.12.11
VCL, KOLForm & uses mirror


2-1132644446
Студент Антон
2005-11-22 10:27
2005.12.11
Книги. Полезные и бесполезные.


10-1109040291
rosl
2005-02-22 05:44
2005.12.11
строки из word


2-1132441298
Vadim14
2005-11-20 02:01
2005.12.11
доступ к PCI





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский