اذهب الي المحتوي
أوفيسنا

(تمت الإجابة) كود لضبط حجم الفورم بما يتناسب مع دقة الشاشة


الردود الموصى بها

السلام عليكم ورحمة الله

اخواني الأفاضل وأنا أتجول في النت وجدت كتابا لضبط حجم الفورم بحيث يتناسب مع أي شاشة

حيث يحوي الكتاب الكود الذي يتيح هذه الخاصية إلا أن هذا الكود صمم بالفيجوال بيسك 6,0

فتساءلت هل من الممكن بلورة الكود ليتناسب مع الأكسس ؟

كود لضبط حجم الفورم فى الفيجوال بيسك 6.0.rar

رابط هذا التعليق
شارك

أخي الكريم

إذا استعملت البحث في أوفيسنا ستجد روائع في هذا المجال

هذا الرابط واحد منها

http://www.officena....showtopic=31297

وأنا بطبعي أحب الاختصار

فقمت بعمل كود مختصر يقوم بنفس الغرض إن شاء الله

فقط ضع في موديول الكود التالي

Declare Function DisplaySize Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long

Function resizefrom(frm As Form, bestw As Integer, besth As Integer)

On Error Resume Next

wrate = DisplaySize(0) / bestw

hrate = DisplaySize(1) / besth

frm.InsideWidth = frm.InsideWidth * wrate

frm.InsideHeight = frm.InsideHeight * hrate

Dim fc As Control

For Each fc In frm.Controls

fc.Top = fc.Top * hrate

fc.Left = fc.Left * wrate

fc.Width = fc.Width * wrate

fc.Height = fc.Height * hrate

fc.FontSize = fc.FontSize * wrate

Next

End Function
وفي حدث عن تحميل النموذج قم باستدعاء الدالة كالتالي

resizefrom Me, 800, 600

حيث 800 في 600 هي دقة الشاشة المناسبة لعرض النموذج بدون تحجيم (يمكنك كتابة دقة الشاشة الحالية التي تصمم فيها البرنامج)

وإذا تغيرت عن هذا يتغير حجم النموذج سواء بالتكبير أو بالتصغير

جرب وأخبرني بالنتيجة

  • Like 4
رابط هذا التعليق
شارك

ألف شكر لك أخي محمد

النتيجة معقولة لكن هناك بعض المشاكل أو بالأحرى هناك بعض المتطلبات

حيث جربتها على نموذج تسجيل الدخول للمستخدمين فكانت النتائج تسر الناظرين

لكون النموذج صغير ومؤطر ومع تكبير الحجم تم دلك بسلالة ومرونة كبيرة حيث تم تكبير الازرار كذلك وتم مراعات نفس المسافة الفارقة بينهم

لكن عند تجربة الأمر على نموذج يملئ الشاشة لم تسير الامور كما في السابق

حيث لم يتم الأخد بعين الاعتبار حجم الأزرار ولا المسافة الفاصلة بينهم

أما ما كنت أبتغيه من هذا كله هو أن يتم الأخد بعين الاعتبار دقة الشاشة وعلى أساسها يتم تنسيق النموذج ليتناسب معها من دون أن يتم تغيير دقة الشاشة

أي إذا كان هناك تغيير فأفضل أن يكون على النموذج

وشكرا

رابط هذا التعليق
شارك

أخي الكريم
الكود وظيفته هي قراءة دقة الشاشة لدى المستخدم ومقارنتها بأفضل دقة وهي المحددة منك في استدعاء الدالة

resizefrom Me, 1024, 768
ثم إذا كانت غير المحددة منك يتم تغيير حجم النموذج وكل عناصره بما يتناسب مع دقة الشاشة الموجودة بجهاز المستخدم
سواء بتكبير حجم النموذج إذا كانت دقته أعلى من المحددة في الكود أو بتصغيره إذا كانت دقة أصغر من المحددة في الكود
أما بالنسبة للمسافات بين العناصر فهي أيضا تمت مراعاتها حيث يتم تحديد موضوع العنصر في النموذج بناء على دقة الشاشة
......
ويبدأ الكود ب

wrate = DisplaySize(0) / bestw
hrate = DisplaySize(1) / besth

ويعني معدل العرض يساوي ناتج قمة عرض شاشة المستخدم على أفضل عرض (المحدد في استدعاء الدالة) وكذلك معدل الارتفاع ثم

frm.InsideWidth = frm.InsideWidth * wrate
frm.InsideHeight = frm.InsideHeight * hrate

وتعني تغيير عرض النموذج إلى عرض النموذج الأصلي مضروباً في معدل العرض (المحسوب سابقاً) وكذلك تغيير ارتفاع النموذج ثم

