компьютерный форум
Вернуться   Компьютерный форум > Программирование и вебстроительство > Программирование

Ответ
 
LinkBack Опции темы Опции просмотра
Старый 29.04.2005, 09:59   #1
Пользователи
 
Регистрация: 29.04.2005
Сообщений: 4
По умолчанию

Проблема такая:
У меня есть ScrollBox1 и в нем Image1 и куча динамически созданных Shape. Когда я все это строю, я прописываю Shape1.left:=Image1.left+ля-ля-ля...
А потом у меня идет перемещение этих шейпчиков через drag-and-drop. Так вот когда я их перемещаю, они перемещаются нормально, но меняются координаты Image1...Они становятся отрицательными...и меняются соответственно координаты шейпов...(тоже становятся отрицательными). Подскажите пжлста почему так происходит и как это исправить?




Селедка вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
29.04.2005, 09:59
Техник
реклама
По умолчанию

Старый 29.04.2005, 14:40   #2
Пользователи
 
Регистрация: 29.04.2005
Сообщений: 4
По умолчанию

Вот, изъясняюсь:

//здесь я поместила drag-and-drop
procedure TForm1.ScrollBox1StartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
//это я делаю, чтобы запомнить координату, когда мы только схватили шейпчик
xxn:=-1;
end;


procedure TForm1.ScrollBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:=false;
//если мы перетаскиваем шейпчик, то
if (source is TShape) then
begin
//если мы только взяли его, то запоминаем координату...
//эта координата будет относительно шейпчика
if xxn=-1 then xxn:=x;
Accept:=True;
//а это мы определяем какой именно шейпчик взяли
ss:=(FindComponent(TShape(source).Name) as TShape).Name;
delete(ss,1,6);
end;
end;

procedure TForm1.ScrollBox1DragDrop(Sender, Source: TObject; X,
Y: Integer);
begin
//если мы поставили курсор мыши на шейпчик, то координаты будут такие:
if (Sender is TShape) then xn:=ScrollBox1.left+TShape(sender).Left+x
//а если не на шейпчике, то бишь на скроллбоксе, то такие:
else xn:=ScrollBox1.left+x;
//то есть мы привели к одной с-ме координат...
//а теперь из этой координаты вычтем ту, что запомнили в начале...т.е. если мы взяли шейпчик на его середине, то когда поставим его куда-то, это должна быть середина...
xn:=xn-xxn;
//а теперь переприсваиваем координаты шейпчику
(FindComponent('prich_'+ss) as TShape).Left:=ScrollBox1.left+xn;
end;

Так вот, у меня почему-то получаются отрицательные значения у шейпчика...Причем это происходит еще на StartDrag, где я с ним еще ничего не делаю...
Хотя рисует все там, где надо...
Изображения
Тип файла: jpg 1322036987_1.jpg (26.8 Кб, 293 просмотров)
Селедка вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 04.05.2005, 05:30   #3
Пользователи
 
Регистрация: 23.04.2005
Сообщений: 13
По умолчанию

Насколько я уразумел - весь смысл содеяного состоит в том чтобы перемещать Shape. Предлагаю более простой вариант:


implementation
var
MouseDowns: boolean;
MousePos: TPoint;

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseDowns := true;
MousePos.X := x;
MousePos.Y := y;
end;

procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if MouseDowns then begin
Shape1.Left := ScreenToClient(mouse.CursorPos).X-MousePos.X;
Shape1.Top := ScreenToClient(mouse.CursorPos).y-MousePos.y;
end;
end;

procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseDowns := false;
end;


Или же, если необходимо перемещать элемент управления то ещё проще, пишем в его обработчике OnMouseMove такую ерунду:

ReleaseCapture;
.Perform ( WM_SYSCOMMAND, SC_MOVE+2, 0 );


DimaBr вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 15.05.2005, 08:08   #4
Пользователи
 
Регистрация: 05.04.2005
Сообщений: 12
По умолчанию

Народ! кто-то знает какой-то самый простой код копирования файла из определенного место в какое-то другое. Ну например с деска на винт. Только если можно код по-проще. но надежный.
Изображения
Тип файла: jpg unnamed.jpg (34.6 Кб, 267 просмотров)
Nikitich вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 18.05.2005, 06:05   #5
Пользователи
 
Регистрация: 07.12.2004
Сообщений: 783
По умолчанию

Есть API : int CopyFile(source, destination, etc.)
Не помню последнего параметра - посмотри в МСДН.
Возвращает 0 если копирование по каким-то причинам не удалось.

куда уж проще и надежнее?
Andy вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 13.06.2005, 20:21   #6
Пользователи
 
Регистрация: 05.04.2005
Сообщений: 12
По умолчанию

спасибо. а то в DW писали какие-то громадные коды.... Теперь у меня другая проблема. Я пишу прогу и мне надо что бы она проверяла наличие файла в интернете. что то вроде FileExists. Кто-то может что то подсказать по этому поводу???
Nikitich вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Ответ


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Вкл.



Текущее время: 22:29. Часовой пояс GMT.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Content Relevant URLs by vBSEO 3.5.0 RC2