Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2010, 05:42   #1
Igoreha010
Пользователь
 
Регистрация: 11.02.2010
Сообщений: 15
По умолчанию Работа с графикой в delphi

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Timer2: TTimer;

    procedure FormActivate(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;
const
dx=1;
var
Form1: TForm1;
x,y: integer;
r,g,b:integer;
i:integer;
buf2:tcolor;
implementation


{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
r:=0;
g:=0;
b:=0;
x:=-600;
y:=1200;
Timer1.Interval := 25 ;
Timer2.Interval := 15;
end;


procedure TForm1.Timer2Timer(Sender: TObject);
var
buf:tcolor;
begin
with form1.canvas do
begin
if y>380 then
y:=y-1;
if y>300 then
y:=y-1;
if y>200 then
y:=y-1;
if y>100 then
y:=y-1;
if x<750 then
x:=x+dx;
if x<300 then
x:=x+dx;
if x<200 then
x:=x+dx;
if x<100 then
x:=x+dx;



{brush.Color:=rgb(60,i,0); }
Ellipse(x,y,x+300,y+200);
pen.Color:=rgb(80,i,0);

Ellipse(x+190,y+20,x+180,y-30);

Ellipse(x+200,y+20,x+190,y-30);



MoveTo(x+100,y+100);
LineTo(x-100,y+100);

MoveTo(x+50,y+50);
LineTo(x-50,y-50);
LineTo(x-100,y-50);
LineTo(x- 150,y +75);
LineTo(x+ 50,y +100);



MoveTo(x+50,y+150);
LineTo(x-50,y+250);
LineTo(x-100,y+250);
LineTo(x-100,y+100);


MoveTo(x+300,y+100);
LineTo(x+250,y+150);

end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if r<171  then
  begin
  r:=r+1;
  if r>111 then
  r:=r+1;
  end;
if g<208 then
  begin
  g:=g+1;
  if ((g>100) and (g<160)) then
  g:=g+1 ;
  end;
if ((b>50)and (b<150))then
  b:=b+1;
if b<255 then
b:=b+1;
form1.Color:=rgb(r,g,b);
if b>253 then
b:=b-2;
end;
схематично изображенная рыбка... помогите раскрасить, а то вот на моменте раскраски я застрял

Последний раз редактировалось Stilet; 16.11.2010 в 08:35.
Igoreha010 вне форума Ответить с цитированием
Старый 16.11.2010, 08:37   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Области обведенные линиями (MoveTo, LineTo) закрасить нельзя.
Для заполнения цветом не регулярных фигур нужно создавать для них регионы.
Примерно так:
Код:
procedure TForm1.FormPaint(Sender: TObject);
var
  Rgn : HRGN;
  Can: TControlCanvas;
  arr : array[0..2] of TPoint;
begin
  arr[0] := Point(10, 10);
  arr[1] := Point(50, 40);
  arr[2] := Point(20, 70);

  Can:= TControlCanvas.Create;
  Can.Control := self;
  try
    Rgn := CreatePolygonRgn(arr, 3, Alternate);
    Can.Brush.Color:=clBlue;
    FillRgn(Can.Handle, Rgn, Can.Brush.Handle);
  finally
    Can.Free;
    DeleteObject(Rgn);
  end;
end;
Создается регион по тем же точкам, что используются при отрисовки фигур с помощью методов MoveTo, LineTo.
Одно другому не мешает: Регион для заполнения цветом, линии для обводки фигуры по периметру.
Особо обратить внимание, на то что при заполнении массива координатами вершин фигуры, ни одна из точек не должна повторяться. Т.е. регион должны быть не замкнутым - Windows замыкает последнюю вершину региона с первой самостоятельно.
Скандербег вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с графикой в С# Ksanfur Помощь студентам 1 16.04.2010 23:39
Работа с графикой! Gladiator Фриланс 6 10.03.2010 18:47
Работа с графикой в Delphi AlterProger Помощь студентам 3 20.01.2010 15:59
работа с графикой aiktz Помощь студентам 0 08.12.2009 17:51
Работа с графикой (Delphi) Xarm Помощь студентам 5 16.10.2009 14:16