PDA

View Full Version : سوال: تغییر اندازه ناخواسته فرمها . چرا ؟؟؟



Rasool-GH
چهارشنبه 27 آبان 1394, 20:51 عصر
سلام خدمت عزیزان
در طراحی اینترفیس از فرمهای به شکل پاپ اپ استفاده کردم و محیط اکسس رو مخفی کردم . مشکل اینجاست که وقتی خاصیت تغییر سایز فرم رو غیر فعال میکنم در بعضی از سیستمها حتی با نسخه افیس مشابه بعضی از فرمها تغییر سایز میدن و خیلی کوچک باز میشن . تغریبا 2سانت در 2 سانت .

کسی تا بحال برخورد کرده ؟ علت این اتفاق چیه ؟

saeed28541
چهارشنبه 27 آبان 1394, 23:32 عصر
سلام. من هم این مشکل را دارم وفکر کنم به رزولیشن صفحه نمایش ربط داشته.
یک کد دیدم که بر حسب رزولیشن صفحه نمایش سایز فرم ها را تغییر میداد.
اگه پیداش کنم لینکش را میزارم.

Rasool-GH
پنج شنبه 28 آبان 1394, 09:01 صبح
نه به رزولیشین مربوط نیست . این مورد تست شده . یا به کرک افیس و نسخه اون مربوط میشه یا api های ویندوز تاثیر دارن

abas1388
پنج شنبه 28 آبان 1394, 11:46 صبح
سلام خدمت عزیزان
در طراحی اینترفیس از فرمهای به شکل پاپ اپ استفاده کردم و محیط اکسس رو مخفی کردم . مشکل اینجاست که وقتی خاصیت تغییر سایز فرم رو غیر فعال میکنم در بعضی از سیستمها حتی با نسخه افیس مشابه بعضی از فرمها تغییر سایز میدن و خیلی کوچک باز میشن . تغریبا 2سانت در 2 سانت .

کسی تا بحال برخورد کرده ؟ علت این اتفاق چیه ؟

