PDA

View Full Version : معادل دستور Screen.Width در اکسس



Sahand87
شنبه 03 اردیبهشت 1390, 00:32 صبح
سلام

معادل درستور Screen.Width که در VB برای بدست آوردن عرض صفحه نمایش (دسکتاپ) استفاده می شود در اکسس از چه دستوری باید استفاده کرد.

amirzazadeh
شنبه 03 اردیبهشت 1390, 08:25 صبح
سلام
شايد اين كد بتونه كمكتون كنه:

Option Explicit
Private Declare Function GetSystemMetrics Lib _
"User32" (ByVal nIndex As Long) As Long
Private Const SM_CXSCREEN = 0
Private Const SM_CYSCREEN = 1

Public Function ScreenHeight() As Long
ScreenHeight = GetSystemMetrics(SM_CYSCREEN)
End Function

Public Function ScreenWidth() As Long
ScreenWidth = GetSystemMetrics(SM_CXSCREEN)
End Function
لينك منبع (http://www.pcreview.co.uk/forums/get-screen-resolution-vba-t3224107.html)

Sahand87
شنبه 03 اردیبهشت 1390, 20:42 عصر
سلام
شايد اين كد بتونه كمكتون كنه:

Option Explicit
Private Declare Function GetSystemMetrics Lib _
"User32" (ByVal nIndex As Long) As Long
Private Const SM_CXSCREEN = 0
Private Const SM_CYSCREEN = 1

Public Function ScreenHeight() As Long
ScreenHeight = GetSystemMetrics(SM_CYSCREEN)
End Function

Public Function ScreenWidth() As Long
ScreenWidth = GetSystemMetrics(SM_CXSCREEN)
End Function
لينك منبع (http://www.pcreview.co.uk/forums/get-screen-resolution-vba-t3224107.html)
سلام
دوست عزیزمن معادل خروجی Screen.Width در vb را برای تعیین موقعیت فرم در صفحه نمایش میخوام البته شاید به نوعی مقدار پیکس عرض صفحه نمایش را شاید بشود تبدیل به سانتی متر یا دسیمتر کرد.چون خروجی Screen.Width به پیکسل نیست .

payman_xxp
شنبه 03 اردیبهشت 1390, 22:07 عصر
سلام
دوست عزیزمن معادل خروجی Screen.Width در vb را برای تعیین موقعیت فرم در صفحه نمایش میخوام البته شاید به نوعی مقدار پیکس عرض صفحه نمایش را شاید بشود تبدیل به سانتی متر یا دسیمتر کرد.چون خروجی Screen.Width به پیکسل نیست .
سلام
برای تعیین موقعیت فرم از این دستور استفاده کنید:
DoCmd.MoveSize(Right, Down, Width, Height)
مقدار این 4 متغییر به پیکسل باید واردشه.
موفق باشید.

Sahand87
یک شنبه 04 اردیبهشت 1390, 22:42 عصر
سلام
برای تعیین موقعیت فرم از این دستور استفاده کنید:
DoCmd.MoveSize(Right, Down, Width, Height)
مقدار این 4 متغییر به پیکسل باید واردشه.
موفق باشید.

سلام
دوست عزیز شما مثل اینکه منظور من را متوجه نشدید .
منظور من تعیین موقعیت فرم با رزولیشن های مختلف است که در صورت تغییر رزولیشن جدید نیاز به تعیین موقعیت جدید نباشه
با دستور MoveSize اگر دو متغیر آخر را جهت موقعیت فرم تعیین کنید در صورت تغییر رزولیشن موقعیت فرم در صفحه دسکتاپ تغییرمی کند.

RESMAILY
دوشنبه 05 اردیبهشت 1390, 08:11 صبح
به نام خدا
با سلام

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

منظورتان را واضح طرح نكرده ايد. تعيين موقعيت به نسبت چه چيز؟ يعني شما به كمك دستوراتي كه دوستان نوشته اند و يافتن نقطه مختصات مورد نظر مي توانيد به مقصود برسيد.
اما يافتن نقطه مختصات به هدف شما بستگي دارد. مثلا ايا اين نقطه گوشه يك فرم ديگر است؟ گوشه يك كنترل درون يك فرم ديگر است؟ ويا آنكه چه. سپس با دستور Move فرم را در وضعيت مربوطه قرار بدهيد. اين قصه ارنباطي با رزوليشن هاي متفاوت ندارد. عبارات كليدي آن هم windowTop يا WindowLeft در مشخصات فرم مربوطه مي باشد.
اما شايد بخواهيد «تغيير اندازه» هم داشته باشيد. در اينصورت موضوع فرق مي كند و قدري كار مي برد.

Sahand87
دوشنبه 05 اردیبهشت 1390, 22:58 عصر
به نام خدا
با سلام

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

منظورتان را واضح طرح نكرده ايد. تعيين موقعيت به نسبت چه چيز؟ يعني شما به كمك دستوراتي كه دوستان نوشته اند و يافتن نقطه مختصات مورد نظر مي توانيد به مقصود برسيد.
اما يافتن نقطه مختصات به هدف شما بستگي دارد. مثلا ايا اين نقطه گوشه يك فرم ديگر است؟ گوشه يك كنترل درون يك فرم ديگر است؟ ويا آنكه چه. سپس با دستور Move فرم را در وضعيت مربوطه قرار بدهيد. اين قصه ارنباطي با رزوليشن هاي متفاوت ندارد. عبارات كليدي آن هم windowTop يا WindowLeft در مشخصات فرم مربوطه مي باشد.
اما شايد بخواهيد «تغيير اندازه» هم داشته باشيد. در اينصورت موضوع فرق مي كند و قدري كار مي برد.

سلام

دوستان لطف کردندپاسخ دادند ولی پاسخ دوستان جواب سوال بنده نیست در پست اول سوال شد (برای بدست آوردن عرض صفحه نمایش (دسکتاپ)) . ودر پستهای بعدی دقیق تر اشاره شد وقتی منظور موقعیت فرم با صفحه نمایش دسکتاپ است بدیهی است که منظور برنامه اصلی اکسس یا هر کدام از آبجکتهای دیگر آن نسبت به همدیگر نیست بلکه فقط منظور نظر موقعیت فرم درصفحه دسکتاپ است مثلا گوشه سمت راست چسبیده به تسکبار و هیچ ارتباطی به آبجکتهای دیگر اکسس ندارد یا درحالت بهتر اکسس در موقیت پنهان باشد و فقط فرم مورد نظر درحالت نمایش قرار گیرد .
درمورد پاسخ بعدی که ارتباطی به رزولیشن ندارد
جواب : چرادارد
شما اگر موقیت فرم را در منتها الیه سمت راست دسکتاپ چسبیده به تسکبارتعریف کنید با تغییر رزولیشن متوجه خواهید شد که در صورت تعیین موقعیت فرم درحالت استاتیک با تغییر رزولیشن فرم شما موقعیت مورد نظر شمارانخواهد داشت و در موقعیت دیگر قرار خواهد گرفت .
از عنوان تاپیک هم مشخص است (معادل دستور Screen.Width در اکسس ) هیچکدام از دستورات بیان شده معادل خروجی Screen.Width که در vb برای تعیین موقعیت فرم در صفحه دسکتاپ استفاده می شود نمیدهد .
موفق باشید

RESMAILY
سه شنبه 06 اردیبهشت 1390, 08:13 صبح
به نام خدا
با سلام. همانطور كه عرض شد بايد ديد كه موقعيت فرم نسبت به چه چيزمورد نظر است. مي توانستيد از ابتدا بنويسيد كه مشكل در نگاه داشتن فرم در منتهااليه سمت راست است. سمت چپ كه 0 و0 است
احتمال مي دهم به طريق زير موضع حل شود. نشد بفرماييد تا يكي دونمونه برايتان آپ كنم.
windowleft فرم مربوطه را در رزوليشن مورد نظر وپايه بدست آوريدو ياجايي ثبت بفرماييد. سپس آن را در نسبت عددي رزوليشن جديد به رزوليشن پايه ضرب كرده و مقدار دهي بفرماييد. top=0 و left=مقدار جديد. مثل اين

Private Sub Form_Open(Cancel As Integer)
'15 twips = 1 pixel 1440 twips = 1 inch
X = ScreenWidth * 15
y = Me.WindowWidth
Me.Move X - y, 0
End Sub


در عين حال وقتي mdi آكسس پنهان هم كه باشد شما مي توانيد از اين روش استفاده بفرماييد.

Sahand87
سه شنبه 06 اردیبهشت 1390, 11:40 صبح
سلام
با تشکر از پاسختون



دوست عزیز عرض کردم بعنوان مثال موقعیت فرم در منتها الیه سمت راست باشد و نیازمند رویه ای کلی است که دربرگیرنده کل حالات قرارگیری فرم در صفحه نمایش می باشد لذا مشکل بصورت کلی بیان شد .
خروجی ScreenWidth ملاک اصلی تعیین موقیت فرم در عرض صفحه نمایش است پس نمونه صحیح آن (15* عرض صفحه نمایش به پیکسل = ScreenWidth) مقدار ScreenWidth ضربدر15 جواب نمی دهد .من خودم به این نتیحه ضریب پانزده رسیده بودم ولی روی صفحه دسکتاپ من جواب نمیداد نمونه ضمیمه راتوجه فرمائید .

RESMAILY
سه شنبه 06 اردیبهشت 1390, 13:32 عصر
به نام خدا
باسلام. تغييرات را مشاهده نماييد. البته دوستان كمك كنند تا تكميل شود بد نيست.

Sahand87
سه شنبه 06 اردیبهشت 1390, 14:50 عصر
سلام

ذکر یک نکته ضروری است که در فایلهای ضمیمه قرار گیری فرم درحالت ماکسیمایز اکسس تا حدودی بهتر جواب میدهد (نه کاملا)
درحالت Left اگر موقعیت صفر تعیین گردد کاملا در گوشه قرار نخواهد گرفت و دلیل آن (تعیین موقعیت فرم )با دستور Move بازهم تابع خود برنامه اکسس است نه صفحه دسکتاپ ، و اگر اکسس درحالت Rrstor باشد به همان اندازه که صفحه برنامه اکسس کوچکتر باشد به همان اندازه قرار گیری فرم به خارج از صفحه دسکتاپ فرستاده می شود.

جهت نمایش بهتر موارد فوق برنامه اکسس باید درحالت پنهان باشد تا این نقطه ضعف روشن شود .
البته منظور از سوال معال Screen.Width زبان vb در اکسس همان(Screen.Width= عرض صفحه (دسکتاپ)به پیکسل *15) که در فانکشن شما ScreenWidth نام فانگشن که همان عرض صفحه نمایش است به پیکسل بدست می آید .
این را به این جهت گفتم که برداشت اشتباه نشود ScreenWidth با منظور من Screen.Width فرق دارد

Sahand87
سه شنبه 06 اردیبهشت 1390, 16:50 عصر
سلام

این هم مورد کاملتر که جهت قرار گیری فرم در صفحه نمایش از دستور Left , Top استفاده شده است .

nazanin_90
چهارشنبه 19 مرداد 1390, 22:17 عصر
سلام

این هم مورد کاملتر که جهت قرار گیری فرم در صفحه نمایش از دستور Left , Top استفاده شده است .

باسلام
با استفاده از کدی که در این نمونه بکار رفته چه تغییری در مقدار آن باید داده شود که فرم کاملاً در وسط مانیتور ( همه نوع مانیتور) قرار بگیرد؟
با تشکر

RESMAILY
پنج شنبه 20 مرداد 1390, 08:03 صبح
به نام خدا
با سلام. فرم خودش در وسط mdi آكسس قرار مي گيرد. براي وسط مونتور بايد قدري به top اضافه شود.