Как изменить цвет букв delphi

Работа по теме: MET_UKAZ_Interfejsy_ASOIU_Lab_Prakt_230102_file. Глава: 3. Шрифты и графика. ВУЗ: ТУСУР.

У
ряда объектов из библиотеки визуальных
компонент есть свойство Canvas (канва),
которое предоставляет простой путь для
рисования на них. Эти объекты — TBitmap,
TComboBox, TDBComboBox, TDBGrid, TDBListBox, TDirectoryListBox,
TDrawGrid, TFileListBox, TForm, TImage, TListBox, TOutline,
TPaintBox, TPrinter, TStringGrid. Canvas является в свою
очередь объектом, объединяющим в себе
поле для рисования, карандаш (Pen),
кисть (Brush)
и шрифт (Font).
Canvas
обладает также рядом графических методов
: Draw,
TextOut, Arc, Rectangle
и др. Рассмотрим подробнее свойства и
методы объекта Canvas.

Использование
перьев

С
помощью перьев на канве рисуются линии..
Доступ к пкрьям осуществляется через
свойство Canvas.Pen
Для изменения
способа рисования линий следует
модифицировать свойства объекта пера:
Color,
Width,
Style,
и Mode.

Свойство
Color
определяет
цвет пера. В Delphi предусмотрены
предопределенные цветовые константы,
например, clRed,
clYellow соответствуют
красному и желтому цветам. Кроме того,
определены константы для представления
системных цветов экранных элементов
системы Win32. Например, константы
clActiveCaption
и
clHighliteText
соответствуют
цветам активных заголовков и выделенного
текста в данной системе Win32. Приведенная
ниже строка назначает перу канвы синий
цвет.

Canvas.Pen.Color
:= clBlue;

С
помощью пера можно рисовать линии,
отличающиеся друг от друга стилем,
который определяется свойством Style.
В таблице
показаны различные стили, которые можно
устанавливать для свойства
Pen.Style:

Стиль

Что рисуется

psClear

Невидимая линия

psDash

Линия, состоящая
из штрихов

psDashDot

Линия, состоящая
из чередующихся штрихов и точек

psDashDotDot

Линия, состоящая
из сочетания штрих-точка-точка

psDot

Линия, состоящая
из точек

psInsideFrame

Линия внутри
рамки замкнутой формы, определяющей
ограничивающий прямоугольник

psSolid

Сплошная линия

Следующая
строка демонстрирует, как изменить
стиль рисования пером:

Canvas.Pen.Stylel
:= psDashDot;

Свойство
Pen.Width
позволяет указать ширину линии
в пикселях, проводимую пером при
рисовании. При установке большего
значения перо рисует более толстую
линию.

На
заметку

Стиль
штриховых линий применяется для перьев
шириной, равной 1 пикселю. При установке
ширины, равной 2, перо будет рисовать
сплошную линию. Такое поведение
унаследовано от 16-разрядного GDI,
действия которого система Win32 эмулирует
в целях совместимости.

Использование
кисти

Если
перо (объект TPen)
позволяет рисовать на канве линии, то
с помощью кисти (объекта TBrush)
выполняется закрашивание областей и
фигур, нарисованных на этой канве. При
этом могут использоваться различные
цвета, стили и узоры.

Объект
TBrush
обладает тремя важными свойствами
Color,
Style
и BitMap,
которые определяют, как кисть будет
закрашивать поверхность канвы. Свойство
Color
определяет цвет кисти, Style
— узор
фона кисти, а BitMap
задает
растр, который можно использовать для
создания пользовательских орнаментов,
служащих фоном кисти.

Свойство
Style
кисти может
принимать одно из восьми допустимых
значений: bsSolid,
bsClear,
bsHorizontal,
bsVertical,
bcFDiagonal,
bsBDiagonal,
bsCross
и bsDiagCross.
По умолчанию
цвет кисти устанавливается равным
константе clWhite,
стиль — константе bsSolid,
а растр не задается. В вашей власти
изменять стандартные цвет и стиль работы
кисти при выполнении закрашивания
областей различными узорами.

Использование
шрифтов

С
помощью свойства Canvas.Font
можно выводить на канву текст, используя
любой из доступных в интерфейсе Win32
шрифтов. При этом существует возможность
изменять внешний вид помещаемого на
канву текста путем модификации такого
свойства шрифта, как Color,
Name,
Size,
Height
или Style.

Свойству
Font.Color
можно
присвоить любой определенный в Delphi
цвет. Например, с помощью следующей
строки можно получить шрифт красного
цвета:

Canvas.Font.Color
:= clRed;

Свойство
Name
предназначено
для указания имени шрифта Windows.
Так, используя следующую строку, в
качестве шрифта канвы можно установить
любой требуемый шрифт:

Canvas.Font.Name
:= ‘Times New Roman’;

Свойство
Canvas.Font.Size
задает размер шрифта в пунктах.