سلام
فکر کنم علت در این سایت (http://stackoverflow.com/questions/6351081/ms-access-forms-resize-when-modal-and-popup-are-set-to-true) توضیح داده شده است.
بنده ترجمه انگلیسیم ضعیفه .لطفاً دوستانی که در خصوص ترجمه مشکلی ندارند توضیحات را ترجمه و در اختیار سایرین قرار بدهند .
آقای سعید نادری اگه باشند لطف می کنند و زحمت اینکار را می کشند .
موفق باشید

Rasool-GH
پنج شنبه 28 آبان 1394, 11:56 صبح
I would say that the issue could come from Auto Resize = No.
Set it to Yes instead.
The documentation for Form.AutoResize says that:

If you make any changes in Design view to a form whose AutoResize property is set to No and whose AutoCenter property is set to Yes, switch to Form view before saving the form. If you don't, Microsoft Access clips the form on the right and bottom edges the next time you open the form.
And if the Form.AutoResize is set to No:

When opened, the Form window has the last saved size. To save a window's size, open the form, size the window, save the form by clicking Save on the File menu, and close the form or report. When you next open the form or report, it will be the saved window size.



مطلب خوبی بود .
ضمن این که اشاره شده که تا جای ممکن فرم رو به صورت مدول و پاپ اپ ست نکنید (ما همیشه این کار رو انجام میدیم ) در صورت لزوم خاصیت تغییر سایز اتوماتیک را غیر فعال کنید (Auto Resize)

این کار مشکل تغیرات ناخواسته رو از بین میبره ولی باید دقت بشه که خاصیت Auto Center فرم فعال باشه و ضمنا باید اندازه فرم در طراحی دقیق تعیین بشه (یکم محیط طراحی رو میبنده)

alirezabahrami
پنج شنبه 28 آبان 1394, 14:33 عصر
مطلب خوبی بود .
ضمن این که اشاره شده که تا جای ممکن فرم رو به صورت مدول و پاپ اپ ست نکنید (ما همیشه این کار رو انجام میدیم ) در صورت لزوم خاصیت تغییر سایز اتوماتیک را غیر فعال کنید (Auto Resize)

این کار مشکل تغیرات ناخواسته رو از بین میبره ولی باید دقت بشه که خاصیت Auto Center فرم فعال باشه و ضمنا باید اندازه فرم در طراحی دقیق تعیین بشه (یکم محیط طراحی رو میبنده)


سلام
چرا جهت جلوگیری از تغییرات ناخواسته و احتمالی دراندازه فرم ، با استفاده از دستور DoCmd.MoveSize یا Me.Move در رویداد Form_Resize موقعیت و اندازه فرم را تثبیت نمی کنید ؟
یا علی

Rasool-GH
پنج شنبه 28 آبان 1394, 21:31 عصر
ممنون جناب بهرامی . دلیلیش اینه که بیشتر مایلم فرمها با ایجاد تغییرات سازگار بشن و نیازی نباشه که هر بار که تغییری در فرم میدم و سایزش عوض میشه در کد اونها تغییرات رو اعمال کنم .

اگر امکان داره یک نمونه از کدی که فرمودید هم قرار بدین . ممنون

alirezabahrami
جمعه 29 آبان 1394, 00:25 صبح
ممنون جناب بهرامی . دلیلیش اینه که بیشتر مایلم فرمها با ایجاد تغییرات سازگار بشن و نیازی نباشه که هر بار که تغییری در فرم میدم و سایزش عوض میشه در کد اونها تغییرات رو اعمال کنم .

اگر امکان داره یک نمونه از کدی که فرمودید هم قرار بدین . ممنون
سلام
تغییرات در اندازه فرم که خیلی صورت نمیگیرد که تغییر درکد سخت باشد ، آنچه که اهمیت داره اجرای صحیح فرم در سایز مورد نظر می باشد .
علی ایحال کد تغییر سایز فرم درحالت Me.Move بصورت زیر است :



Me.Move Left:=0, top:=0, Width:=5670 , Height:=5670

همانطور که مشخص است مقدار Left نشان دهنده فاصله فرم از سمت چپ ، top فاصله فرم از بالا ، Width اندازه طول و Height عرض فرم میباشد.
باید توجه داشت که اندازه فرم بر حسب واحدtwip بدست می آید و اندازه twips برحسب اینچ ، میلیمتر و سانتیمتر بصورت زیر است :



1000 twips = 2.54 cm
1000 twips = 25.4 mm
1 Inch = 2.54 cm
1 cm = 567 twips

لذا شما اگر بخواهید طول و عرض فرمت 10 سانتیمتر باشد (بصورت مربع) باید در کد با لا ، مقابل Width و Height عدد 5670 قرار بدهید و چون می خواهید فرم شما در وسط دسکتاپ به نمایش در آید انداز Left و top را باید خالی بگذازید
البته چون در حالت Me.Move مقدار همه موارد باید مشخص باشد از DoCmd.MoveSize فرم استفاده کنید بهتر است !
بصورت زیر :


DoCmd.MoveSize , , 5670, 5670

وبدیهی است که خصوصیت Atuo center فرم هم باید درحالت true باشد.
همانطور که در پست قبل هم اشاره کردم کد فوق رامیتوانید در رویداد های Form_Load و Form_Open یا Form_Resize قرار بدهیدو ترجیحاً بهتر است در رویداد Form_Resize باشد .
موفق باشید

Rasool-GH
جمعه 29 آبان 1394, 09:33 صبح
خیلی لطف کردی جناب بهرامی .
مطالب مفیدی بود

لطفا در مورد این متن توضیح کوتاهی بدین .
آیا منظور اینه که اگر یک متغییر عمومی داشته باشیم و در یک تابع بخوایم یک متغییر با همون نام تعریف کنیم که از داده متغییر عمومی استفاده نکنه باید از نوع استاتیک به جای دیم استفاده بشه ؟


136911

abas1388
جمعه 29 آبان 1394, 11:39 صبح
خیلی لطف کردی جناب بهرامی .
مطالب مفیدی بود

لطفا در مورد این متن توضیح کوتاهی بدین .
آیا منظور اینه که اگر یک متغییر عمومی داشته باشیم و در یک تابع بخوایم یک متغییر با همون نام تعریف کنیم که از داده متغییر عمومی استفاده نکنه باید از نوع استاتیک به جای دیم استفاده بشه ؟


136911
سلام آقا Rasool-GH
آیا این سوال ارتباطی با عنوان تاپیک (تغییر اندازه ناخواسته فرمها . چرا ؟؟؟ ) داره ؟
با تشکر

Rasool-GH
جمعه 29 آبان 1394, 12:31 عصر
یه ربط کوچیک داره . میخوام یه متغیر عمومی تعریف کنم و اندازه فرمها رو داخل اون قرار بدم و در مواقع مورد نیاز اندازه انحصاری رو اعمال کنم

alirezabahrami
جمعه 29 آبان 1394, 12:43 عصر
خیلی لطف کردی جناب بهرامی .
مطالب مفیدی بود

لطفا در مورد این متن توضیح کوتاهی بدین .
آیا منظور اینه که اگر یک متغییر عمومی داشته باشیم و در یک تابع بخوایم یک متغییر با همون نام تعریف کنیم که از داده متغییر عمومی استفاده نکنه باید از نوع استاتیک به جای دیم استفاده بشه ؟


136911
سلام
هر چند نباید این سوال را اینجامطرح میکردی ولی پاسخی مختصر ارائه میشود :
متغیر static با متغیر محلی Dim یکی است و تقریباً تمام ویژگیهایشان مساوی است فقط با این تفاوت كه پس از خاتمه اجراي رويه اي كه در آن تعريف شده اند، مقدار آن ها درحافظه از بين نمي رود و در اجراي بعدي رويه مربوطه مي توانيد از مقادير قبلي متغير استفاده كنيد
برای درک بهتر یک مثال کوچک می زنم .
کدهای زیر را در رویداد کلیک یک کمند بانن قرار بده و آن را اجراء کن :


Dim a As Integer
a = a + 1
MsgBox a

حالا همین کد را در رویداد کلیک یک کمند باتن دیگر قرار بده و بجای متغیر Dim از Static استفاده کن
چه تغییری در اجرا کلیک دو کمند باتن مشاهده کردی ؟
بله ، درحالت اول با هر بار کلیک خروجی فقط عدد 1 است ولی در حالت دوم میبینید که خروجی ها با هم فرق می کند .
پس نتیجه می گیریم :

اگر درون تابعی متغیری را بصورت Static تعریف نماییم و مقدار این متغیر طی عملیات تابع تغییر نماید در هرفراخوانی متغیر یاد شده با آخرین مقدارخود در محاسبات شرکت میکند.
این مورد بر خلاف تعریف متغییر بوسیله دستور Dim است . چون در Dim متغییر بمحض تعریف شدن دوباره ، مقدار قبلی خود را از دست میدهد.
به عبارتی عامیانه ، متغیر Static حافظه دار است و خاطرات کلیک قبلی یادش مانده ولی متغیر Dim مثل من خنگ است و از گذشته خودش چیزی یادش نیست .
یا علی

صبا9841
جمعه 29 آبان 1394, 14:08 عصر
سلام
چرا جهت جلوگیری از تغییرات ناخواسته و احتمالی دراندازه فرم ، با استفاده از دستور DoCmd.MoveSize یا Me.Move در رویداد Form_Resize موقعیت و اندازه فرم را تثبیت نمی کنید ؟
یا علی
باسلام- روی فرم لاگین یه برنامه بعد از تایپ پسورد کاربر، ارتفاع فرم رو افزایش میکرد. تا اینجا مشکلی نبود ولی همیکه با ویندوز7 برنامه لود میشد ارتفاع(Height) جواب نمیداد. ناچارا از خیرش گذشتم!!! شاید بدونید بدرد بخوره...:متعجب:

alirezabahrami
جمعه 29 آبان 1394, 16:06 عصر
ولی همیکه با ویندوز7 برنامه لود میشد ارتفاع(Height) جواب نمیداد. :متعجب:
سلام صبا !
باورمی کنید اصلاً متوجه مشکلی که اشاره کرده اید نشدم ، ممکنه بیشتر توضیح دهید !
متشکر

Rasool-GH
جمعه 29 آبان 1394, 16:11 عصر
باسلام- روی فرم لاگین یه برنامه بعد از تایپ پسورد کاربر، ارتفاع فرم رو افزایش میکرد. تا اینجا مشکلی نبود ولی همیکه با ویندوز7 برنامه لود میشد ارتفاع(Height) جواب نمیداد. ناچارا از خیرش گذشتم!!! شاید بدونید بدرد بخوره...:متعجب:

بنده هم در ویندوز 7 به این مشکل تغییر ناخواسته اندازه برخورد کردم تو XP این مشکل نبود (حداقل برای من پیش نیومده بود ) واسه همین فکر کردم شاید ریشه مشکل به API های ویندوز برگرده

rero.639
جمعه 29 آبان 1394, 17:08 عصر
سلام دوستان
یه سوال برای من خیلی وقته که پیش اومده البته میدونم که جاش اینجا نیست اما خواستم تو این پست که دوستان زیادی حضور دارن مطرح کنم
" به نظر شما بهتره از چه نسخه ای از آفیس استفاده کنیم؟"
من نسخه های مختلفی رو استفاده کردم اما خواستم نظر شما رو هم جویا باشم. تو سایت یه مدل آفیس 2010 وجود داره با حجم حدود 3گیگ یه مدلشم هست با حجم 900 مگ هر دوتا مدل هم فوله اما نمیدونم چرا اینقدر حجمش کمه
ممنون میشم
سپاس

Rasool-GH
جمعه 29 آبان 1394, 17:53 عصر
به نظر من بعد از 2003 فقط 2010 .

nazanin_90
جمعه 29 آبان 1394, 19:46 عصر
باسلام- روی فرم لاگین یه برنامه بعد از تایپ پسورد کاربر، ارتفاع فرم رو افزایش میکرد. تا اینجا مشکلی نبود ولی همیکه با ویندوز7 برنامه لود میشد ارتفاع(Height) جواب نمیداد. ناچارا از خیرش گذشتم!!! شاید بدونید بدرد بخوره...:متعجب:



سلام صبا !
باورمی کنید اصلاً متوجه مشکلی که اشاره کرده اید نشدم ، ممکنه بیشتر توضیح دهید !
متشکر

بنده هم در ویندوز 7 به این مشکل تغییر ناخواسته اندازه برخورد کردم تو XP این مشکل نبود (حداقل برای من پیش نیومده بود ) واسه همین فکر کردم شاید ریشه مشکل به API های ویندوز برگرده
سلام
بنده راهکاری که جناب بهرامی پیشنهاد دادند بکار بستم و مشکلی در هر دو ویندوز ایکس پی و سون ندیم .
دوستان اگر مشکل خاصی در این مورد وجود دارد لطفاً نمونه فایل را با توضیحات کافی ارائه نمایند تا انشاءالله اساتید راهکار لازم را ارائه نمایند .
با تشکر

Rasool-GH
جمعه 29 آبان 1394, 20:45 عصر
یه سوال دیگه هم دارم که لطفا دوستان پاسخ بدن . چه تفاوت اساسی بین مد Dialog و Thin وجود داره .
این مشکل تغییر سایز در حالت Thin برام پیش اومده و در فرمهای Dialog تا به حال به این مشکل بر خورد نکردم . امکان داره این اشکال مربوط به حالت Thin فرم باشه ؟

اصلاحیه : ظاهرا این اشکال در فرمهایی که Screen To Fit فعال باشه پیش نمیاد .

Rasool-GH
شنبه 30 آبان 1394, 09:54 صبح
برای نمونه هم که دوست عزیزمون فرمودند عرض کنم که نمونه نمیشه گذاشت . بدلیل اینکه توی همه سیستمها مشکل بروز نمیکنه . یعنی همون فایل که توی یک سیستم مشکل داره وقتی منتقلش میکنم به یک سیستم دیگه درست کار میکنه

alirezabahrami
شنبه 30 آبان 1394, 11:48 صبح
سلام صبا !
باورمی کنید اصلاً متوجه مشکلی که اشاره کرده اید نشدم ، ممکنه بیشتر توضیح دهید !
متشکر
سلام
متأسفانه بعضی از دوستان عزیز در گرفتن جواب خیلی صبور نیستند . با توجه به اینکه بعضی از اشکالات و ایراداتی که بطور ناخواسته در اکسس پیدا میشود باید همه جانبه ریشه یابی و برای رفع آن راهکار ارائه گردد لازم است دوستان ، ایراد مربوطه را خیلی واضح و ترجیحاً با ارائه نمونه توضیح بدهند و انتظار این را نداشته باشند که با یک راهکار پیشنهادی اشکال و ایراد مورد نظر باید برطرف شود . بعضی مواقع پیش می آید که برای رفع یک اشکال یک راهکار ارائه میشود ولی طریقه بکار بستن آن راهکار از طرف سوال کننده اشتباه می باشد یا برای اجرای صحیح آن راهکار آیتم یا آیتم هائی دیگری نیز تغییر کند که به آنها توجه نشده .
باز هم تکرار می کنم که بنده هنوز متوجه ایراد کار ( بعد از ارائه راهکار پست 8) نشده ام .
یا علی

Rasool-GH
شنبه 30 آبان 1394, 11:55 صبح
سلام جناب بهرامی
راهکار مناسب بود . ریشه ایراد نامشخص هست .

صبا9841
یک شنبه 01 آذر 1394, 20:47 عصر
باسلام
با پوزش از تاخیر در جواب... طبق فرمایش جناب بهرامی:

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

قبلا تصورم این بود که اشکال فرم رسایز شده در برنامه mde شده ناشی از کابرد اون با آفیس 2003 در ویندوز7 بود ولی این اشکال با آفیس2013 توی ویندوز 7 هم برقرار بود. لازم بذکره auto Resize فرم لاگین(فرم مورد نظر) true بود

Rasool-GH
یک شنبه 01 آذر 1394, 21:25 عصر
باسلام
با پوزش از تاخیر در جواب... طبق فرمایش جناب بهرامی:


قبلا تصورم این بود که اشکال فرم رسایز شده در برنامه mde شده ناشی از کابرد اون با آفیس 2003 در ویندوز7 بود ولی این اشکال با آفیس2013 توی ویندوز 7 هم برقرار بود. لازم بذکره auto Resize فرم لاگین(فرم مورد نظر) true بود

تا اینجا بنده به این نتیجه رسیدم که دو خاصیت Auto Risaze و Screen To Fit باید فعال باشه . البته این گزینه دوم در 2003 موجود نیست و از 2007 به بعد ایجاد شده