PDA

View Full Version : لطفا کد های تست شده بدید



babak23
چهارشنبه 14 شهریور 1386, 13:43 عصر
چه جوری میشه جلوی حرکت فرم را با موس را گرفت؟

من کد های بچه ها را تست کردم اما جواب نداد.


privateconstInt32 SC_MOVE = 0xf010;
privateconstInt32 MF_BYCOMMAND = 0x00000000;
[DllImport("user32.dll")]
privatestaticexternIntPtr GetSystemMenu(IntPtr hWnd, Boolean bRevert);
[DllImport("user32.dll")]
privatestaticexternBoolean RemoveMenu(IntPtr hMenu, uint uPosition, uint uFlags);


از این کد تو قسمت


[DllImport("user32.dll")]

خطا میده . مشکل از کجاست؟

این کد هم جواب نمیده



System.Drawing.Point initialLocation;
private void Form1_Load(object sender, System.EventArgs e) { initialLocation=this.Location; }
private void Form1_LocationChanged(object sender,System.EventArgs e) { Me.Location = initLocation; }

خطا اینه که me تعریف نشده.

hdv212
چهارشنبه 14 شهریور 1386, 15:00 عصر
دوست عزیز این کدی که نوشتی، از حرکت موس جلوگیری نمیکنه، فقط نمیذاره فرمت حرکت کنه، در ضمن من تست کردم، درست کار میکرد، نمیدونم منظورت از جلوگیری از حرکت موس چیه.

babak23
چهارشنبه 14 شهریور 1386, 15:25 عصر
]منظورت کدوم کد هست . اولی یا دومی .
اولی این خطا را میده
Error 1 The type or namespace name 'DllImport' could not be found (are you missing a using directive or an assembly reference?) D:\project\WindowsApplication4\WindowsApplication4 \Form1.cs 18 10 WindowsApplication4

مشکل از کجاست؟


اینم کد مورد نظر


[DllImport("user32.dll", SetLastError = true)]
publicstaticexternInt32 EnableMenuItem(System.IntPtr hMenu, Int32
uIDEnableItem, Int32 uEnable);
privateconstInt32 HTCAPTION = 0X00000002;
privateconstInt32 MF_BYCOMMAND = 0X00000000;
privateconstInt32 MF_ENABLED = 0X00000000;
privateconstInt32 MF_GRAYED = 0X00000001;
privateconstInt32 MF_DISABLED = 0X00000002;
privateconstInt32 SC_MOVE = 0XF010;
privateconstInt32 WM_NCLBUTTONDOWN = 0XA1;
privateconstInt32 WM_SYSCOMMAND = 0X112;
privateconstInt32 WM_INITMENUPOPUP = 0X117;
protectedoverridevoid WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == WM_INITMENUPOPUP) //handles popup of system menu
if ((m.LParam.ToInt32() / 65536) != 0) // 'divide by 65536 to get hiword
{
Int32 AbleFlags = MF_ENABLED;
//if (!Moveable)
AbleFlags = MF_DISABLED | MF_GRAYED; // disable the move
}
EnableMenuItem(m.WParam, SC_MOVE, MF_BYCOMMAND);
if (m.Msg == WM_NCLBUTTONDOWN) //cancels the drag this is IMP
{
if (m.WParam.ToInt32() == HTCAPTION)
return;
}
if (m.Msg == WM_SYSCOMMAND) // Cancels any clicks on move menu
{
if ((m.WParam.ToInt32() & 0xFFF0) == SC_MOVE)
return;
}
base.WndProc(ref m);

rasoul_ras
چهارشنبه 14 شهریور 1386, 16:00 عصر
از using System.Runtime.InteropServices;
استفاده کن :
درست می شه
در ضمن سوالت رو فقط در یک تاپیک مطرح کن و
کد مورد نظر هیچ اشکالی نداره شما اطلاعات رو در ضمینه C# کاملتر کنید

gomnam
چهارشنبه 14 شهریور 1386, 23:19 عصر
اگه خاصیت controlBox مربوط به فرم false بشه دیگه کد فوق کار نمیکنه !!!!!!!!!!

Amir Oveisi
پنج شنبه 15 شهریور 1386, 00:19 صبح
دوست عزیز یه سری از اون کدهارو من گذاشتم و همه تست شدن و همونطور که دوستان اشاره کزدن به درستی کار میکنن!
شما چرا زود قضاوت میکنین؟
لطفا بیشتر دقت کنین تا بهتر نتیجه بگیرین
موفق باشید

gomnam
پنج شنبه 15 شهریور 1386, 01:12 صبح
دوست عزیز یه سری از اون کدهارو من گذاشتم و همه تست شدن و همونطور که دوستان اشاره کزدن به درستی کار میکنن!
شما چرا زود قضاوت میکنین؟
لطفا بیشتر دقت کنین تا بهتر نتیجه بگیرین
موفق باشید

مطمئنین که شما خوب خوب دقت کردین به پست من؟

