Статьи Королевства Дельфи


Ну, если у Вас все готово - продолжим.


Ниже приведена иерархия классов GDI+, опубликованная в статье Виталия Брусенцева. Там же можно прочесть некоторые подробности о классах, ее составляющих.

Итак для начала подключим заголовочные файлы GDI+ в uses модуль вашей программы

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ComCtrls, ExtCtrls, ToolWin, GDIPAPI,GDIPOBJ; Как видите их всего два - GDIPAPI,GDIPOBJ; Продолжим , инициализируем библиотеку к работе - Для начала опишем ее var graphicsGDIPlus : TGPGraphics;

как и было раньше заявлено в конструкторе объекта TGPGraphics требуется контекст устройства (DC) куда библиотека будет пере направлять всю графику. Теперь можно и нарисовать что-то в данном примере (см. архив GDIDemo) , в обработчик события OnPaint объекта PaintBox мы выведем , как и всегда при работе с новым языком или библиотекой следующий, знакомый каждому программисту текст "Hello GDI+" четырьмя разными стилями - обычным без сглаживания, обычным с сглаживанием, с градиентной заливкой, с текстурной заливкой и под углом 45 градусов.

procedure TForm1.PaintBox1Paint(Sender: TObject); Const StrHello = 'Hello GDI+'; var R : TRect; FontFamily : TGPFontFamily; Font : TGPFont; SolidBrush : TGPSolidBrush; // Заливка непрерывным цветом GradientBrush : TGPLinearGradientBrush; // Заливка линейным градиетом TextureBrush : TGPTextureBrush; // Заливка текстурой градиетом Image : TGPImage; // Объект - Изображение Matrix : TGPMatrix; // Матрицы begin graphicsGDIPlus := TGPGraphics.Create(PaintBox1.Canvas.Handle); // Имя шрифта FontFamily := TGPFontFamily.Create('Times New Roman'); // Шрифт Font := TGPFont.Create(FontFamily, 32, FontStyleRegular, UnitPixel); // Создаем объект для непрерывной заливки SolidBrush := TGPSolidBrush.Create(MakeColor(255, 0, 0, 255)); // Рисование текста без антиалиасинга с закраской синим цветом // Установка стиля отрисовки текста - TextRenderingHintSingleBitPerPixel graphicsGDIPlus.SetTextRenderingHint(TextRenderingHintSingleBitPerPixel); graphicsGDIPlus.DrawString(StrHello, -1, Font, MakePoint(1, 10.0), solidBrush); // Рисование текста c антиалиасингом с закраской синим цветом // Установка стиля отрисовки текста - TextRenderingHintAntiAlias graphicsGDIPlus.SetTextRenderingHint(TextRenderingHintAntiAlias); graphicsGDIPlus.DrawString(StrHello, -1, Font, MakePoint(1, 40.0), solidBrush); // Рисование текста c антиалиасингом с закраской градиентом R.X := 1; R.Y := 1; R.Width := 100; R.Height := 40; // Создаем объект для градиентной заливки GradientBrush := TGPLinearGradientBrush.Create(R,MakeColor(255, 255, 255, 255),MakeColor(255, 0, 0, 255),LinearGradientModeForwardDiagonal); graphicsGDIPlus.SetTextRenderingHint(TextRenderingHintAntiAlias); graphicsGDIPlus.DrawString(StrHello, -1, Font, MakePoint(1, 70.0), GradientBrush); // Рисование текста c антиалиасингом с закраской текстурой // Шрифт заного создаем Font.Free; Font := TGPFont.Create(FontFamily, 70, FontStyleRegular, UnitPixel); Image := TGPImage.Create('01.jpg'); TextureBrush := TGPTextureBrush.Create(image); graphicsGDIPlus.SetTextRenderingHint(TextRenderingHintAntiAlias); graphicsGDIPlus.DrawString(StrHello, -1, Font, MakePoint(1, 100.0), TextureBrush); // Рисуем под углом - используем трансформацию // Шрифт заного создаем Font.Free; Font := TGPFont.Create(FontFamily, 32, FontStyleRegular, UnitPixel); graphicsGDIPlus.RotateTransform(-45); // производим graphicsGDIPlus.DrawString(StrHello, -1, Font, MakePoint(-200, 200.0), TextureBrush); graphicsGDIPlus.ResetTransform; // сбрасываем // Не забудьте высвободить память Image.Free; GradientBrush.Free; TextureBrush.Free; SolidBrush.Free; graphicsGDIPlus.Free; end;

Итак, для начала не плохо. В следующей статье мы разберем вывод примитивов, вывод графики, использование графических контейнеров. Вот в принципе и все, набор классов библиотеки прост и очевиден, ничего особо сложного в нем нет, но для более подробной информации по библиотеке GDI+ советую обратится на сайт альма-матер Microsoft или запастить демками с того-же

Скачать:

  • (241K)
  • (213K)

С уважением к коллегам, .






Начало  Назад  Вперед