Dim fc As Control
For Each fc In frm.Controls
fc.Top = fc.Top * hrate
fc.Left = fc.Left * wrate
fc.Width = fc.Width * wrate
fc.Height = fc.Height * hrate
Next

وتعني أنه يتم تغيير موضع كل عنصر تحكم في النموذج إلى موضعه الجديد
الناتج عن ضرب مكانه الأصلي في معدل العرض أو الارتفاع
وتم تغيير ما يلي
مكانه بالنسبة لأعلى النموذج ومكانه بالنسبة ليسار النموذج وعرضه وارتفاع
هذا هو شرح الدالة وكيفية عملها
........
ولكن ما معنى نموذج يملأ الشاشة؟؟

  • Like 2
رابط هذا التعليق
شارك

النموذج الذي يملأ الشاشة هو نموذج يطبق عليه DoCmd.Maximize

وتم التصميم على دقة 1024 768

سبق وأن كنت أعتمد تغيير دقة الشاشة الى الدقة التي صممت عليها الا وهي 1024 768

بحيث في حالة ما كانت دقة الشاشة تخالف القيمة سواءا كانت أكبر أو أقل يتم تغييرها الى 1024 768

لهذا فكرت بدل ما نغير دقة الشاشة لتتناسب مع حجم النموذج

قلت لماذا لا نغير في حجم النموذج ليتناسب مع مختلف الشاشات

أتمنى ان اكون قد وفقت في ايصال الفكرة

وشكرا لك أخي محمد على حسن المتابعة

رابط هذا التعليق
شارك

لا أدري ما الخلل عندك

فالكود يعمل معي على نماذج بها نماذج فرعية وبها قوائم وأزرار وتسميات ومعظم أنواع عناصر التحكم

ولكن جرب أن تستدعي دالة التحجيم


resizefrom Me, 1024, 768

قبل أمر التكبير

DoCmd.Maximize

......

للعلم تم تعديل الدالة للتحكم في حجم خط عنصر التحكم الذي يحتوي على نصوص ليتناسب مع تغيير حجم العنصر ودقة الشاشة

  • Like 1
رابط هذا التعليق
شارك

فقط كان يكفي أن أضعه بعد أمر التكبير ليعمل بشكل ممتاز

بالفعل نجح الأمر وأضفت الشيء الكثير لبرنامجي

شكرا شكرا جزيلا لك أخي محمد جميلك على الراس والعين

اطلب من الله ان يقدرني على رده يوما ما

دمت في ود ولهذا الصرح فخرا ومجد

رابط هذا التعليق
شارك

سلمت أناملك

الابداع تجلى في :

الضبط والاتقان بأقل عدد من الاسطر

أكرمك الله أخي الكريم أبا خليل

هذا بعض ما عندكم

  • Like 1
رابط هذا التعليق
شارك

أخي الكريم

إذا استعملت البحث في أوفيسنا ستجد روائع في هذا المجال

هذا الرابط واحد منها

http://www.officena....showtopic=31297

وأنا بطبعي أحب الاختصار

فقمت بعمل كود مختصر يقوم بنفس الغرض إن شاء الله

فقط ضع في موديول الكود التالي

Declare Function DisplaySize Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long

Function resizefrom(frm As Form, bestw As Integer, besth As Integer)

On Error Resume Next

wrate = DisplaySize(0) / bestw

hrate = DisplaySize(1) / besth

frm.InsideWidth = frm.InsideWidth * wrate

frm.InsideHeight = frm.InsideHeight * hrate

Dim fc As Control

For Each fc In frm.Controls

fc.Top = fc.Top * hrate

fc.Left = fc.Left * wrate

fc.Width = fc.Width * wrate

fc.Height = fc.Height * hrate

fc.FontSize = fc.FontSize * wrate

Next

End Function
وفي حدث عن تحميل النموذج قم باستدعاء الدالة كالتالي

resizefrom Me, 800, 600

حيث 800 في 600 هي دقة الشاشة المناسبة لعرض النموذج بدون تحجيم (يمكنك كتابة دقة الشاشة الحالية التي تصمم فيها البرنامج)

وإذا تغيرت عن هذا يتغير حجم النموذج سواء بالتكبير أو بالتصغير

جرب وأخبرني بالنتيجة

السلام عليكم

ممكن توضيح اكثر للمبتدئين اين اضع الكود الاول ... مع التقدير

رابط هذا التعليق
شارك

الاستاذ محمد صالح مع كل التقدير

هل يمكن ان نجعل هذه الارقام 1024, 768 في الكود تتغير آليا حسب دقة شاشة العميل

لماذا تحتاج لتغيير هذه الأرقام مع دقة شاشة المستخدم

