удаляем, они больше не нужны. Теперь добавляем на форму три "TrackBar". Задаем параметры:
TrackBar3: Left - 70, TrackBar4: Left - 200, TrackBar5: Left - 325
Затем выделяем все три и меняем параметры:
Top - 375, Frequency - 20, Max - 255, Min - 0, Orientation - trHorizontal
Теперь изменим параметры у "Label3", "Label4" и "Label5":
Label3: Left - 120, Label4: Left - 250, Label5: Left - 375
Затем выделяем все три и меняем параметры:
Top - 410, Caption - "0"
Добавляем на форму элемент "RadioGroup1" с параметрами:
Left - 465, Top - 375, Caption - " Мишень ", Columns - 2, Width - 160, Height - 60.
Затем нажимаем на параметр "Items", там появится кнопка с "…". Нажимаем на нее. В открывшейся
форме пишем в столбик: "Черная, Красная, Зеленая, Желтая". Пишется по одному слову в строке
и без ",". Все готово. Давайте разберемся, зачем мы это сделали. "TrackBar'ы" будут менять цвет.
Они отвечают за Красный, Зеленый и Синий цвет. Смешивая, их мы будем получать необходимый цвет
сетки для прицеливания. Давайте программировать! Создаем новую процедуру, которая будет отображать
сетку. Она будет называться "ImPik". Пишем в разделе "type":
procedure ImPik;
Нажимаем Ctrl+Shift+C. Делфи создаст заготовку для нашей процедуры. Пишем:
Procedure TForm1.ImPik;
Var
i, j: Integer;
PCol: TColor;
a: string;
begin
// Запоминаем текущий цвет пера. В конце процедуры, мы
// вернем его назад.
PCol := Image1.Canvas.Pen.Color;
// Меняем текущий цвет на цвет указанный при помощи
// трех составляющих (R,G,B)
// Эти составляющие берем из Label'ов. Которые в свою очередь
// берут цвет из TrackBar'ов
Image1.Canvas.Pen.Color := RGB(StrToInt(Label3.Caption),
StrToInt(Label4.Caption), StrToInt(Label5.Caption));
// Далее рисуем прямоугольник, ограничивающий зону обстрела
// Переносим начальную позицию пера в точку (10, 300)
Image1.Canvas.MoveTo(10, 300);
// Рисуем линию из текущей позиции до точки (559, 300)
// и автоматически переносим текущую позицию пера
Image1.Canvas.LineTo(559, 300);
Image1.Canvas.LineTo(559, 0);
Image1.Canvas.LineTo(10, 0);
Image1.Canvas.LineTo(10, 300);
// Другой вариант рисования прямоугольника
// Отличается от линий тем, что при рисовании
// стирается все, что находится "под ним"
// Image1.Canvas.Rectangle(10, 301, 560, 0);
// Рисуем прицельные дуги
for i := 1 to 20 do
begin
j := i * 30;
Image1.Canvas.Arc(10 - j, 300 - j, 10 + j, 300 + j, 550, 300, 10, 10);
end;
// Далее выводим цвет сетки в шестнадцатеричной форме
// Для начала стираем предыдущую надпись
Image1.Canvas.Pen.Color := clBtnFace;
Image1.Canvas.Rectangle(10, 309, 55, 325);
// Устанавливаем цвет пера, сохраненный в начале процедуры
Image1.Canvas.Pen.Color := MCol;
// Рисуем цель в виде эллипса, с центром в (х,у) и диаметром 20 пикселей
Image1.Canvas.ellipse(x, 300 - y, 20 + x, 300 - (y + 20));
// Формируем строку с шестнадцатеричным форматом числа цвета
a := IntToHex(TrackBar3.Position, 2) + IntToHex(TrackBar4.Position, 2) +
IntToHex(TrackBar5.Position, 2);
// Рисуем его на Image1'е
Image1.Canvas.TextOut(10, 310, a);
// Устанавливаем цвет пера, сохраненный в начале процедуры
Image1.Canvas.Pen.Color := PCol;
end;
Теперь давайте напишем процедуры, которые будет писать на "Лейблах" составляющие цветов.
Кликаем два раза по TrackBar3. Пишем:
procedure TForm1.TrackBar3Change(Sender: TObject);
begin
Label3.Caption := IntToStr(TrackBar3.Position);
ImPik;
end;
Аналогично для TrackBar4 и TrackBar5:
procedure TForm1.TrackBar4Change(Sender: TObject);
begin
Label4.Caption := IntToStr(TrackBar4.Position);
ImPik;
end;
procedure TForm1.TrackBar5Change(Sender: TObject);
begin
Label5.Caption := IntToStr(TrackBar5.Position);
ImPik;
end;
Теперь займемся цветом мишени. Он будет определяться при помощи "RadioGroup1". Там есть
четыре цвета на выбор. Для начала необходимо выбрать цвет по умолчанию. Это будет - черный.
Информация о выбранном пункте в "RadioGroup1" находится в параметре RadioGroup1.ItemIndex.
Замечу, что нумерация начинается с нуля. Поэтому, в инспекторе объектов присваиваем
ItemIndex = 0. Кликаем 2 раза на "RadioGroup1" и пишем обработчик:
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
// По умолчанию выставляем цвет = черному
MCol := ClBlack;
// Если выбран 2 пункт ("Красный"), то присваиваем этот цвет
if RadioGroup1.ItemIndex = 1 then
MCol := ClRed;
// Зеленый
if RadioGroup1.ItemIndex = 2 then
MCol := ClGreen;
// Желтый
if RadioGroup1.ItemIndex = 3 then
MCol := clYellow;
// Рисуем изменения
ImPik;
end;
Вот и все! Нажимаем F9 и смотрим, что получилось.
Как вы видите, при изменении цвета, заметно мерцание. Это нормально, т.к. мы непосредственно
рисуем на экран. На следующем уроки, мы переделам на вывод через буфер. Если у Вас возникли
вопросы, идеи, предложения или какие-либо мысли, пишите, не стесняйтесь!