الصمت المتحدث قام بنشر نوفمبر 14, 2011 قام بنشر نوفمبر 14, 2011 السلام عليكم ورحمة الله اخواني الأفاضل وأنا أتجول في النت وجدت كتابا لضبط حجم الفورم بحيث يتناسب مع أي شاشة حيث يحوي الكتاب الكود الذي يتيح هذه الخاصية إلا أن هذا الكود صمم بالفيجوال بيسك 6,0 فتساءلت هل من الممكن بلورة الكود ليتناسب مع الأكسس ؟ كود لضبط حجم الفورم فى الفيجوال بيسك 6.0.rar
أ / محمد صالح قام بنشر نوفمبر 15, 2011 قام بنشر نوفمبر 15, 2011 أخي الكريم إذا استعملت البحث في أوفيسنا ستجد روائع في هذا المجال هذا الرابط واحد منها 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 هي دقة الشاشة المناسبة لعرض النموذج بدون تحجيم (يمكنك كتابة دقة الشاشة الحالية التي تصمم فيها البرنامج) وإذا تغيرت عن هذا يتغير حجم النموذج سواء بالتكبير أو بالتصغير جرب وأخبرني بالنتيجة 4
الصمت المتحدث قام بنشر نوفمبر 15, 2011 الكاتب قام بنشر نوفمبر 15, 2011 ألف شكر لك أخي محمد النتيجة معقولة لكن هناك بعض المشاكل أو بالأحرى هناك بعض المتطلبات حيث جربتها على نموذج تسجيل الدخول للمستخدمين فكانت النتائج تسر الناظرين لكون النموذج صغير ومؤطر ومع تكبير الحجم تم دلك بسلالة ومرونة كبيرة حيث تم تكبير الازرار كذلك وتم مراعات نفس المسافة الفارقة بينهم لكن عند تجربة الأمر على نموذج يملئ الشاشة لم تسير الامور كما في السابق حيث لم يتم الأخد بعين الاعتبار حجم الأزرار ولا المسافة الفاصلة بينهم أما ما كنت أبتغيه من هذا كله هو أن يتم الأخد بعين الاعتبار دقة الشاشة وعلى أساسها يتم تنسيق النموذج ليتناسب معها من دون أن يتم تغيير دقة الشاشة أي إذا كان هناك تغيير فأفضل أن يكون على النموذج وشكرا
أ / محمد صالح قام بنشر نوفمبر 15, 2011 قام بنشر نوفمبر 15, 2011 أخي الكريم الكود وظيفته هي قراءة دقة الشاشة لدى المستخدم ومقارنتها بأفضل دقة وهي المحددة منك في استدعاء الدالة 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 وتعني أنه يتم تغيير موضع كل عنصر تحكم في النموذج إلى موضعه الجديد الناتج عن ضرب مكانه الأصلي في معدل العرض أو الارتفاع وتم تغيير ما يلي مكانه بالنسبة لأعلى النموذج ومكانه بالنسبة ليسار النموذج وعرضه وارتفاع هذا هو شرح الدالة وكيفية عملها ........ ولكن ما معنى نموذج يملأ الشاشة؟؟ 2
الصمت المتحدث قام بنشر نوفمبر 15, 2011 الكاتب قام بنشر نوفمبر 15, 2011 النموذج الذي يملأ الشاشة هو نموذج يطبق عليه DoCmd.Maximize وتم التصميم على دقة 1024 768 سبق وأن كنت أعتمد تغيير دقة الشاشة الى الدقة التي صممت عليها الا وهي 1024 768 بحيث في حالة ما كانت دقة الشاشة تخالف القيمة سواءا كانت أكبر أو أقل يتم تغييرها الى 1024 768 لهذا فكرت بدل ما نغير دقة الشاشة لتتناسب مع حجم النموذج قلت لماذا لا نغير في حجم النموذج ليتناسب مع مختلف الشاشات أتمنى ان اكون قد وفقت في ايصال الفكرة وشكرا لك أخي محمد على حسن المتابعة
أ / محمد صالح قام بنشر نوفمبر 16, 2011 قام بنشر نوفمبر 16, 2011 لا أدري ما الخلل عندك فالكود يعمل معي على نماذج بها نماذج فرعية وبها قوائم وأزرار وتسميات ومعظم أنواع عناصر التحكم ولكن جرب أن تستدعي دالة التحجيم resizefrom Me, 1024, 768 قبل أمر التكبير DoCmd.Maximize ...... للعلم تم تعديل الدالة للتحكم في حجم خط عنصر التحكم الذي يحتوي على نصوص ليتناسب مع تغيير حجم العنصر ودقة الشاشة 1
الصمت المتحدث قام بنشر نوفمبر 16, 2011 الكاتب قام بنشر نوفمبر 16, 2011 فقط كان يكفي أن أضعه بعد أمر التكبير ليعمل بشكل ممتاز بالفعل نجح الأمر وأضفت الشيء الكثير لبرنامجي شكرا شكرا جزيلا لك أخي محمد جميلك على الراس والعين اطلب من الله ان يقدرني على رده يوما ما دمت في ود ولهذا الصرح فخرا ومجد
ابوخليل قام بنشر نوفمبر 16, 2011 قام بنشر نوفمبر 16, 2011 سلمت أناملك الابداع تجلى في : الضبط والاتقان بأقل عدد من الاسطر 1
أ / محمد صالح قام بنشر نوفمبر 16, 2011 قام بنشر نوفمبر 16, 2011 سلمت أناملك الابداع تجلى في : الضبط والاتقان بأقل عدد من الاسطر أكرمك الله أخي الكريم أبا خليل هذا بعض ما عندكم 1
lordring قام بنشر نوفمبر 16, 2011 قام بنشر نوفمبر 16, 2011 أخي الكريم إذا استعملت البحث في أوفيسنا ستجد روائع في هذا المجال هذا الرابط واحد منها 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 هي دقة الشاشة المناسبة لعرض النموذج بدون تحجيم (يمكنك كتابة دقة الشاشة الحالية التي تصمم فيها البرنامج) وإذا تغيرت عن هذا يتغير حجم النموذج سواء بالتكبير أو بالتصغير جرب وأخبرني بالنتيجة السلام عليكم ممكن توضيح اكثر للمبتدئين اين اضع الكود الاول ... مع التقدير
lordring قام بنشر نوفمبر 16, 2011 قام بنشر نوفمبر 16, 2011 الله يبارك بيك اخي الكريم تمت الاستفادة من الكود وبقليل من التنسيق في النموذج تأتي بتائج رائعة
عبـد الله قام بنشر نوفمبر 18, 2011 قام بنشر نوفمبر 18, 2011 الاستاذ محمد صالح مع كل التقدير هل يمكن ان نجعل هذه الارقام 1024, 768 في الكود تتغير آليا حسب دقة شاشة العميل
أ / محمد صالح قام بنشر نوفمبر 18, 2011 قام بنشر نوفمبر 18, 2011 الاستاذ محمد صالح مع كل التقدير هل يمكن ان نجعل هذه الارقام 1024, 768 في الكود تتغير آليا حسب دقة شاشة العميل لماذا تحتاج لتغيير هذه الأرقام مع دقة شاشة المستخدم هذه الأرقام تخص دقة الشاشة التي تم تصميم البرنامج عليها وتم ضبط حجم النموذج عليها بحيث إذا كانت دقة شاشة المستخدم مساوية لها لا يتغير شيء أما إذا كانت دقة شاشة المستخدم غير الدقة التي تم التصميم عليها يتم تغيير حجم النموذج وكل عناصره إلى ما يتناسب مع دقة شاشة المستخدم سواء بتكبير النموذج أو تصغيره 2
عبـد الله قام بنشر نوفمبر 19, 2011 قام بنشر نوفمبر 19, 2011 اشكرك جدا جدا بالنسية لهذين فالنتيجة % resizefrom Me, 800, 600 resizefrom Me, 1024, 768 ولكن هناك دقة اعلى تكون النتيجة غير منضبطة خاصة مع تكبير النموذج الى الحد الاقصى خذ مثلا عنصر تحكم مربعات الخيار فإنه يتمدد بشكل كبير خلافا للاطار العادي اكرر شكري وتقديري
أ / محمد صالح قام بنشر نوفمبر 19, 2011 قام بنشر نوفمبر 19, 2011 أخي الكريم برجاء توضيح مشكلتك أكثر وإرفاق الملف الذي حدثت معه المشكلة مع توضيح دقة الشاشة التي تم تصميمه فيها 1
عبـد الله قام بنشر نوفمبر 19, 2011 قام بنشر نوفمبر 19, 2011 تفضل المرفق ودقة الشاشة هي الموجودة في الكود ملحوظة : لا تغير مكان المجموعة وايضا حجم النموذج لان النموذج الاصل مزدحم بعناصر اخرى الحل الذي عملت به ان اخفي عنصر التحكم بجعله شفافا واستعين باطار عادي db1.rar
lordring قام بنشر نوفمبر 20, 2011 قام بنشر نوفمبر 20, 2011 اخي العزيز.. قمت اليوم بتجربة الكود على اكثر من جهاز والنتائج كانت رائعة .. لدي مشكلة واحدة هذه المشكلة لاتظهر في الاوفيس 2010 لكنها تظهر في ال2007 حيث بالرغم من اني عملت ارتساء لاعلى اليسار للنموذج فانه عند فتح النموذج في جهاز دقته اعلى من القياس الذي عملت به البرنامج يظهر في البداية بالشكل التالي حيث اضطر لسحب المسطرة الافقية لاظهار البرنامج .. وهذا يمثل ارباك للمستخدم فهل يمكن تضمين الكود اي اضافة تجبر النموذج على الارتساء الى اعلى اليسار وبالتالي يظهر كامل البرنامج دون الحاجة لسحب المساطر علما انه في 2010 فان الامور تمام ولايحتاج لسحب المسطرة لانه يكون مرتسيا الى اقصى اليسار واعلى نقطة
أ / محمد صالح قام بنشر نوفمبر 20, 2011 قام بنشر نوفمبر 20, 2011 تفضل المرفق ودقة الشاشة هي الموجودة في الكود ملحوظة : لا تغير مكان المجموعة وايضا حجم النموذج لان النموذج الاصل مزدحم بعناصر اخرى الحل الذي عملت به ان اخفي عنصر التحكم بجعله شفافا واستعين باطار عادي أخي الكريم كابون يبدو أنك لم تقرأ جيداً المشاركات رقم 5 و 6 و 6 في هذا الموضوع فقد كان الحل مع مشكلة مثل مشكلتك وضع كود التحجيم قبل كود التكبير أنا فتحت النموذج الخص بك ولم أجد فيه اي مشاكل تم تحجيم النموذج حسب دقة شاشتي 1280 * 1024 ولا يوجد مشكلة سوى أنك استعملت شرائط التمرير يعني وأنت تصمم النموذج ضيقت حدود النموذج عن محتوياته هذا بالإضافة لوضع كود التحجيم قبل كود التكبير جرب وأخبرني بالنتيجة 2
أ / محمد صالح قام بنشر نوفمبر 20, 2011 قام بنشر نوفمبر 20, 2011 بالنسبة للأخ lordring يفضل إرفاق الملف الذي به المشكلة لتجريبه
عبـد الله قام بنشر نوفمبر 20, 2011 قام بنشر نوفمبر 20, 2011 استاذي قرأت المشاركات جيدا وجربت قبل ان اكتب فليس هناك فرق في التقديم او التأخير ( لدي خاصة ) ولكن يبدوا انك لم تلحظ المشكلة التي طرحتها المرفق الآن اضفت اليه اطار بالحجم نفسه افتح النموذج اولا على عرض التصميم لترى الحجم الطبيعي ثم افتحه للعرض لترى الفرق db1.rar
أ / محمد صالح قام بنشر نوفمبر 20, 2011 قام بنشر نوفمبر 20, 2011 أخي الكريم lording جرب أن تجعل خاصية auto resize (تحجيم تلقائي) إلى no (لا) واجعل خاصية scroll bars (شريط التمرير ) إلى neither (لا هذا ولا ذاك)
lordring قام بنشر نوفمبر 20, 2011 قام بنشر نوفمبر 20, 2011 لم ينفع اخي لكن ملاحظة انه عندما افتح النموذج واضغط f5 يترتب النموذج تلقائيا فهل يمكن وضع هذا الايعاز ضمن النموذج في احد الاحداث كي تتم عملية الريفريش تلقائيا وشكرا
lordring قام بنشر نوفمبر 20, 2011 قام بنشر نوفمبر 20, 2011 تمام الان كله تمام الامور جيدة ... تحياتي وشكرا لك مرة ثانية .. تحياتي
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.