Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.04.2012, 22:41
Аватар для Mp3
Mp3 Mp3 вне форума
Новичок
 
Регистрация: 05.03.2012
Сообщения: 82
Репутация: 10
По умолчанию всем привет

хочу создать треугольник на форме и чтобы он крутился благодаря скрол бару....пока создал ток треугольник и то он не работает...
Цитата:
form1.Canvas.MoveTo(50,0);
form1.Canvas.LineTo(0,50);
form1.Canvas.LineTo(100,50);
form1.Canvas.LineTo(50,0);

но почему то треугольник не чертиться =(
подскажите в чем ошибка
я записываю код в Form1....

Последний раз редактировалось Mp3, 02.04.2012 в 23:01.
Ответить с цитированием
  #2  
Старый 02.04.2012, 23:10
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Попробуй записать по событию onPaint.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 02.04.2012, 23:13
Аватар для Mp3
Mp3 Mp3 вне форума
Новичок
 
Регистрация: 05.03.2012
Сообщения: 82
Репутация: 10
По умолчанию

не получается,мне кажется что где-то надо указать значение этих параметров который в скобках
Цитата:
(50,0)
чтобы программа считывала высоту и ширину формы а потом рисовала...я могу ошибаться %)
Ответить с цитированием
  #4  
Старый 02.04.2012, 23:23
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Удивился. Только что проверил.
Код:
procedure TForm4.FormPaint(Sender:TObject);
begin  
  Canvas.MoveTo(50,0);
  Canvas.LineTo(0,50);
  Canvas.LineTo(100,50);
  Canvas.LineTo(50,0);
end;
Ну и разумеется это привязано к событию onPaint. Работает.
Цитата:
чтобы программа считывала высоту и ширину формы а потом рисовала
Эти параметры в пикселях. (50,0) это 50 пикселей по X и 0 по Y относительно левого верхнего угла формы.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 02.04.2012 в 23:27.
Ответить с цитированием
  #5  
Старый 02.04.2012, 23:34
Аватар для Mp3
Mp3 Mp3 вне форума
Новичок
 
Регистрация: 05.03.2012
Сообщения: 82
Репутация: 10
Радость

а как его привязать к ScrollBar' у чтобы когда поварачиваю в разные стороны треугольник крутился
Ответить с цитированием
  #6  
Старый 02.04.2012, 23:42
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

У TScrollBar'а есть свойство Position. Можно поставить Min в 0, Max в 360 и считывать Position, считая его углом, после чего пересчитывать координаты вершин в зависимости от этого угла.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
Mp3 (02.04.2012)
  #7  
Старый 02.04.2012, 23:43
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Глянь этот топик.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 03.04.2012, 00:15
Аватар для Mp3
Mp3 Mp3 вне форума
Новичок
 
Регистрация: 05.03.2012
Сообщения: 82
Репутация: 10
Печаль

не очень помогло=(
ушел спать...может завтра до чего нить додумаюсь
Ответить с цитированием
  #9  
Старый 03.04.2012, 00:18
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Смотри внимательно, там полный ответ на твой вопрос. Более точная ссылка.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #10  
Старый 03.04.2012, 15:00
Аватар для Mp3
Mp3 Mp3 вне форума
Новичок
 
Регистрация: 05.03.2012
Сообщения: 82
Репутация: 10
Радость

чуть подправил код который мне дали
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    ScrollBar1: TScrollBar;
    procedure Scrollbar1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }

    procedure DrawRect;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x0, y0,z0       : Integer;
  cosa, sina   : Double;
  RectCooOrg,
  RectCooLast  : array[0..2] of TPoint;

const
  pi2 = 2 * pi;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  x0 := Image1.Width div 2;     
  y0 := Image1.Height div 2;
    z0 := Image1.Height div 2;


  RectCooOrg[0].X :=  -150;
  RectCooOrg[0].Y := - 75;
  RectCooOrg[1].X := -150;
  RectCooOrg[1].Y :=  75;
  RectCooOrg[2].X := 150;
  RectCooOrg[2].Y := -75;
  RectCooOrg[2].Z := 150;
  RectCooOrg[2].z := -75;

  RectCooLast := RectCooOrg;
cosa := cos(pi2 * Scrollbar1.Position / 360);
  sina := sin(pi2 * scrollbar1.Position / 360);

  DrawRect;
end;

procedure TForm1.Scrollbar1Change(Sender: TObject);
begin
cosa := cos(pi2 * Scrollbar1.Position / 360);
  sina := sin(pi2 * Scrollbar1.Position / 360);

  DrawRect;
end;

procedure TForm1.DrawRect;
var
  I : Integer;
begin
  Image1.Canvas.Pen.Color := clLime;

  for I := 0 to 4 do
  begin
    RectCooLast[i].X := Round(RectCooOrg[i].X * cosa - RectCooOrg[i].Y * sina + x0);
    RectCooLast[i].Y := Round(RectCooOrg[i].Y * cosa + RectCooOrg[i].X * sina + y0);
  end;
Image1.Canvas.Polyline(RectCooLast);
end;

end.
Админ: учимся корректно пользоваться тегами!

я хоть в правильно направление иду?

