ايران ويج

نسخه‌ی کامل: حرکت دادن یک دکمه با ماوس
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
میخواستم با درگ کردن ماوس روی یک دکمه تا جاییکه دست از روی ماوس برداشته میشه دکمه جا به جا بشه و در اون نقطه قرار بگیره
باورت میشه خودم هم بلد نبودم همچین برنامه ای بنویسم.
بعد از اینکه سؤال شما رو دیدم نیم ساعت تمرین کردم تا به جواب رسیدم.
موفق باشی.
بابت كامپوننت dragdrop واقعا مديون شما شدم چون اين كامپوننت خيلي به دردم مي خوره مرسي
mojtabamalaekeh نوشته است:باورت میشه خودم هم بلد نبودم همچین برنامه ای بنویسم.
بعد از اینکه سؤال شما رو دیدم نیم ساعت تمرین کردم تا به جواب رسیدم.
موفق باشی.

سلام
خیلی از برنامتون ممنون
میشه بیشتر راجع به این خطوط توضیح بدین تا هم من و بقیه که سطح اطلاعاتشون مثل من زیاد نیست متوجه بشند

XDown = Left(Source.Tag, InStr(Source.Tag, ",") - 1)
Source.Tag چه کاری انجام میده و با اینکه کار توابع leftوinstr رو میدونم ولی اصلا خط بالا را متوجه نشدم
منتظر راهنماییتون هستم ممنون
سلام
دستور tag برای نگهداری یک مقدار رشته ای مورد استفاده قرار می گیره
اگه به کد دقت کرده باشی مختصات xوy رو در داخل tag نگه داری میکنه
به کمک کد زیر
XDown = Left(Source.Tag, InStr(Source.Tag, ",") - 1)
عدد x رو از عبارت tag جدا می کنه و در متغیر XDown قرار می ده

فرض کن مقدار tag برابر 10,50 باشه
پس عدد قبل از (,) همان عدد x هست
که به کمک تابع InStr دنبال (,) میگرده و با دستور Left جدا میکنه
....
موفق باشی
با تشکر از arashrj
توضیحات ایشون کامل بود.
نمیدونم خاصیت Tag برای چیه ولی علت استفاده ی من از خاصیت تگ این بود که من برای هر شیء باید یک متغیر سراسری تعریف می کردم که Left و Top اون شیء رو ذخیره کنه. امتحان کردم ببینم خاصیت Tag رشته می پذیره یا نه؟ که خوشبختانه قبول کرد. من هم گفتم بجای تعریف یک متغیر برای هر شیء از خاصیت Tag اون شیء استفاده کنم.
ویرایش شد:
یادم رفت بگم که: XDown و YDown مختصات محلی هستند که ماوس روی دکمه پایین رفته. این یعنی آغاز عمل کشیدن؛ چون شما وقتی میخوای شیء رو جابجا کنی اول باید دکمه ماوس رو روی اون شیء پایین نگه داری. در یک کلام مثل موقعی که رویداد MouseDown رخ میده، فقط چون خاصیت DragMode اتوماتیک شده، دیگه رویداد MouseDown اتفاق نمیفته.
البته میشه از API ها هم استفاده کرد
مثل نمونه زیر :
سلام
من هم کد رو به صورت ساده تر نوشتم (فکر نکنم از این ساده تر و دقیق تر بشه نوشت)

کد:
Dim Xx, Yy As Single

Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Xx = X: Yy = Y
End Sub

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
    Source.Move X - Xx, Y - Yy
End Sub

Private Sub Form_Load()
    Command1.DragMode = vbAutomatic
End Sub

موفق باشی
خیلی ممنون جناب arashrj
پس من هم باید بجای استفاده از رویداد DragOver از رویداد MouseMove استفاده کنم و زیربرنامه ControlDragOver رو بصورت زیر اصلاح کنم:
کد:
Private Sub ControlDragOver(Control As Control, X As Single, Y As Single)
    Control.Tag = X & "," & Y
End Sub
که در اینصورت بهتره زیر برنامه حذف بشه و مقداردهی به خاصیت Tag تو رویداد MouseMove همون شیء انجام بشه.
با تشکر از آموزش مفید شما
کاش می شد برای آقا حامد 10 تا تشکر بنویسیم. کد ایشون رو مدت ها پیش دیده بودم ولی اون موقع فرق VB رو با موتورگازی نمی دونستم و الان ارزش این کد رو می دونم.
با کمال تشکر از همه شما دوستان عزیز
می خواستم ببینم اگه بخوام دکمه ها رو از روی یک فریم به روی فرم حرکت بدم چه تغییری باید در برنامه های فوق ایجاد کنم؟
نمی دونم درست متوجه سؤالت شدم یا نه! اما ...
اگر دکمه توی فریم باشه خاصیت Container اون برابر Frame1 هستش و اگه بخوای دکمه رو از توی فریم روی فرم منتقل کنی باید از فرمان زیر استفاده کنی:
کد:
Set Command1.Container = Me
ضمنا PictureBox ها هم میتونند به عنوان Container باشند. بطور مثال اگه بخوای دکمه ای به اسم Command1 توی جعبه عکسی به اسم Picture1 قرار بگیره از فرمان زیر استفاده می کنی:
کد:
Set Command1.Container = Picture1
اگر هم منظورت چیز دیگه ای بود لطفا بیشتر توضیح بده.
صفحه‌ها: 1 2