Свойство
Canvas.Font.Stile
представляет
собой множество, которое может состоять
из одного или произвольной комбинации
стилей, приведенных в таблице.

Значение

Стиль

fsBold

Полужирный

fsItalic

Курсив

fsUnderline

Подчеркивание

fsStrikeOut

Перечеркнутый
текст

Для
объединения двух стилей используйте
следующий синтаксис:

Canvas.Font.Style
:= [fsBold, fsItalic];

Для
выбора определенного шрифта и присвоения
его свойству Tmemo.Font
можно использовать объект TfontDialog:

If
FontDialog1.Execute then

Memo1.Font.Assign(FontDialog1.Font);

Тот
же результат будет достигнут, если
присвоить шрифт, выбранный с помощью
объекта TfontDialog,
свойству объекта Canvas,
отвечающему за шрифт:

Canvas.Font.Assign(FontDialog1.Font);

Кроме
того, шрифту объекта Canvas
можно присвоить отдельные атрибуты,
принадлежащие шрифту, выбранному с
помощью объекта TfontDialog:

Canvas.Font.Name
:= Font.Dialog1.Font.Name;

Canvas.Font.Size
:= Font.Dialog1.Font.Size;

Задание 1. Редактор
надписей

В
том месте окна, где был щелчок левой
кнопки мыши, появляется надпись. Текст
надписи, а также параметры шрифта (размер
букв, наклон, цвет текста и фона и т.д.)
задаются в диалоговом окне

Задание
2. Грифики функций

Программа
выводит по выбору пользователя график
одной из трех функций: прямая, парабола
или синусоида. В диалоговом окне задаются
параметры графика (коэффициенты a,b
для прямой и a,b,c
для параболы или синусоиды, расположение
графика, масштаб и т.д.).

Задание 3

Написать
проект, в котором был бы реализован
интерфейс для любого из численных
методов. В проекте обязательно использовать
графику.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Как можно изменить цвет текста в Edit’е?
Решить данную проблему пробовал как с использованием диалоговой панели «Цвет», так и с использованием диалогового окна «Шрифт»:

Код:

Var lf:LOGFONT;
     hParentDC:HDC;
     Font:HFONT;
     CF:TCHOOSEFONT;
     acrCustClr:array[0..15] of COLORREF;
     …
function WndProc(wnd:HWND; msg, wParam, lPapram:longint):longint; stdcall;
begin
result:=DefWindowProc(wnd, msg, wParam, lParam);
case msg of
WM_CREATE: begin
           hParentDC:=GetDC(Edit);
           lf.lfHeight:= -MulDiv( 10, GetDeviceCaps(hParentDC,LOGPIXELSY), 72);
           lf.lfWidth:= 0;
           lf.lfEscapement:= 0;
           lf.lfOrientation:=0;
           lf.lfWeight:= FW_NORMAL;
           lf.lfItalic:= 0;
           lf.lfUnderline:= 0;
           lf.lfStrikeOut:= 0;
           lf.lfCharSet:= ANSI_CHARSET;
           lf.lfOutPrecision:= OUT_TT_PRECIS;
           lf.lfClipPrecision:= CLIP_DEFAULT_PRECIS;
           lf.lfQuality:= DEFAULT_QUALITY;
           lf.lfPitchAndFamily:= DEFAULT_PITCH or FF_DONTCARE;
           lf.lfFaceName:=’Arial’;
           Font:=CreateFontIndirect(lf);
           Edit:=CreateWindowEx(0,’Edit’,»,WS_CHILD or WS_VISIBLE or ES_MULTILINE or
                                ES_AUTOVSCROLL or WS_VSCROLL, 0, 0, 0, 0, wnd,
                                HMENU(20), hInstance, nil);
           SendMessage(Edit, WM_SETFONT, integer(Font),MakelParam(0,1));
           SetFocus(Edit);

           //Инициализация диалога «Цвет»
           FillChar(CC, SizeOf(TCHOOSECOLOR),0);
           CC.lStructSize:=SizeOf(TCHOOSECOLOR);
           CC.hWndOwner:=wnd;
           CC.hInstance:=hInstance;
           CC.lpCustColors:=@acrCustClr;
           CC.Flags:=CC_FULLOPEN;

           //Инициализация диалога «Шрифт»
           FillChar(CF, SizeOf(TCHOOSEFONT),0);
           CF.lStructSize:=SizeOf(TCHOOSEFONT);
           CF.hWndOwner:=Wnd;
           CF.lpLogFont:=@lf;
           CF.Flags:=CF_SCREENFONTS or CF_EFFECTS;
           CF.hDC:=hParentDC;
           end;
