PDA

View Full Version : غیر فعال کردن دکمه Close پنجره اصلی دیتابیس



مهدی قربانی
سه شنبه 04 اردیبهشت 1386, 16:34 عصر
با عرض سلام
دوستان چطور میشه دکمه Close پنجره اصلی دیتابیس رو غیر فعال کرد بطوری که کابر فقط بواسطه زدن دکمه ساخته شده روی فرم مورد نظر ( سوئیچ برد ) قادر به خروج کامل از برنامه باشه ؟

Ali_Fallah
سه شنبه 04 اردیبهشت 1386, 18:53 عصر
ابتدا این کدها را در یک ماژول کپی کنید



Option Compare Database

Private Const GWL_EXSTYLE = (-20)
Private Const GWL_STYLE = (-16)

Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_SYSMENU = &H80000

Private Const HWND_TOP = 0
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED

Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) _
As Long
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long

Sub HideAccessCloseButton()

Dim lngStyle As Long

lngStyle = GetWindowLong(hWndAccessApp, GWL_STYLE)
lngStyle = lngStyle And Not WS_SYSMENU
Call SetWindowLong(hWndAccessApp, GWL_STYLE, lngStyle)
Call SetWindowPos(hWndAccessApp, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_DRAWFRAME)

End Sub

در مرحله بعد یک فرم ایجاد کرده و کاماند باتن روی فرم گذاشته و کد زیر را بنویسید
HideAccessCloseButton

مهدی قربانی
سه شنبه 04 اردیبهشت 1386, 23:04 عصر
علی آقا خیلی ممنون از راهنمایی ، من HideAccessCloseButton رو تو onopen فرم switchboard نوشتم بنابراین وقتی برنامه اجرا می شه دکمه close اصلی hide میشه ، مجدد از لطف شما ممنونم

صبا9841
چهارشنبه 05 اردیبهشت 1386, 11:03 صبح
دوست عزیز؛
لطفاً قبل از ایجاد تایپیک اول جستجو کن http://barnamenevis.org/forum/showthread.php?t=61168
دوم این که اگر فرمتان ماگزیمم باز بشه کار به پنهان شدن دکمه های ویندوز نمیرسه یعنی اصلا این دکمه دیده نمیشن که بخوای هایدشون کنی.

