PDA

View Full Version : سوال: فرم بدون نوار عنوان و نحوه جابجایی فرم با نوار عنوان سفارشی شده



MS.Worm
جمعه 06 آبان 1390, 18:11 عصر
سلام دوستان و خسته نباشيد
من يه پروژه دارم مينويسم و ميخوام فرمم بدون نوار عنوان باشه يعني خاصيت FormBorderStyle رو بر روي None قرار ميدم. حالا ميخوام خودم يه نوار عنوان واسه فرمم بسازم. مثلا با هر كامپوننتي، مثلا يه دكمه بزارم بالاي فرم به عنوان نوار عنوان.
ميخوام بدونم وقتي يه كامپوننتي رو به عنوان نوار عنوان در بالاي فرمم قرار دادم، چطور ميتونم فرم رو توسط نوار عنوان ساخته شدم تكان بدم. يعني اون نوار عنوان رو بگيرم و فرم رو اينور اونور ببرم.

با تشكر.

sobaisobai
جمعه 06 آبان 1390, 18:26 عصر
سلام دوست عزیز
NameSpace زیر رو اضافه کن
using System.Runtime.InteropServices;
بعد کد زیر رو تو public partial class بنویس
[DllImport("user32.dll")]
static extern int ReleaseCapture();
[DllImport("user32.dll", EntryPoint = "SendMessageA")]
static extern int SendMessage(int hwnd, int wMsg, int wParam, object lParam);
private const int WM_NCLBUTTONDOWN = 161;
بعد تو رویداد MouseDown نوارعنوانی که ساختی کد زیر رو بنویس
ReleaseCapture();
SendMessage(this.Handle.ToInt32(), WM_NCLBUTTONDOWN, 2, 0);
موفق باشی

MS.Worm
جمعه 06 آبان 1390, 18:50 عصر
ممرسي و ممنون
دوست گرامي اين كدهايي كه شما گفتي رو من نوشتم.
وقتي برنامه رو اجرا ميكنم به محض اينكه فرم رو تكان ميدم براي خط زير:


SendMessage(this.Handle.ToInt32(), WM_NCLBUTTONDOWN, 2, 0);

اين پيغام به صورت سبز رنگ نمايش داده ميشه

A call to PInvoke function 'Test1!Test1.Form1::SendMessage' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.

مشكل كجاست؟

sobaisobai
جمعه 06 آبان 1390, 19:09 عصر
واست یه نمونه اپ کردم

j_naroogha@yahoo.com
جمعه 06 آبان 1390, 22:46 عصر
واست یه نمونه اپ کردم
سلام دوست گرامی
من فایل رو دیدم. شما یه منو گزاشتین و در رویداد کلیکش دستور خروج رو نوشتین.
شاید روش خوبی باشه (البته فکر نکنم)
مابقی دستوراتت چیکار میکنن؟

sobaisobai
جمعه 06 آبان 1390, 22:51 عصر
مابقی دستورات وقتی میخوای فرم رو جابه جا کنی فقط باید رو منو کلید کنی و جابه جا کنی

j_naroogha@yahoo.com
جمعه 06 آبان 1390, 23:15 عصر
مابقی دستورات وقتی میخوای فرم رو جابه جا کنی فقط باید رو منو کلید کنی و جابه جا کنی
مرسی از پیگیریتون.
بعد اگه خودم منو داشتم چی؟
اصولا دکمه های منو پایین تر از دکمه های کنترلی قرار میگیرن. برای سایر دکمه ها چی؟

sobaisobai
جمعه 06 آبان 1390, 23:19 عصر
کد زیر رو تو رویداد MouseDown هر کنترلی بنویسی فقط با کلیک روی اون کنترل میشه فرم رو جابه جا کرد
ReleaseCapture();
SendMessage(this.Handle.ToInt32(), WM_NCLBUTTONDOWN, 2, 0);