![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не все ячейки красяться в 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 выделено (ну не как текст, а вся ячейка другим цветом). После помещения туда текста выделение пропадает, но текст не красится.
Можно сделать первую колонку "невидимой", думаю поможет. Есть более корректный способ?