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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2008, 16:50   #1
Witaliy
Форумчанин Подтвердите свой е-майл
 
Регистрация: 27.04.2008
Сообщений: 179
По умолчанию Перетаскивание обьектов

Как создать перемещение объектов и их выделения?
www.programmer.uaforums.net - Український форум програмістів.

www.satellite.ipsys.net - Український форум супутникового телебачення.
Witaliy вне форума Ответить с цитированием
Старый 27.04.2008, 17:08   #2
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

А каких именно объектов?
Манжосов Денис :) вне форума Ответить с цитированием
Старый 27.04.2008, 17:11   #3
Witaliy
Форумчанин Подтвердите свой е-майл
 
Регистрация: 27.04.2008
Сообщений: 179
По умолчанию

Компонентов
www.programmer.uaforums.net - Український форум програмістів.

www.satellite.ipsys.net - Український форум супутникового телебачення.
Witaliy вне форума Ответить с цитированием
Старый 27.04.2008, 17:35   #4
N!ckeL
Форумчанин
 
Регистрация: 29.03.2008
Сообщений: 300
По умолчанию

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    b1: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure b1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure b1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure b1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormClick(Sender: TObject);
  private
  dow:boolean;
  ox, oy:integer;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.b1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
form1.Repaint;
form1.Canvas.Rectangle(b1.Left-2, b1.Top-2, b1.Left+b1.Width+2, b1.Top+b1.Height+2);
dow:=true;
ox:=x;
oy:=y;
end;

procedure TForm1.b1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if dow=true then
 begin
   b1.Top:=b1.Top-(oy-y);
   b1.Left:=b1.Left-(ox-x);
   form1.Repaint;
 end;
end;

procedure TForm1.b1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
dow:=true;
end;

procedure TForm1.FormClick(Sender: TObject);
begin
dow:=false;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
dow:=false;
end;

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

end.
Доработать надо немного...
Карп преодолевший водопад становится драконом.
N!ckeL вне форума Ответить с цитированием
Старый 27.04.2008, 18:52   #5
Witaliy
Форумчанин Подтвердите свой е-майл
 
Регистрация: 27.04.2008
Сообщений: 179
По умолчанию

Спасибо всем.
www.programmer.uaforums.net - Український форум програмістів.

www.satellite.ipsys.net - Український форум супутникового телебачення.
Witaliy вне форума Ответить с цитированием
Старый 27.04.2008, 19:13   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Лучше сделать, систему. Типа класс-коллекции. Делаеш функции удаления, добавления, получения по имени String. Добавлять получается можно любой контрол, т.е. TControl. Каждый пункт можно устроить с помощью типа описателя и списка TList. Тип можно сделать, чтот на подобии
Код:
PItemObject = ^TItemObject; 
TItemObject = packed record
  Control: TControl;
end;

TControlClass = class of TControl;

// потом при добавления 
function Add(Name: String; ClassCtrl: TControlClass): Integer;
var
  p: PItemObject;
begin
  new(p);
  p^.Control := Result;
  p^.Control := ClassCtrl.Create(NIL);
  p^.Control.Parent := {ну вместо NIL ставим нужного родителя}NIL;
  p^.Control.Name := Name;
  TList.Add(p);
end;
остальные действия и так ясны... ну еще организуите типа,
по имени ищем как в TStringList - IndexOf ( короче перебираем все пункты и сравниваем имена )

ищем контрол от позиций парента
Код:
function ItemAt(X, Y: Integer): Integer;
var
  i: Integer;
begin
  Result := -1;
  for i:= 0 to TList.Count - 1 do
  if PtInRect(Point(X, Y), PItemObject(TList[i])^.Control.BoundsRect) then
  begin
    Result := i;
    Break;
  end;
Ну думаю идея ясна Так можно не замарачиваться над всей системой перетаскивания для каждого компонента. Ну а само движения описали выше
BOBAH13 вне форума Ответить с цитированием
Старый 27.04.2008, 19:22   #7
Witaliy
Форумчанин Подтвердите свой е-майл
 
Регистрация: 27.04.2008
Сообщений: 179
По умолчанию

И тебе спасибо
www.programmer.uaforums.net - Український форум програмістів.

www.satellite.ipsys.net - Український форум супутникового телебачення.
Witaliy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перетаскивание geniy Компоненты Delphi 9 12.01.2009 02:10
Создание обьектов во время работы программы Rusl92 Общие вопросы Delphi 4 11.08.2008 17:03
Использование обьектов UberStas Помощь студентам 2 13.06.2008 18:55
Создание обьектов файловой системы через делфи BETONOMESHALKA Общие вопросы Delphi 2 26.12.2007 22:17