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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2010, 11:55   #11
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

DIgorevich в image(э) handle(a) нет
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 17.08.2010, 13:14   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Господа, все гораздо проще чем кажется.
Достаточно выставить для Image DragMode:=dmAutomatic и DragKind:=dkDock
А для СкроллБоксов Docksite:=true как они сами будут подхватывать в себя таскаемое изображение.
Ферштеен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.08.2010, 13:56   #13
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Цитата:
Ферштеен?
Ферштеен тока есть один минус во первых тоскаеться одна рамка, во вторых когда щёлкаешь двойным щелчком то он перетаскивается на форму.
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 17.08.2010, 14:36   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
во первых тоскаеться одна рамка
Ну эт механизм докирования. тут нчего не поделаешь. Иначе пиши свой собственный механизм.
Цитата:
когда щёлкаешь двойным щелчком то он перетаскивается на форму.
Не на форму а на специальную плавающую панель.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.08.2010, 15:20   #15
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

А что простые вещи уже не работают:
Код:
var
  Form1: TForm1;
  moving:Boolean;
implementation

{$R *.dfm}

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

procedure TForm1.img1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  var
    p:TPoint;
begin
if moving then
begin
  GetCursorPos(p);
  img1.Top:=p.Y-img1.Height;
  img1.Left:=p.x-img1.Width;
end;
end;

procedure TForm1.img1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  moving:=false;
end;
Дальше от этого можно скакать... центрировать курсор и позицию соответственно.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 17.08.2010, 18:11   #16
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Можно еще проще, в MouseMove из параметра Shift: TShiftState можно узнать нажата ли мыша или нет:
if ssLeft in Shift ...
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 17.08.2010, 18:15   #17
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Цитата:
А что простые вещи уже не работают:
Ну я почти так и делал вот смотрите тырк
Воображение важнее, чем знания. (Albert Einstein)

Последний раз редактировалось dmitriegorovih; 18.08.2010 в 08:55.
dmitriegorovih вне форума Ответить с цитированием
Старый 19.08.2010, 07:43   #18
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Вроде получилось.
Тока осталось одно, как сделать чтобы image скажем так ”ходил” поверх тока этих двух скроллбоксов?
Код:
Procedure TForm1.ScrollBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
//
image1.Left:=(image1.Left+x)-round(image1.Width/2);
image1.Top:=(image1.Top+y)-round(image1.Height/2);
end;
P.S. Для модераторов если можно то не редактируйте это сообщение в два потому что если отредактировав эти два сообщения, моя тема опять опуститься в списке если не опуститься то можно .

Смотрите что я сотворил
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    ScrollBox2: TScrollBox;
    Button1: TButton;
    Image1: TImage;
    Edit1: TEdit;
    Button2: TButton;
    procedure Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure Image1EndDrag(Sender, Target: TObject; X, Y: Integer);
    procedure Image1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ScrollBox2DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ScrollBox1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  nagata,b:boolean;
  x2,y2:integer;
implementation

{$R *.dfm}

procedure TForm1.Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
//
end;

procedure TForm1.Image1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
 TImage(Sender).Parent:=scrollbox1;//TWinControl(Target);
 b:=false;
end;

procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
//
if b=true then begin
image1.Left:=(image1.Left+x-x2){-round(image1.Width/2)};
image1.Top:=(image1.Top+y-y2){-round(image1.Height/2)};
end else begin
x2:=x;
y2:=y;
b:=true;
end;
end;

procedure TForm1.ScrollBox2DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
//
image1.Parent:=scrollbox2;
image1.Left:=({image1.Left}+x)-round(image1.Width/2);
image1.Top:=({image1.Top}+y)-round(image1.Height/2);
end;

procedure TForm1.ScrollBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
//
image1.Parent:=scrollbox1;
image1.Left:=({image1.Left}+x)-round(image1.Width/2);
image1.Top:=({image1.Top}+y)-round(image1.Height/2);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FORM1.DoubleBuffered:=true;
scrollbox1.DoubleBuffered:=true;
scrollbox2.DoubleBuffered:=true;
end;

end.
Всем спасибо за помощь жалко что нельзя таскать image по верх scrollbox(ов)
Воображение важнее, чем знания. (Albert Einstein)

Последний раз редактировалось dmitriegorovih; 19.08.2010 в 13:51.
dmitriegorovih вне форума Ответить с цитированием
Старый 22.08.2010, 12:46   #19
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Поднимаю данную, нужную мне тему.

Применил настройки, которые Stilet, указал в посте №12. Но только как-то получилось странно. Мне нужно изображение с Image1 скопировать перетаскиванием мышки на Image2, чтобы при этом исходное изображение никуда не перетаскивалось. А сейчас получается так: зажимаю мышкой на Image1, тащу его на Image2, при этом Image1 как бы вырезается и перемещается, а не копируется на Image2, то вроде Image1 "копируется" на Image2, а если я его же, Image1 пытаюсь уже переместить в пределах Image2, то Image1 помещается в рамку с крестиком для закрытия. Если я ее перетаскиваю и отпускаю на Image2, то рамка исчезает.

В связи с вышеизложенным 2 вопроса:
1. Как сделать, чтобы Image1 не вырезалось со своего места, а копировалось?
2. Как сделать непоявление рамки с крестиком для закрытия?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 22.08.2010, 21:51   #20
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

artemavd Ну вы меня удивляете
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    ScrollBox2: TScrollBox;
    Button1: TButton;
    Image1: TImage;
    Edit1: TEdit;
    Button2: TButton;
    procedure Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure Image1EndDrag(Sender, Target: TObject; X, Y: Integer);
    procedure Image1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ScrollBox2DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ScrollBox1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  nagata,b:boolean;
  x2,y2:integer;
  kom:Timage;
implementation

{$R *.dfm}

procedure TForm1.Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
//
end;

procedure TForm1.Image1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
 kom:=Timage.create(form1);
kom.parent:=form1;
kom.left:=Timage(sender).left;
kom.top:=Timage(sender).top;
kom.picture.assign(Timage(sender).picture);
 b:=false;
end;

procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
//
if b=true then begin
image1.Left:=(image1.Left+x-x2){-round(image1.Width/2)};
image1.Top:=(image1.Top+y-y2){-round(image1.Height/2)};
end else begin
x2:=x;
y2:=y;
b:=true;
end;
end;

procedure TForm1.ScrollBox2DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
//
image1.Parent:=scrollbox2;
image1.Left:=({image1.Left}+x)-round(image1.Width/2);
image1.Top:=({image1.Top}+y)-round(image1.Height/2);
end;

procedure TForm1.ScrollBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
//
image1.Parent:=scrollbox1;
image1.Left:=({image1.Left}+x)-round(image1.Width/2);
image1.Top:=({image1.Top}+y)-round(image1.Height/2);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FORM1.DoubleBuffered:=true;
scrollbox1.DoubleBuffered:=true;
scrollbox2.DoubleBuffered:=true;
end;

end.
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перетаскивание формы Nester Общие вопросы Delphi 2 24.07.2009 12:35
Вопрос по Image (скачанная картинка не хочет выводиться в Image) Radnor Мультимедиа в Delphi 2 06.07.2009 02:20
Перетаскивание формы. IVANSour Общие вопросы Delphi 2 03.02.2009 22:06
Перетаскивание geniy Компоненты Delphi 9 12.01.2009 02:10
Перетаскивание формы s-force Общие вопросы Delphi 13 07.09.2007 15:38