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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2012, 17:45   #1
akr_Nim
Новичок
Джуниор
 
Регистрация: 27.10.2012
Сообщений: 2
По умолчанию Delphi. Реализация технологии Drag-and-Drop для динамически созданных объектов

Рисую примитивный план здания. На форме имеется компонент ScrollBox, в котором, согласно условию, динамически создается Panel (основная площадь здания) с указанными размерами, т.е. Panel.Parent:=Scrollbox. Аналогично создаю комнаты/кабинеты, только в родители им ставлю Panel. Когда создаются комнаты (тоже TPanel), все складываются в кучу в верхнем левом углу. Нужна реализация "раскидывания" их по местам. В дальнейшем в комнатах будут расставляться компьютера (предполагаю SpeedButton'ы), и их тоже нужно будет раскидывать по комнате с использованием Drag-and-Drop. Прошу помощи у знающих людей. Заранее благодарю.

Код:
unit main;

interface

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

type
  TPanel = class (ExtCtrls.TPanel)
    public
      property Canvas; // взлом канваса
  end;

  TMainForm = class(TForm)
    Create_Project: TButton;
    PlaneH: TEdit;
    PlaneW: TEdit;
    Label1: TLabel;
    MainPanel: TScrollBox;
    add_room: TButton;
    RoomName: TEdit;
    RoomH: TEdit;
    RoomW: TEdit;
    PCCount: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    RoomCount: TEdit;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Button1: TButton;
    procedure add_roomClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    const ms = 30;
    procedure FormResize(Sender: TObject);
    procedure Create_ProjectClick(Sender: TObject);

  private
    plane : TPanel;
    room : array of TPanel;
    RC : integer;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.add_roomClick(Sender: TObject);
begin
room[RC] := TPanel.Create(Self);
room[RC].Parent := plane;
room[RC].Width := StrToInt(RoomW.Text)* ms;
room[RC].Height := StrToInt(RoomH.Text)* ms;
room[RC].ParentBackground := false;
room[RC].BevelWidth := 2;
room[RC].Dragging;
room[RC].DragMode := dmAutomatic;
room[RC].Color := clWhite;
RC := RC + 1;
end;

procedure TMainForm.Button1Click(Sender: TObject);
var
  bmp : TBitmap;
begin
bmp := TBitmap.Create;
bmp.Width := MainPanel.Width;
bmp.Height := MainPanel.Height;
MainPanel.PaintTo(bmp.Canvas, 0, 0);
bmp.SaveToFile('c:\test.bmp');
bmp.Free;
end;

procedure TMainForm.Create_ProjectClick(Sender: TObject);
begin
while MainPanel.ControlCount > 0 do
MainPanel.Controls[0].Free;
plane := TPanel.Create(Self);
plane.Parent := MainPanel;
plane.Width := StrToInt(PlaneW.Text)* ms;
plane.Height := StrToInt(PlaneH.Text)* ms;
plane.BevelWidth := 2;
plane.ParentBackground := false;
plane.Color := clPurple;
plane.DragOver(room[0], 0, 0, dsDragEnter, boolean);
RC := StrToInt(RoomCount.Text);
add_room.Enabled := True;
end;

procedure TMainForm.FormResize(Sender: TObject);
begin
MainPanel.Width := MainForm.Width - 200;
SetLength(room, 100);
end;

end.
PS: Гуглом пользовался, кучу форумов перерыл, Drag-and-Drop реализовывал на статических объектах, находил обработку событий динамическими объектами, но чтобы было и то и другое - не получается. Пытался написать внешнюю процедуру, и присвоить ее динамическим объектам, но Delphi ругается.
akr_Nim вне форума Ответить с цитированием
Старый 27.10.2012, 22:11   #2
akr_Nim
Новичок
Джуниор
 
Регистрация: 27.10.2012
Сообщений: 2
По умолчанию

Нашел ошибку: Создавая новую процедуру - присваивал ее методу. То есть вместо panel.OnMouseDown := MainPanelMouseDown писал panel.MouseDown := MainPanelMouseDown.
akr_Nim вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перетаскивание динамически созданных объектов kaizer131 Общие вопросы Delphi 13 15.06.2011 07:59
Сохранение динамически созданных объектов Marsel737 Общие вопросы Delphi 25 15.12.2009 14:24
Свойства динамически созданных объектов. Dorithur Общие вопросы Delphi 4 12.12.2009 15:35
Обработка событий динамически созданных объектов в С++ Builder Shafty Помощь студентам 1 26.02.2009 16:11