Ali_Fallah
چهارشنبه 05 اردیبهشت 1386, 11:32 صبح
البته صبا ی عزیز که دوست ما را به جستجو ی درتاپیک ها سفارش کردند ، خودشان از این قائده پیروی نکردند لطفاً به این صفحه (http://www.barnamenevis.org/forum/showthread.php?t=53141&page=2) و تاریخ ارسال توجه کنید
(البته از نظر من هیچ مشکلی نیست و برای من هم ممکنه اتفاق بیافته)...

صبا9841
چهارشنبه 05 اردیبهشت 1386, 15:46 عصر
البته صبا ی عزیز که دوست ما را به جستجو ی درتاپیک ها سفارش کردند ، خودشان از این قائده پیروی نکردند لطفاً به این صفحه (http://www.barnamenevis.org/forum/showthread.php?t=53141&page=2) و تاریخ ارسال توجه کنید
(البته از نظر من هیچ مشکلی نیست و برای من هم ممکنه اتفاق بیافته)...

در یک مقطعی خیلی دنبال هاید کردن باتونها بودم و خیلی جاها جستجو کردم از جمله اینجا
با اینحال خیلی ببخشی اگر بین عبارت برنامه ایجاد shortcut با Hide کردن Close Button یک رابطه معنی دار پیدا نشد.
بزرگوار؛ حقیقتش را بخوای اگر این لینک را توی این تایپیک نمیزدی هنوز هم متوجه نمیشدم که شما این برنامه رو قبلا زحمت کشیدی.



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

متوجه شم که اگر فرم ماگزیمم بشه بهتر است چون restore button هم کم درد سر تر از close button ندارد.

مهدی قربانی
چهارشنبه 05 اردیبهشت 1386, 18:25 عصر
سلام جناب صبا
در مورد search حق با شماست بروی چشم
اما در مورد باز کردن فرم در حالت ماکزیمایز و دردسر دکمه مین و ماکس متوجه منظورتون نشدم اگر محبت کنید مقداری توضیح بدید ممنوتون میشم .

moustafa
چهارشنبه 05 اردیبهشت 1386, 22:19 عصر
چرا شیفت رو قفل نمی کنی که کاربر کلا به پنجره دیتابیس دسترسی نداشته باشه

مهدی قربانی
پنج شنبه 06 اردیبهشت 1386, 15:06 عصر
آقا مصطفی سلام
شیفت قفله منتها قصد من برای استفاده نکردن کابر از دکمه close اکسس ، خروج از برنامه با کامند باتون ایجاد شده روی فرم سوئیچ برد ، علتش هم این که روی باتون مذکور کدی نوشتم که تاریخ و زمان خروج کابر از برنامه رو در جدول history ثبت می کنه حالا در صورتی که کاربر دکمه close اصلی پنجره اکسس رو استفاده کنه خروجش در history ثبت نمیشه .

moustafa
پنج شنبه 06 اردیبهشت 1386, 16:03 عصر
آقا مصطفی سلام
شیفت قفله منتها قصد من برای استفاده نکردن کابر از دکمه close اکسس ، خروج از برنامه با کامند باتون ایجاد شده روی فرم سوئیچ برد ، علتش هم این که روی باتون مذکور کدی نوشتم که تاریخ و زمان خروج کابر از برنامه رو در جدول history ثبت می کنه حالا در صورتی که کاربر دکمه close اصلی پنجره اکسس رو استفاده کنه خروجش در history ثبت نمیشه .

آها!فکر کردم منظورت پنچره دیتابیسء
خوب تو رویداد close فرم بنویس بجای باتن (کاری که من خودم می کنم )

مهدی قربانی
پنج شنبه 06 اردیبهشت 1386, 23:17 عصر
مصطفی جان مشکل من اینه که فرم history در زمان باز شدن برنامه بصورت hide باز میشه و تمام فعالیتهای کاربر توی اون ثبت میشه اکر من روی on close سوئیج برد این حالت رو تعریف کنم اقدام به خروج کاربر در فرم history ثبت نمیشه البته علت اون هم اینکه در اثر استفاده کاربر از دکمه close اکسس , عمل quit رخ میده و قبل از اینکه اطلاعات خروج کاربر تو فرم history ثبت بشه فرم بسته شده , بنابراین مجبور شدم که دکمه close رو hide و از کامند باتون استفاده کنم
به هر حال از توجه و همراهیت ممنونم ز

صبا9841
جمعه 07 اردیبهشت 1386, 08:35 صبح
اگر این لینک را توی این تایپیک نمیزدی هنوز هم متوجه نمیشدم که شما این برنامه رو قبلا زحمت کشیدی .

خیلی عذر میخوام Ali_Fallah گرامی برای اولین بار برنامه توی این لینکی که زدید را دیدم. جالب بود و دستتون درد نکنه.
ممکنه راهنمایی بفرمائید سوای کد و دستور چه تشابهی بین نتیجه ایجاد shortcut با Hide کردن Close Button وجود دارد؟!!!
حدس میزنم که برنامه مورد نظر تان در ارتباط با موضوع این تایپیک را اشتباه لینک زدید. نظر شما چیه؟




اما در مورد باز کردن فرم در حالت ماکزیمایز و دردسر دکمه مین و ماکس متوجه منظورتون نشدم اگر محبت کنید مقداری توضیح بدید ممنوتون میشم .
اگر از یک فرمی بعنوان سوئچ برد یا هام پیج برنامه استفاده کنی که این فرم پاپ آپ و مادول نباشه دکمه ریستور فعال میماند (حتی اگر کلوز را هاید کنی و پروپرتی فرم را هم نون کنی).
ایرادش اینه که کاربر با فشردن دکمه ریستور برنامه را از حالت عادی خارج میکنه(شکل فرمها را نه خود برنامه) بطوریکه اگر برنامه ام دی ای باشه ممکن برایش مشکل ایجاد کند.

مهدی قربانی
جمعه 07 اردیبهشت 1386, 11:34 صبح
صبای عزیز دقیقا با نظرت موافقم و این وضعیت رو قبلا تجربه کردم به همی دلیل خصوصیت border style فرم رو با Dialog ست می کنم در این صورت دکمه restore روی فرم دیده نمی شه و از شر مشکلی که شما اشاره فرمودی خلاص میشم .
تشکر از توجهت .

moustafa
جمعه 07 اردیبهشت 1386, 14:25 عصر
بازم نیازی نیست نمونه برنامه رو در تاپیک کنترل فعالیت کاربر در اعلانات رو ببین دقیقا عینه خواسته شماست
شما در رویداد Unload فرم hisyory که مخفی شده کد مربوط به خروج کاربر رو بذار (اگه بوند کار کردی )
در غیر اینصورت اگه با رکورد ست مستقیما با جدول کار کنی نیازی به فرم هم نیست

Private Sub Form_Unload(Cancel As Integer)
DoCmd.GoToRecord acDataForm, "form1", acNewRec

Me.tim = Now()
Me.action = "exit"

MsgBox "ÒãÇä ÎÑæÌ " & Me.tim & "ËÈÊ ÑÏíÏ"


End Sub

در آخر منظورم این نیست دنبال کد یا روشی برای مخفی کردن باتن های اکسس نگردی

مهدی قربانی
شنبه 08 اردیبهشت 1386, 00:09 صبح
آقا مصطفی روشی که شما بیشنهاد دادی رو تست کردم , مشکل عدم ثبت خروج کابر بواسطه نوشتن کد مربوطه تو unload فرم history بکلی برطرف شد ممنون از راهنمایی .:تشویق:

moustafa
شنبه 08 اردیبهشت 1386, 17:52 عصر
خوشحالم ،موفق باشید