Последний раз редактировалось Admin, 05.04.2012 в 09:58.
Ответить с цитированием
  #11  
Старый 03.04.2012, 22:19
nixel nixel вне форума
Начинающий
 
Регистрация: 12.12.2011
Адрес: Москва
Сообщения: 150
Версия Delphi: XE2-U4
Репутация: 131
По умолчанию

как минимум ошибка в
Код:
for I := 0 to 4 do
begin
RectCooLast[i].X := Round(RectCooOrg[i].X * cosa - RectCooOrg[i].Y * sina + x0);
RectCooLast[i].Y := Round(RectCooOrg[i].Y * cosa + RectCooOrg[i].X * sina + y0);
end;
ибо массив у тебя RectCooLast : array[0..2] of TPoint;
работоспособность в целом не проверял.

z0 нигде не используется.

Последний раз редактировалось nixel, 03.04.2012 в 22:26.
Ответить с цитированием
  #12  
Старый 03.04.2012, 22:30
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

ТС забыл исправить с прямоугольника на треугольник:
Код:
var
  RectCooOrg,
  RectCooLast : array[0..3] of TPoint;
...

  RectCooOrg[0].X := -150;
  RectCooOrg[0].Y := - 75;
  RectCooOrg[1].X := -150;
  RectCooOrg[1].Y := 75;
  RectCooOrg[2].X := 150;
  RectCooOrg[2].Y := -75;
  RectCooOrg[3].X := -150;
  RectCooOrg[3].Y := -75;
...
  for I := 0 to 3 do
  begin
    RectCooLast[i].X := Round(RectCooOrg[i].X * cosa - RectCooOrg[i].Y * sina + x0);
    RectCooLast[i].Y := Round(RectCooOrg[i].Y * cosa + RectCooOrg[i].X * sina + y0);
  end;
  Image1.Canvas.Polyline(RectCooLast);
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #13  
Старый 04.04.2012, 01:04
Аватар для Mp3
Mp3 Mp3 вне форума
Новичок
 
Регистрация: 05.03.2012
Сообщения: 82
Репутация: 10
По умолчанию

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    ScrollBar1: TScrollBar;
    procedure Scrollbar1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }

    procedure DrawRect;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x0, y0      : Integer;
  cosa, sina   : Double;
  RectCooOrg,
  RectCooLast  : array[0..3] of TPoint;

const
  pi2 = 2 * pi;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  x0 := Image1.Width div 2;
  y0 := Image1.Height div 2;
  RectCooOrg[0].X := -120;
  RectCooOrg[0].Y := 65;
  RectCooOrg[1].X := 120;
  RectCooOrg[1].Y := 65;
  RectCooOrg[2].X := 10;
  RectCooOrg[2].Y := -120;
  RectCooOrg[3].X := -120;
  RectCooOrg[3].Y := 65;


  RectCooLast := RectCooOrg;
cosa := cos(pi2 * Scrollbar1.Position / 360);
  sina := sin(pi2 * scrollbar1.Position / 360);

  DrawRect;
end;

procedure TForm1.Scrollbar1Change(Sender: TObject);
begin
cosa := cos(pi2 * Scrollbar1.Position / 360);
  sina := sin(pi2 * Scrollbar1.Position / 360);

  DrawRect;
end;

procedure TForm1.DrawRect;
var
  I : Integer;
begin
  Image1.Canvas.Pen.Color := clblack;

  for I := 0 to 3 do
  begin
  RectCooLast[i].X := Round(RectCooOrg[i].X * cosa - RectCooOrg[i].Y * sina + x0);
    RectCooLast[i].Y := Round(RectCooOrg[i].Y * cosa + RectCooOrg[i].X * sina + y0);
  end;
  Image1.Canvas.Polyline(RectCooLast);
end;

end.
Админ: учимся корректно пользоваться тегами!

все работает но как всегда чет не до конца,когда запускаю программу треугольник вращается...но назад как вращается не видно...потому что он уже закрашен.....не подскажите что делать???
вот как это выглядит
линии накладываются друг на друга%)
как можно это исправить?

Последний раз редактировалось Admin, 05.04.2012 в 09:58.
Ответить с цитированием
  #14  
Старый 04.04.2012, 01:17
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Пропустил команду

имеется:
Код:
procedure TForm1.Scrollbar1Change(Sender: TObject);
begin
  cosa := cos(pi2 * Scrollbar1.Position / 360);
  sina := sin(pi2 * Scrollbar1.Position / 360);

  DrawRect;
end;

должно:
Код:
procedure TForm1.Scrollbar1Change(Sender: TObject);
begin
  Image1.Canvas.FillRect(Rect(0, 0, Width, Height));
  cosa := cos(pi2 * Scrollbar1.Position / 360);
  sina := sin(pi2 * Scrollbar1.Position / 360);

  DrawRect;
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
Mp3 (04.04.2012)
  #15  
Старый 04.04.2012, 01:27
Аватар для Mp3
Mp3 Mp3 вне форума
Новичок
 
Регистрация: 05.03.2012
Сообщения: 82
Репутация: 10
Радость

все работает=)
спасибо большое))
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:57.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025