Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Delphi. Реализация технологии Drag-and-Drop для динамически

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
akr_Nim



Зарегистрирован: 27.10.2012
Сообщения: 2

СообщениеДобавлено: Сб Окт 27 2012 20:24    Заголовок сообщения: 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
Сообщения: 2

СообщениеДобавлено: Сб Окт 27 2012 21:10    Заголовок сообщения: Ответить с цитатой

Нашел ошибку: Создавая новую процедуру - присваивал ее методу. То есть вместо panel.OnMouseDown := MainPanelMouseDown писал panel.MouseDown := MainPanelMouseDown.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...