Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Изменить цвет шрифта выделенной ячейки сетки

Delphi , Графика и Игры , Шрифты

Изменить цвет шрифта выделенной ячейки сетки

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  Question: 
  How do I change the cell font color in a TDBgrid 
  I only want to change the individual cell that is clicked on! 
  (while in the edit mode) 

  Answer: 
  Since it is the InplaceEditor control that is displayed when the cell 
  is in edit mode you have to change this controls Color. Getting at it 
  is a bit ugly since the InplaceEditor property of TCustomGrid 
  (which TDBGrid inherits) is protected and the Color property of 
  TCustomMaskedit (from which TInplaceEditor inherits) is also protected. 
  The following works for a TStrinGrid. I used the grids OnGetEditMask event here 
  to have a place where the inplace editor is guaranteed to exist. 
  For a TDBGrid you could probably use OnColEnter. 
   
   
  Frage: 
  Wie дndere ich die Farbe der aktuellen Zelle eines Stringgrids oder TDBGrids ? 
   
  Antwort: 
  Der InplaceEditor wird angezeit, wenn eine Zelle im Editiermodus ist. 
  Es muss also dessen Farbe geдndert werden. Dies kann ьber eine "Cracker"-Klasse 
  erreicht werden. 
}

 type
   TForm1 = class(TForm)
     {...}
     procedure StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer;
       var Value: string);
     procedure DBGrid1ColEnter(Sender: TObject);
   end;

 {...}

 uses
   Mask;

 type
   TGridCracker = class(TCustomGrid);
   TEditorCracker = class(TCustomMaskEdit);

 procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol,
   ARow: Integer; var Value: String);
 var
   editor: TEditorCracker;
 begin
   editor := TEditorCracker(TGridCracker(Sender).InplaceEditor);
   if Assigned(editor) then
     editor.Color := clYellow;
 end;

 procedure TForm1.DBGrid1ColEnter(Sender: TObject);
 var
   editor: TEditorCracker;
 begin
   editor := TGridCracker(TGridCracker(Sender).InplaceEditor);
   if Assigned(editor) then
     editor.Color := clGreen;
 end;

Переведенный текст:

Код, предоставленный в этом разделе, изменяет цвет шрифта ячейки в TDBGrid или TStringGrid, когда она редактируется. Код создает custom-класс TEditorCracker, который наследуется от TCustomMaskEdit, которая является базовой классом для inplace-редактора, используемого этими сетками.

Процедура StringGrid1GetEditMask - это обработчик события OnGetEditMask сетки, и она изменяет цвет шрифта inplace-редактора, когда ячейка редактируется. Процедура DBGrid1ColEnter - это обработчик события OnColEnter сетки, и она изменяет цвет шрифта inplace-редактора, когда колонка вводится.

Вот улучшенный код с комментариями:

unit Unit1;

interface

uses
  Forms,
  Grids,
  Mask;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    DBGrid1: TDBGrid;
    procedure StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: string);
    procedure DBGrid1ColEnter(Sender: TObject);
  end;

implementation

type
  TGridCracker = class(TCustomGrid); // не используется в коде
  TEditorCracker = class(TCustomMaskEdit);

procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: String);
var
  editor: TEditorCracker;
begin
  editor := TEditorCracker(TStringGrid(Sender).InplaceEditor); // получить inplace-редактор
  if Assigned(editor) then // проверить, если редактор присвоен
    editor.Color := clYellow; // изменить цвет шрифта на желтый
end;

procedure TForm1.DBGrid1ColEnter(Sender: TObject);
var
  editor: TEditorCracker;
begin
  editor := TEditorCrackBar(TDBGrid(Sender).InplaceEditor); // получить inplace-редактор
  if Assigned(editor) then // проверить, если редактор присвоен
    editor.Color := clGreen; // изменить цвет шрифта на зеленый
end;

end.

Обратите внимание, что класс TGridCracker не используется в этом коде и может быть удален. Кроме того, комментарий о использовании события OnGetEditMask для TDBGrid неправильный, потому что TDBGrid не имеет события OnGetEditMask. Вместо этого вы можете использовать событие OnColEnter, чтобы изменить цвет шрифта inplace-редактора, когда колонка вводится.

Более элегантное решение - создать custom-класс inplace-редактора, который наследуется от TCustomMaskEdit и переопределяет свойство Color, чтобы изменить его поведение. В этом случае вы можете избежать использования класса TEditorCracker и упростить код. Вот пример:

type
  TCustomEditor = class(TCustomMaskEdit)
  protected
    procedure SetColor(Color: TColor); override;
  end;

implementation

procedure TCustomEditor.SetColor(Color: TColor);
begin
  inherited Color := Color;
end;

Вы можете использовать этот custom-класс inplace-редактора в свойстве inplace-редактора сетки:

StringGrid1.InplaceEditor := TCustomEditor.Create(nil);
DBGrid1.InplaceEditor := TCustomEditor.Create(nil);

В этом случае вам не нужно создавать отдельный класс для inplace-редактора, и вы можете изменить его поведение легко.

В статье описывается, как изменить цвет шрифта выделенной ячейки сетки TDBgrid или TStringGrid в режиме редактирования.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Шрифты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 17:51:17/0.0034539699554443/0