WM_COMMAND: case wParam of
                      118: begin //Использование диалога «Цвет»
                             ChooseColor(CC);
                             CF.rgbColors:=CC.rgbResult;
                             Font:=CreateFontIndirect(CF.lpLogFont^);
                             PrevFont:=SelectObject(hParentDC, Font);
                       SendMessage(Edit, WM_SETFONT, Font, MakelParam(0, 1));
                             SetFocus(Edit);
                             end;
                      119: begin //Использование диалога «Шрифт»
                             ChooseFont(CF);
                             Font:=CreateFontIndirect(CF.lpLogFont^);
                             PrevFont:=SelectObject(hParentDC, Font);
       SendMessage(Edit, WM_SETFONT, integer(PrevFont),MakelParam(0,1));
                             SetFocus(Edit);
                             end;
                      end;
end;
end;

Диалог «Шрифт» изменяет шрифт текста. Цвет текста остаётся без изменений (чёрным). Даже явное задание цвета ни к чему не приведёт:

Код:

CF.rgbColors:=RGB(255, 0, 0);

Также пробовал решить проблему так:

Код:

SetTextColor(hParentDC, CF.rgbColors);

SetTextColor(hParentDC, CC.rgbResult);

Возникают проблемы и при изменении цвета фона Edit’a.
Цвет фона изменяю так:

Код:

function WndProc(wnd:HWND; msg, wParam, lParam:longint):longint; stdcall;
Begin
result:=DefWindowProc(wnd, msg, wParam, lParam);
case msg of
WM_COMMAND: case wParam of
                      …
                      117: begin
                             ChooseColor(CC);
                         SendMessage(Edit, WM_CTLCOLOREDIT, hParentDC, Edit);
                             SetFocus(Edit);
                             end;
                        end;
WM_CTLCOLOREDIT: begin
                             SetBkColor(HDC(wParam), CC.rgbResult);
                             result:=longint(CreateSolidBrush(CC.rgbResult));
                             end;
end;
End;

В этом случае цвет фона Edit’а изменяется, но возникают серьёзные проблемы с прорисовкой всего окна в случае многострочного редактора текста. При этом также следует учесть, что строка

Код:

result:=DefWindowProc(wnd, msg, wParam, lParam)

должна предшествовать обработке сообщений; в противном случае цвет фона не изменяется.

    unit DefEdit;

    interface

    uses

      SysUtils, Classes, Controls, StdCtrls, Graphics, Messages, JvStrUtils;

    type

      TDefEdit = class(TEdit)

      private

        FDefaultText: string;

        FColorDefaultText: TColor;

        FColorUserText: TColor;

        procedure SetDefText(aText: string);

        procedure SetDefColor(aColor: TColor);

        procedure Loaded(); override;

        procedure SetTextColor();

        { Private declarations }

      protected

        { Protected declarations }

      public

        procedure CMEnter(var Message: TCMEnter); message CM_ENTER;

        procedure CMExit(var Message: TCMExit); message CM_EXIT;

        procedure CMChanged(var Message: TMessage); message CM_CHANGED;

        constructor Create(aOwner: TComponent); override;

        { Public declarations }

      published

        property DefaultText: string read FDefaultText write SetDefText;

        property ColorDefaultText: TColor read FColorDefaultText write SetDefColor;

        property ColorUserText: TColor read FColorUserText write FColorUserText;

        { Published declarations }

      end;

    procedure Register;

    implementation

    procedure Register;

    begin

      RegisterComponents(‘My’, [TDefEdit]);

    end;

    { TDefEdit }

    procedure TDefEdit.CMChanged(var Message: TMessage);

    begin

      inherited;

      SetTextColor();

    end;

    procedure TDefEdit.CMEnter(var Message: TCMEnter);

    begin

      if Text = DefaultText then Text := »;

      inherited;

    end;

    procedure TDefEdit.CMExit(var Message: TCMExit);

    begin

      if IsEmptyStr(Text,[‘ ‘]) then Text := DefaultText;

      SetTextColor();

      inherited;

    end;

    constructor TDefEdit.Create(aOwner: TComponent);

    begin

      inherited;

      ColorDefaultText := clSilver;

      ColorUserText := clBlack;

    end;

    procedure TDefEdit.Loaded;

    begin

      inherited;

      if IsEmptyStr(Text,[‘ ‘]) then DefaultText := ‘Enter your text here’;

    end;

    procedure TDefEdit.SetDefColor(aColor: TColor);

    begin

      FColorDefaultText := aColor;

      Font.Color := aColor;

      SetTextColor();

    end;

    procedure TDefEdit.SetDefText(aText: string);

    begin

      FDefaultText := aText;

      if IsEmptyStr(Text,[‘ ‘]) then Text := aText;

    end;

    procedure TDefEdit.SetTextColor;

    begin

      if Text = DefaultText

        then Font.Color := ColorDefaultText

          else Font.Color := ColorUserText;

    end;

    end.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить цвет бровей навсегда
  • Как изменить цвет браузера фаерфокс
  • Как изменить цвет браузера гугл хром
  • Как изменить цвет браузера атом
  • Как изменить цвет борща

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии