Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

Перетаскивание   Найти похожие ветки 

 
Sergey_b   (2006-10-24 09:56) [0]

Привет всем.
Подскажите, пожалуйста, как оле(в нем картинка) таскать мышью в скрулбоксе. И почему при увеличении размеров оле в боксе не появляются полосы прокрутки?


 
Sergey_b   (2006-10-24 11:03) [1]

Ну ответьте же, кно-нибудь!!!
И событие Ole.OnMouseUp почему-то не возникает.


 
Elen ©   (2006-10-24 11:06) [2]


> Ну ответьте же, кно-нибудь!!!

Рули DragDrop в хелпе


 
Sergey_b   (2006-10-24 11:11) [3]


> Elen ©   (24.10.06 11:06) [2]

Так это через DragDrop?
А если в MoveMouse когда MouseDown?


 
Elen ©   (2006-10-24 11:14) [4]


> Sergey_b А если в MoveMouse когда MouseDown?

Способов много


 
Sergey_b   (2006-10-24 11:23) [5]


> Elen ©   (24.10.06 11:14) [4]

через DragDrop не получится...
где почитать про это ?


 
Elen ©   (2006-10-24 11:27) [6]


> через DragDrop не получится

Почему?


 
Sergey_b   (2006-10-24 11:30) [7]


> Почему?

Сорри. Получается, но как-то корявенько.

procedure TForm1.OleContainer1DragOver(Sender, Source: TObject; X,
 Y: Integer; State: TDragState; var Accept: Boolean);
begin
 OleContainer1.Left := x;
 OleContainer1.Top := y;
end;
Изображение в этот момент дрожит.


 
Elen ©   (2006-10-24 11:34) [8]


> Изображение в этот момент дрожит.

Бывает...


 
Sergey_b   (2006-10-24 11:35) [9]


> Бывает...

Инглишь не знаю совсем. Можно рассказать когда есть событие DragOver?
Может есть еще какое - более подходящее?


 
Elen ©   (2006-10-24 11:47) [10]

DragOver - Происходит, когда потребитель протаскивает объект над контролем. Поставь себе переводчик (рекомендую Pragma) и переведи справку


 
Sergey_b   (2006-10-24 11:51) [11]

Спасибо. Но почему же картинка мечется вроде как периодически х с у меняются местами?


 
Elen ©   (2006-10-24 11:56) [12]


>  почему же картинка мечется

Думается мне тебе лучше сделать DragOver не для Ole, а для его контейнера. Потому как OleContainer1DragOver работает когда в ходе перетаскивания мыша висит над Ole - и соответственно координаты берутся не контейнеровские а Ole.

Пропиши эти действия для контейнера. Метаться не должно.


 
Sergey_b   (2006-10-24 12:05) [13]


> Пропиши эти действия для контейнера.

Вот в таком случае не получается - механизм включается только когда мышь над контейнером, а олешка ес-но больше.
И передвинуть оле можно только до края бокса(left = 0 b top = 0).
Может надо менять координаты (как наз. не помню читал у Пачеко)


 
Elen ©   (2006-10-24 12:09) [14]


> Sergey_b

Я наверно не так выразилась. Приатач DragOver контейнера к процедуре DragOver Ole. Контейнер и Ole пусть вызывают одну и ту же OnDragOver.


 
Sergey_b   (2006-10-24 12:12) [15]


> Elen ©   (24.10.06 12:09) [14]

Не понял


 
Elen ©   (2006-10-24 12:29) [16]


> Sergey_b

[14] - вигня Sorry, не о том думаю
Попробуй так :

procedure TForm1.OleContainer1DragOver(Sender, Source: TObject; X,
 Y: Integer; State: TDragState; var Accept: Boolean);
var t:Tpoint;
begin
t:=Mouse.CursorPos;
t:= ScrollBox1.ScreenToClient(t);
OleContainer1.Top:=t.y;
OleContainer1.Left:=t.x;
end;


 
Sergey_b   (2006-10-24 13:00) [17]


> Elen ©   (24.10.06 12:29) [16]

Почти так, только переместить картинку можно лишь до начала коорд. контейнера. Мыша при зацепе перемещается в поз. (0,0) оле - не пойму почему?


 
Elen ©   (2006-10-24 13:04) [18]


>  Мыша при зацепе перемещается в поз. (0,0) оле - не пойму
> почему?

потому что
OleContainer1.Top:=t.y;
OleContainer1.Left:=t.x;

Это не мыш прыгает туда, а OLE прыгает за мышку. Измени это условие и будет тебе счастье


 
Sergey_b   (2006-10-24 13:09) [19]


> Это не мыш прыгает туда, а OLE прыгает за мышку.

Как?


 
Sergey_b   (2006-10-24 13:12) [20]


> Измени это условие и будет тебе счастье

Вот бы...


 
Elen ©   (2006-10-24 13:21) [21]


>  Мыша при зацепе перемещается в поз. (0,0) оле - не пойму
> почему?

потому что
OleContainer1.Top:=t.y;
OleContainer1.Left:=t.x;

Это не мыш прыгает туда, а OLE прыгает за мышку.  Вот пример другой

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   ScrollBox1: TScrollBox;
   OleContainer1: TOleContainer;
   procedure OleContainer1DragOver(Sender, Source: TObject; X, Y: Integer;
     State: TDragState; var Accept: Boolean);
   procedure OleContainer1EndDrag(Sender, Target: TObject; X, Y: Integer);
   procedure OleContainer1DragDrop(Sender, Source: TObject; X,
     Y: Integer);
   procedure OleContainer1MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
 private
   { Private declarations }
 public      ax,ay:integer;
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.OleContainer1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
var t:Tpoint;
begin
t:=Mouse.CursorPos;
t:= ScrollBox1.ScreenToClient(t);
OleContainer1.Top:=t.y-ay;
OleContainer1.Left:=t.x-ax;
end;

procedure TForm1.OleContainer1EndDrag(Sender, Target: TObject; X,
 Y: Integer);
begin
tag:=0;
end;

procedure TForm1.OleContainer1DragDrop(Sender, Source: TObject; X,
 Y: Integer);
begin
tag:=0;
end;

procedure TForm1.OleContainer1MouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ax:=x; ay:=y ;
OleContainer1.BeginDrag(true);
end;

end.


DragMode для OLE должно быть Manual


 
Sergey_b   (2006-10-24 13:52) [22]

Огромное спасибо. И вопрос: EndDrag - конец переноса(вроде так), но если он ничего не делает, то зачем нужен?


 
Sergey_b   (2006-10-24 13:53) [23]


> EndDrag

не нужен


 
novill ©   (2006-10-24 15:06) [24]

> [21] Elen ©   (24.10.06 13:21)

И от меня спасибо :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.042 c
15-1161752978
nikolay_sch
2006-10-25 09:09
2006.11.12
Ошибка при инсталяции...


3-1158257012
DiX
2006-09-14 22:03
2006.11.12
Подсказки в DBGrid


2-1161698169
Серый
2006-10-24 17:56
2006.11.12
Memo поле


15-1161542096
Belorus
2006-10-22 22:34
2006.11.12
Профайлер...


2-1162118210
ymy1
2006-10-29 13:36
2006.11.12
неиспользуемое в классе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский