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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2012, 20:38   #1
Sapsanbl4
 
Аватар для Sapsanbl4
 
Регистрация: 29.01.2012
Сообщений: 7
Радость Delphi. Drag&Drop треугольник

Уважаемые форумчане.
Помогите мне пожалуйста с реализацией механизма Drag&Drop в программе.

Задача: Определить тип треугольника по его сторонам (не существует, прямоугольный, равносторонний и т.д). Три Edit'a (для ввода длин сторон) и label (вывод результата).

Эту задачу я сделал за пол-часа, а впереди еще 2 недели практики. Появилась идея нарисовать треугольник так, что бы его можно было "таскать его за углы" и программа все так же определяла вид треугольника. Идея идеей, но как реализовать не знаю. Прошу помощи

Последний раз редактировалось Sapsanbl4; 29.01.2012 в 20:41.
Sapsanbl4 вне форума Ответить с цитированием
Старый 29.01.2012, 21:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю такую схему:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var b:boolean;
  Form1: TForm1;
 a:array[1..3,1..2] of integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 a[1,1]:=10;a[1,2]:=10;
 a[2,1]:=50;a[2,2]:=500;
 a[3,1]:=500;a[3,2]:=100;

end;

procedure TForm1.FormPaint(Sender: TObject);
var i:integer;
begin
 Canvas.MoveTo(a[1,1],a[1,2]);
 for i:=1 to 3 do begin
   Canvas.LineTo(a[i,1],a[i,2]);
 end;
 Canvas.LineTo(a[1,1],a[1,2]);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

begin
 b:=true;

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var i:integer;
begin
 if b then begin
    for i:=1 to 3 do begin
    if (abs(x-a[i,1])<50)or(abs(y-a[i,2])<50) then begin
      a[i,1]:=x;
      a[i,2]:=y;
      Repaint;
      exit;
    end;
   end;
 end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
b:=false;
end;

end.
Идея ясна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.01.2012, 22:30   #3
Sapsanbl4
 
Аватар для Sapsanbl4
 
Регистрация: 29.01.2012
Сообщений: 7
По умолчанию

В общих чертах да. Но есть еще один глупый вопрос. Какой компонент нужно кинуть на форму? Или рисует в форме?
Sapsanbl4 вне форума Ответить с цитированием
Старый 29.01.2012, 22:50   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Или рисует в форме?
Именно. Ничего стороннего.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.01.2012, 22:55   #5
Sapsanbl4
 
Аватар для Sapsanbl4
 
Регистрация: 29.01.2012
Сообщений: 7
По умолчанию

Хм... Только вот не рисует у меня в форме. Попробывал другие примеры, наподобии этого - та же история. С чем может быть связано?
Sapsanbl4 вне форума Ответить с цитированием
Старый 30.01.2012, 01:43   #6
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

http://dl.dropbox.com/u/41449615/Triangle.rar
Вот для примера реализация
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 30.01.2012, 09:01   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
С чем может быть связано?
С тем что ты тупо вставил код, забыв указать в Object Inspector-e события, описанные в коде.
или так:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
 a[1,1]:=10;a[1,2]:=10;
 a[2,1]:=50;a[2,2]:=500;
 a[3,1]:=500;a[3,2]:=100;

 onpaint:=FormPaint;
 onmousemove:=FormMouseMove;
 onmousedown:=FormMouseDown;
 onmouseup:=FormMouseUp;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.01.2012, 10:46   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
    if (abs(x-a[i,1])<50)or(abs(y-a[i,2])<50) then begin
а я бы, кстати, уменьшил величину "погрешности", по которой определяется, за какую вершину треугольника "схватились" мышкой.. иначе, если расстояние между вершинами будет меньше 50, перетаскивать можно будет только первую вершину...
думаю, что погрешности abs(...)<5 будет вполне достаточно.

код не проверял, пишу исключительно по интуиции...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.01.2012, 16:36   #9
Sapsanbl4
 
Аватар для Sapsanbl4
 
Регистрация: 29.01.2012
Сообщений: 7
По умолчанию

Язык начал изучать совсем недавно, многого еще не знаю.
Так что
Цитата:
С тем что ты тупо вставил код, забыв указать в Object Inspector-e события, описанные в коде.
да ты прав
Сейчас буду сидеть, изучать код. Большое спасибо Stilet, Zer0 и Serge_Bliznykov за помощь.
Sapsanbl4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WinForms PictureBox VC++ Drag&Drop _Alerter_ Windows Forms 4 27.05.2011 10:38
delphi... drag & drop vicvic90 Помощь студентам 2 01.05.2011 19:11
Drag&Drop в Delphi Ruska882009 Компоненты Delphi 4 13.03.2011 02:42
Нужна помощь (Drag-And-Drop & Drag-Abd-Dock)) Arkuz Общие вопросы Delphi 1 18.04.2009 00:15
Drag&Drop по сети в Delphi vovan-brn Помощь студентам 0 28.05.2008 23:12