VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Язык программирования Delphi
Работа с графикой, вывод текста под углом
:
Logo

Ты уже получил начальные знания о Delphi, и наверно уже смог написать свою первую прогу с помощью статьи "Язык программирования Delphi. Нестандартные окна". Сейчас мы продолжим уроки с обучения работы с графикой.
Logo
Рис 1. Пример выполнения программы

Во всех книгах по Delphi обучение начинается с программы "Hello world", а графика рассматривается в конце книги как сложный материал. Наша цель научиться программировать, а не поздороваться с миром. Сейчас ты убедишься, что ничего сложного в графике нет.

На рисунке 1 ты можешь увидеть пример работы программы. Вот именно это и будет делать наша прога.

Если ты ещё не вышел из прошлого проекта, то создай новый. Для этого выбери меню File и нажми пункт New Application . Теперь создай обработчик события OnCreate . В этой процедуре напиши следующее:

procedure TForm1.FormCreate(Sender: TObject);
begin
 index:=0;
end;

Index - это у нас будет счётчик, но его ещё надо объявить, поэтому иди в объявления private и напиши следующее:

private
 { Private-Deklarationen }
 index:Integer;
 cl:Boolean;

Теперь мы познакомимся с типами данных Delphi. Мы объявили с тобой две переменные: index и cl . Первая из них - это целое, знаковое число. Вторая - это буленовское, и может принимать значения TRUE или FALSE .

Основные приготовление закончены, и мы можем переходить непосредственно к программированию. Создай обработчик события для главной формы OnMouseDown . Для этого в Object Inspector нужно перейти в закладку Events и дважды щёлкнуть по этому событию.

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var  // Ключевое слово, после которого идут объявления 
 A: Integer; // Объявление переменной А - целое число.
begin
   A := Random(3600);
   CanvasSetAngle(Canvas, A / 10);
   Canvas.TextOut(X, Y, FormatFloat('##0.0', A/10)+'°');
end;

Рассмотрим, что у нас получилось. Обрати внимание, что после имени процедуры я написал слово VAR . После этого слова идут объявления переменных, которые будут видны только в этой процедуре и создаются при входе, а уничтожаются после выхода из процедуры. Все объявления, которые мы делали после слов private и public видны во всех процедурах типа Имя_Класса.Имя_Процедуры . Тут есть свои нюансы, которые мы рассмотрим по мере надобности.

Теперь рассмотрим текст процедуры. В первой строчке мы используем функцию Random , она возвращает случайное значение, но не больше чем число указанное в скобках. В нашем случае - это 3600.

Вторую строчку я опущу, а рассмотрим сразу третью. Canvas.TextOut - выводит текст на форме. Canvas - это свойство формы, которое отвечает за всё, что рисуется на ней. TextOut - выводит текст в Canvas.

procedure TextOut(
  X, Y: Integer; // X, Y позиция текста.
  const Text: string //Текст, который будет нарисован
);

В качестве текста я опять использовал процедуру: FormatFloat. Эта процедура переводит число с запятой (вещественное, или так сказать дробное) с учётом формата.

function FormatFloat(
 const Format: string; // Строка формата
Value: Extended // Число
): string;

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

Теперь возвращаемся ко второй строке. CanvasSetAngle - этой процедуры ещё нет, мы её должны написать. Я сейчас приведу весь текст программы, а потом мы рассмотрим эту процедуру отдельно.

unit Textrot1;
interface
uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, ExtCtrls;
type
  TForm1 = class(TForm)
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    index:Integer;
    cl:Boolean;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure CanvasSetAngle(C: TCanvas; A: Single);
var
  LogRec: TLOGFONT; // Объявляем переменную логического шрифта
begin
 GetObject(C.Font.Handle,SizeOf(LogRec),Addr(LogRec));
 LogRec.lfEscapement := Trunc(A*10);
 LogRec.lfOrientation := Trunc((A+10) * 100);
 C.Font.Handle := CreateFontIndirect(LogRec);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var A: Integer;
begin
   A := Random(3600);
   CanvasSetAngle(Canvas, A / 10);
   Canvas.TextOut(x, Y, FormatFloat('##0.0', A/10)+'°');
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 index:=0;
 Canvas.Brush.Style:=bsClear;
end;
end.

В качестве параметров мы передаём процедуре Canvas и угол разворота текста. Угол разворота - имеет значение Single - что означает вещественное (дробное). До этого имя процедур вместо нас писал Delphi. Эту процедуру тебе придётся вписывать своими руками, поэтому познакомимся с ней поближе.

procedure - зарезервированное слово, процедура.
CanvasSetAngle - имя процедуры

Дальше в скобках идут параметры, передаваемые в процедуру. Это означает, что у нас есть какое-то значение, мы его отдаём процедуре, которая может с ним работать. Обрати внимание, что это единственная процедура не выглядящая как Имя_Класса.Имя_Процедуры . Это означает, что наша процедура не относиться к классу TForm1 .

Я очень часто использую слово функция. Функция - это процедура, которая возвращает какое-то значение. Её объявление будет выглядеть как:

function HHH (Передаваемые параметры):Тип;
function - зарезервированное слово, функция.
HHH - имя процедуры
Тип - Тип возвращаемого значение. Например "integer".

Теперь перейдём к содержимому процедуры. Рассмотрим по частям первую строчку.

GetObject //Это функция возвращает информацию о графическом объекте
C.Font.Handle // Объект на который нужно получить значение.
SizeOf(LogRec)// Передаем размер возвращаемого значения
Addr(LogRec)// Передаём адрес возвращаемого значения

С помощью этой функции, мы получаем информацию о шрифте, используемом нами для рисования. Вторая и третья строчки этой процедуры изменяют значения полученной информации. Четвёртая функция записывает изменённую информацию.

Запусти получившееся приложение, и пощёлкай по форме мышкой. Когда наиграешься, закрой программу и я продолжу.

Теперь поставь на форме Timer , который находиться в закладке System . Создай для таймера обработчик события OnTimer и напиши в нём следующее:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
CanvasSetAngle(Canvas, index);
 Canvas.TextOut(100, 100, 'CyD Soft');
 index:=index+45;
 if index>=360 then
  begin
   index:=0;
   if cl then
    Canvas.Font.Color:=clBlack
   else
    Canvas.Font.Color:=clRed;
   cl:=not cl;
  end;
end;

Вот уже и закончился очередной урок программирования. На прощанье я напомню, что если ты что-то не понял, не огорчайся. Со временем всё станет ясно. В этой статье я тебе рассказал многое из того, что не говорил в прошлой. Я даю тебе информацию постепенно. Если я дам тебе сразу всё, то ты всё равно не запомнишь.

 Исходники примера забирай здесь


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©