ورود

View Full Version : چگونه میشود بر روی Image کلیک کرد و بعد از کلیک



Valadi
چهارشنبه 22 آذر 1385, 17:52 عصر
چگونه میشود بر روی Image کلیک کرد و بعد از کلیک Image همراه موس حرکت کند و دوباره بعد از کلیک Image ثابت شود
در واقع می خواهیم Image را از یک محلی به محلی دیگر ببریم همراه با کلیک موس

MNosouhi
چهارشنبه 22 آذر 1385, 23:21 عصر
کافیه از رویداد های OnMouseDown و OnMouseMove استفاده کنی ،.

Valadi
پنج شنبه 23 آذر 1385, 06:18 صبح
با تشکر از لطفتان که جواب سوالم را دادید
میشه یکم بیشتر توضیح بدی و کدش به چه صورتی است ؟

MNosouhi
پنج شنبه 23 آذر 1385, 15:20 عصر
.......
Move:Boolean=false;
...............
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Move:=not Move;
end;
........
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if move then
begin
Image1.Left:=X;
Image1.Top:=y;
end;
end;

Valadi
پنج شنبه 23 آذر 1385, 16:30 عصر
.......
Move:Boolean=false;
...............
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Move:=not Move;
end;
........
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Move:=not Move;
end;

دوست عزیز با تشکر از راهنمایتان
*****من این از این کد استفاده کردم اما هیچ چیزی رخ نداد *****
اگر امکان دارد سورس برنامه برایم قرار بدید
با تشکر

______________________________________
علمی که در کار جلوه کند برترین نوع دانش است حضرت علی (ع)

MNosouhi
پنج شنبه 23 آذر 1385, 20:01 عصر
ببخشید ، فراموش کردم یکی از توابع رو براتون بگذارم ، کد بالا رو اصلاح کردم ، دوباره تستش کنید.

Valadi
جمعه 24 آذر 1385, 07:28 صبح
یک مشکل کوچک هستش که اگر در فرم دوتا Image باشد دوتا با همدیگر حرکت می دهد و من می خواهم که روی هر کدام جدا گونه حرکت داد
به این صورت که روی Image1 کلیک شده حرکت کند اگر Image2 کلیک شد حرکت کند

MNosouhi
جمعه 24 آذر 1385, 10:31 صبح
کد که برات نوشتم فقط Image1 رو حرکت میده .
اگه میخای با 2 تا تصویر کار کنی بهتره 2 تا متقیر bool در نظر بگیری . مثلا Move1 و move 2
کدی که نوشتم خیلی ساده هستش ، برای 100 تا عکس هم می تونی تغییرش بدی ، نمی دونم که مشکل کارت کجاست.

Valadi
شنبه 25 آذر 1385, 11:36 صبح
کدش را نمی دونم برایم قرار بده

dkhatibi
شنبه 25 آذر 1385, 13:00 عصر
اگر فقط 2 تا عکس داری ، اونجا که متغیرت رو تعریف کردی(Implication) به جای Move تنها این دو متغیر رو تعریف کن.Move1 , Move2 .بعد روی رویدادهای گفته شده ی هر Image توابع یاد شده رو بنویس.
به جای Move که در اینجا استفاده شده در هر کدوم به ترتیب Move1 , Move2 قرار بده.
فکر نکنم مشکلی باشه!

Valadi
دوشنبه 27 آذر 1385, 08:14 صبح
تشکر از راهنمایتان این کد را بصورتی که گفته شد انجام داده ام اما اشکال دارد و
var
Form1: TForm1;
Move1:Boolean=false;
Move2:Boolean=false;

implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Move1:=not Move1;
end;


procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if move1 then
begin
form1.Image1.Left:=X;
form1.Image1.Top:=y;
begin
if move2 then
begin
form1.Image2.Left:=X;
form1.Image2.Top:=y;
end;
end;
end;
end;
procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Move2:=not Move1;
end;

end.


می خواهم در 9 تا Image را اینکار کنم و با کلیک برروی Image حرکت کند

mzjahromi
دوشنبه 27 آذر 1385, 08:25 صبح
این کد کار میکنه ولی باید دکمه ماوس رو نگه دارید


unit Unit1;

interface

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

type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
procedure ImageMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
Clicked:Boolean;
Dx,Dy:Integer;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ImageMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Clicked:=False;
end;

procedure TForm1.ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Clicked:=True;
dx:=X;
Dy:=Y;
end;

procedure TForm1.ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Clicked Then
Begin
TImage(Sender).Left:=TImage(Sender).Left+X-DX;
TImage(Sender).top:=TImage(Sender).Top+Y-DY;
End;
end;

end.

اگر هم چند تا ایمیج داشته باشی نیازی نیست کد رو تغییر بدی فقط کافیه چند تا Event مربوط به ایمیج دومی رو انتصاب بدی به این توابع
اگر خواستی بگو تا کل برنامه رو واسه ات بفرستم ولی فکر نمیکنم نیاز باشه

Valadi
دوشنبه 27 آذر 1385, 08:39 صبح
ممنون می شم که کل برنامه را بفرستی
من می خواهم 9 تا ایمج قرار بدهم اگر شما لطف کنید ا 2 ایمج را بفرستید و بقیه دیگه حله ........

mzjahromi
دوشنبه 27 آذر 1385, 10:34 صبح
کل برنامه
------------

حرفه ای
سه شنبه 28 آذر 1385, 15:41 عصر
خصوصیت DragKind را برابر dxDock
و خصوصیت DragMode را برابر dmAutomatic قرار بده Object شما درگ می شود
اما اشکال اون اینه که از فرم جدا می شه
میتونی برای رفع مشکل Parent آبجکت را مساوی فرم قرار بدی البته در ایونت OnEndDrag