Текущий архив: 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.48 MB
Время: 0.035 c