هذه الأرقام تخص دقة الشاشة التي تم تصميم البرنامج عليها وتم ضبط حجم النموذج عليها

بحيث إذا كانت دقة شاشة المستخدم مساوية لها لا يتغير شيء

أما إذا كانت دقة شاشة المستخدم غير الدقة التي تم التصميم عليها يتم تغيير حجم النموذج وكل عناصره إلى ما يتناسب مع دقة شاشة المستخدم

سواء بتكبير النموذج أو تصغيره

  • Like 2
رابط هذا التعليق
شارك

اشكرك جدا جدا

بالنسية لهذين فالنتيجة %

resizefrom Me, 800, 600

resizefrom Me, 1024, 768

ولكن هناك دقة اعلى تكون النتيجة غير منضبطة خاصة مع تكبير النموذج الى الحد الاقصى

خذ مثلا عنصر تحكم مربعات الخيار فإنه يتمدد بشكل كبير خلافا للاطار العادي

اكرر شكري وتقديري

رابط هذا التعليق
شارك

أخي الكريم

برجاء توضيح مشكلتك أكثر

وإرفاق الملف الذي حدثت معه المشكلة مع توضيح دقة الشاشة التي تم تصميمه فيها

  • Like 1
رابط هذا التعليق
شارك

تفضل المرفق

ودقة الشاشة هي الموجودة في الكود

ملحوظة : لا تغير مكان المجموعة وايضا حجم النموذج لان النموذج الاصل مزدحم بعناصر اخرى

الحل الذي عملت به ان اخفي عنصر التحكم بجعله شفافا واستعين باطار عادي

db1.rar

رابط هذا التعليق
شارك

اخي العزيز..

قمت اليوم بتجربة الكود على اكثر من جهاز والنتائج كانت رائعة ..

لدي مشكلة واحدة هذه المشكلة لاتظهر في الاوفيس 2010 لكنها تظهر في ال2007

حيث بالرغم من اني عملت ارتساء لاعلى اليسار للنموذج فانه عند فتح النموذج في جهاز دقته اعلى من القياس الذي عملت به البرنامج

يظهر في البداية بالشكل التالي

11-18-2011%2012-44-57%20AM.jpg

حيث اضطر لسحب المسطرة الافقية لاظهار البرنامج .. وهذا يمثل ارباك للمستخدم

فهل يمكن تضمين الكود اي اضافة تجبر النموذج على الارتساء الى اعلى اليسار وبالتالي يظهر كامل البرنامج دون الحاجة لسحب المساطر

علما انه في 2010 فان الامور تمام ولايحتاج لسحب المسطرة لانه يكون مرتسيا الى اقصى اليسار واعلى نقطة

رابط هذا التعليق
شارك

تفضل المرفق

ودقة الشاشة هي الموجودة في الكود

ملحوظة : لا تغير مكان المجموعة وايضا حجم النموذج لان النموذج الاصل مزدحم بعناصر اخرى

الحل الذي عملت به ان اخفي عنصر التحكم بجعله شفافا واستعين باطار عادي

أخي الكريم كابون

يبدو أنك لم تقرأ جيداً المشاركات رقم 5 و 6 و 6 في هذا الموضوع

فقد كان الحل مع مشكلة مثل مشكلتك وضع كود التحجيم قبل كود التكبير

أنا فتحت النموذج الخص بك ولم أجد فيه اي مشاكل

تم تحجيم النموذج حسب دقة شاشتي 1280 * 1024 ولا يوجد مشكلة سوى أنك استعملت شرائط التمرير

يعني وأنت تصمم النموذج ضيقت حدود النموذج عن محتوياته

هذا بالإضافة لوضع كود التحجيم قبل كود التكبير

جرب وأخبرني بالنتيجة

  • Like 2
رابط هذا التعليق
شارك

بالنسبة للأخ lordring

يفضل إرفاق الملف الذي به المشكلة لتجريبه

رابط هذا التعليق
شارك

استاذي قرأت المشاركات جيدا وجربت قبل ان اكتب فليس هناك فرق في التقديم او التأخير ( لدي خاصة )

ولكن يبدوا انك لم تلحظ المشكلة التي طرحتها

المرفق الآن اضفت اليه اطار بالحجم نفسه افتح النموذج اولا على عرض التصميم لترى الحجم الطبيعي ثم افتحه للعرض لترى الفرق

db1.rar

رابط هذا التعليق
شارك

أخي الكريم lording

جرب أن تجعل خاصية auto resize (تحجيم تلقائي) إلى no (لا)

واجعل خاصية scroll bars (شريط التمرير ) إلى neither (لا هذا ولا ذاك)

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information