Форум: "Начинающим";
Текущий архив: 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.059 c