منظور من این کد بود




privateconstInt32 SC_MOVE = 0xf010;
privateconstInt32 MF_BYCOMMAND = 0x00000000;
[DllImport("user32.dll")]
privatestaticexternIntPtr GetSystemMenu(IntPtr hWnd, Boolean bRevert);
[DllImport("user32.dll")]
privatestaticexternBoolean RemoveMenu(IntPtr hMenu, uint uPosition, uint uFlags);


کدی که babak23 گذاشتن (کد فوق)در واقع کدی است که که در این تاپیک (http://barnamenevis.org/forum/showthread.php?t=77891) که توسط من باز شده بود و کاربر mehdi6755 در پست شماره 6 گذاشتند
حالا این کد را من براتون عینا میفرست با یه نمونه برنامه
خوب دقت کنین که وقتی خاصیت controlBox مربوط به فرم true هست کد کار میکند
حالا اگه خصیت مذکور را false کنین وبرنامه را دوباره اجرا کنین دیگه کد کار نمیکنه و فرم را به راحتی میشه جابجا کرد !!!!!!

شاد باشید

babak23
پنج شنبه 15 شهریور 1386, 07:56 صبح
دوست عزیز یه سری از اون کدهارو من گذاشتم و همه تست شدن و همونطور که دوستان اشاره کزدن به درستی کار میکنن!
شما چرا زود قضاوت میکنین؟
لطفا بیشتر دقت کنین تا بهتر نتیجه بگیرین
موفق باشید

به نظر شما این کد تست شده است



System.Drawing.Point initialLocation;
private void Form1_Load(object sender, System.EventArgs e)


initialLocation=this.Location; }
{
private void Form1_LocationChanged(object sender,System.EventArgs


e) { Me.Location = initLocation; }



متغیرهای initLocation و Me تعریف نشده هستند.

به نظر شما این متغیر initialLocation با این یکی فرقی نداره initLocation

من این کد به این صورت تغییر دادم جواب داد



System.Drawing.Point initialLocation;
private void Form1_Load(object sender, System.EventArgs e)


initialLocation=this.Location; }
{
private void Form1_LocationChanged(object sender,System.EventArgs


e) { this.Location = initialLocation; }



اگه اشکال از منه لطف کنید بگید مشکل از کجاست ؟

babak23
پنج شنبه 15 شهریور 1386, 08:01 صبح
از using System.Runtime.InteropServices;
استفاده کن :
درست می شه
در ضمن سوالت رو فقط در یک تاپیک مطرح کن و
کد مورد نظر هیچ اشکالی نداره شما اطلاعات رو در ضمینه C# کاملتر کنید

عزیز من منم میدونم که مشکل از فضای نام بوده.
اما تو سی شارب خود استاد که بهتر میدونی یه کی دوتا فضای نام نداریم که من بشینم همشون را امتحان کنم. یا شناخت کافی روی اونها داشته باشم.
در هر صورت از لطفت ممنون.

Amir Oveisi
پنج شنبه 15 شهریور 1386, 13:45 عصر
مطمئنین که شما خوب خوب دقت کردین به پست من؟

اما من با شما که نبودم! lol

mehdi.mousavi
پنج شنبه 15 شهریور 1386, 15:17 عصر
عزیز من منم میدونم که مشکل از فضای نام بوده.
اما تو سی شارب خود استاد که بهتر میدونی یه کی دوتا فضای نام نداریم که من بشینم همشون را امتحان کنم. یا شناخت کافی روی اونها داشته باشم.
در هر صورت از لطفت ممنون.


سلام.
برنامه نویسی کاری نیستش که با سعی و خطا انجام بشه و پیش بره. بلکه یه کار علمی هستش و برای درست انجام دادن اون، باید وقت و هزینه صرف بشه. اگر یه خورده به خودتون زحمت میدادین و MSDN (http://msdn2.microsoft.com/en-us/default.aspx)رو باز میکردین، حتما می تونستید بفهمید که DLLImport تو کدوم namespace هستش، بدون اینکه نیاز باشه "همه رو امتحان کنید یا شناخت کافی روشون داشته باشید"! اینکاری که شما میخواهید انجام بدین، فقط با override کردن Window Procedure و فیلتر کردن پیامهای ارسالی به پنجره میسر هستش. ضمنا، فکر میکنم اگر این سوال رو در همون عنوان قبلی مطرح میکردین، تا الان بهتون یه جواب قانع کننده داده بودم.

پاورقی:
هر گونه دخل و تصرف در چگونگی اجرای عادی یه برنامه در ویندوز، اعم از جلوگیری از تکون خوردن پنجره، Hook کردن کلیدها بمنظور عدم باز شدن Start Menu، جلوگیری از اجرای دیگر برنامه ها، و کلیه اموری که user-experience رو به مخاطره بیاندازه، کاملا مردود و غیر قابل قبول هست و هرگز به کسی توصیه نمیشه.