الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل يتأثر التصميم بالفيجول بيسك بحجم الشاشة (الحجم وليس الابعاد) ..؟؟

بدأه سنان محمد صالح في 3 أغسطس 2009 · 14 رد · 1,724 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

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

يعني تشوه التصميم .. مع العلم انه كان عاديا ...

ولكني الان اعمل على تصميم برنامج اي حركة بسيطة بالتصميم تؤدي الى تدميره ..

لذلك اريد ان اعرف هل هناك طريقة تحافظ على التصميم ؟.؟

لاوضح اكثر ..

كل label وكل shape وكل picture box تعاملت مع مواقعها حسب الtop وال left .. يعني بالسنتي مثل مايقولون ..

لذلك فان اي تغير في هذه المواقع يؤدي ذلك الى مشكلة ..

ملاحظة حجم الشاشه لحاسبتي الشخصية هو 12 .. وبالتاكيد البرنامج سيعمل على حاسبة بحجم 17 او من الممكن ان يعرض بعد مدة على DataShow ..

ارجو المساعدة ..

تحياتي العطرة ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#2

المفروض ان يكون التعامل مع نسب وليس قيم ثابتة للموضع

كأن تعطي حجم وموضع نسبي لكل اداة تبعا لحجم النافذة الكلي

لو أرفقت مثال لكيفية تضبيط الادوات عندك سيكون أفضل

#3

صراحة حاليا لم اكتمل من المشروع الجديد ..

ولكن اسال عن الالية اثناء العمل ..

يعني تقصد ان تكون النسب على النافذة .. يعني كل الادوات تكون معتمدة على النافذة ..؟

ولكن هنالك picture Box وداخله خطوط line ..

فكيف ..؟

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#4

لا اعلم طبيعة وشكل الخطوط المستخدمة داخل الـ Picture

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

From top down, left right

أتمني أن تجد به فكرة جديدة ولو إني لا أعتقد

demo.rar

#5

السلام عليكــم ورحمـة الله وبركاتــه ،،

بالتأكيد يتأثر حجم البرنامج بحجم الشاشة .

فمثلا لو صنعت برنامج على قياس شاشة 1024 وحاولت ان تشغله على قياس شاشة 600 فلن يظهر كامل البرنامج بل سيظهر نصفه .

لذا ومن خبرتي في صنع البرامج وخاصة برنامجي كنوز المعرفة . اصمم جميع برامجي على قياس شاشة 600 واجعل خاصية ظهور الفورم في النصف " السنتر " بحيث لو اشتغل على قياس شاشة 1024 يشتغل بالوسط .

او من خيار اللود اجعل خاصية حجم الفورم التلقائية ماكسمم ولكن يجب ان تنتبه الى مواضع العناصر .

راجع عنوان " بعد سنتين من الاحتكار اقدم لكم ..." في الصفحة السابقة فيها برامج قد تفيدك

#6

شكرا لك اخ محمد على المثال .. ساحاول دراسته والاستفادة منه ان شاءالله ..

لكنها طريقة طويلة قليلا ..

اخي احمد .. شكرا لك على الرد ولكن ارجو منك ان تعود وتقرأ الموضوع جيدا .. او العنوان ..

قلت الحجم وليس الابعاد .. يعني ليست المشكلة 1024 او 600 المشكلة في الحجم يعني شاشة 12 او 14 او 15 او 17 او 19 او ا و ا و ......

تحياتي العطرة ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#7
Muhammad Fayed كتب:

لا اعلم طبيعة وشكل الخطوط المستخدمة داخل الـ Picture

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

From top down, left right

أتمني أن تجد به فكرة جديدة ولو إني لا أعتقد

-------------------------------------------------------------------------------------------------------------

استاذي العزيز

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

سوال هام لو سمحت

إذا كان عند اكثر من زر امر كيف يكون الكود لضبط الادوات علي مختلف الحجوم؟؟

نامل من الله ثم منكم المساعده العاجله والله يحفظكم ويرعاكم

ولكم مني فائق الاحترام

#8

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

أنا فاكر إن كان فيه أداة أكتيف اكس علي PSCODE تريحك من عناء ضبط الأدوات علي الفورم بس نسيت اسمها تقريبا كان Resizer او شيء شبيه

demo2.rar

#9

ليس لمقاس الشاشة (14 إنش أو 15 أو 17 أو 19 إنش أو Data Show) تأثير على تناسب نوافذ و مكونات البرنامج إلا من ناحية الأحجام ككل. المشكلة تظهر - كما ذكر بعض الإخوة - عند اختلاف التباين (Resolution) بين الحاسوب الذي تم عليه التصميم و حاسوب آخر. مثلاً عند التصميم على شاشة بتباين 1024 × 768 ثم التشغيل على شاشة بتباين 800 × 600 فإن أجزاء من النوافذ قد تختفي عند اليمين أو الأسفل.

أحد الاقتراحات العملية - و كما ذكر أحد الإخوة - هو التصميم على تباين أدنى (ما زال التباين 800 × 600 مستعملاً بكثرة). ستبدو نوافذك أصغر (تأخذ مساحة أقل على الشاشة) عند تشغيل البرنامج على شاشة بتباين أكبر لكن على الأقل سيتمكن المستخدم من مشاهدة النوافذ بأكملها.

و هناك اقتراح آخر، و هو تغيير تباين الشاشة - بعد إعلام المستخدم و موافقته - بما يتناسب مع تصميم برنامجك.

نفرض أنك صممت البرنامج على شاشة ذات تباين 1024 × 768 بكسل:

1. أضف Module إلى المشروع (أو ربما لديك واحدة سابقاً) و ضع بها هذا الكود:

  1.  
  2. Private Const EWX_REBOOT = 2
  3.  
  4. Private Const CCDEVICENAME = 32
  5. Private Const CCFORMNAME = 32
  6. Private Const DM_BITSPERPEL = &H40000
  7. Private Const DM_PELSWIDTH = &H80000
  8. Private Const DM_PELSHEIGHT = &H100000
  9. Private Const CDS_UPDATEREGISTRY = &H1
  10. Private Const CDS_TEST = &H2
  11. Private Const DISP_CHANGE_SUCCESSFUL = 0
  12. Private Const DISP_CHANGE_RESTART = 1
  13.  
  14. Private Type DEVMODE
  15. dmDeviceName As String * CCDEVICENAME
  16. dmSpecVersion As Integer
  17. dmDriverVersion As Integer
  18. dmSize As Integer
  19. dmDriverExtra As Integer
  20. dmFields As Long
  21. dmOrientation As Integer
  22. dmPaperSize As Integer
  23. dmPaperLength As Integer
  24. dmPaperWidth As Integer
  25. dmScale As Integer
  26. dmCopies As Integer
  27. dmDefaultSource As Integer
  28. dmPrintQuality As Integer
  29. dmColor As Integer
  30. dmDuplex As Integer
  31. dmYResolution As Integer
  32. dmTTOption As Integer
  33. dmCollate As Integer
  34. dmFormName As String * CCFORMNAME
  35. dmUnusedPadding As Integer
  36. dmBitsPerPel As Integer
  37. dmPelsWidth As Long
  38. dmPelsHeight As Long
  39. dmDisplayFlags As Long
  40. dmDisplayFrequency As Long
  41. End Type
  42.  
  43. Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
  44. Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As Long
  45. Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
  46. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  47.  
  48. ' إجراء تغيير التباين
  49. Public Sub ChangeResolution(WidthPixels As Long, HeightPixels As Long)
  50. Dim DevM As DEVMODE
  51. Dim lResult As Long
  52. Dim iAns As Integer
  53.  
  54. ' الحصول على معلومات النمط الرسومي لجهاز العرض
  55. lResult = EnumDisplaySettings(0&, 0&, DevM)
  56.  
  57. ' نضبط التباين الجديد دون تغيير عمق الألوان حتى لا نحتاج إلى إعادة التشغيل
  58. With DevM
  59. .dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT 'Or DM_BITSPERPEL
  60. .dmPelsWidth = WidthPixels 'ScreenWidth
  61. .dmPelsHeight = HeightPixels 'ScreenHeight
  62. '.dmBitsPerPel = 32 '(could be 8, 16, 32 or even 4)
  63. End With
  64.  
  65. ' نطبق الإعدادات الجديدة
  66. lResult = ChangeDisplaySettings(DevM, CDS_TEST)
  67. Select Case lResult
  68. Case DISP_CHANGE_RESTART
  69. iAns = MsgBox("يجب إعادة تشغيل الحاسوب لتطبيق الإعدادات الجديدة." & _
  70. vbCrLf & vbCrLf & "هل تريد إعادة التشغيل الآن؟", _
  71. vbYesNo Or vbSystemModal Or vbMsgBoxRight Or vbMsgBoxRtlReading, "ضبط تباين الشاشة")
  72. If iAns = vbYes Then Call ExitWindowsEx(EWX_REBOOT, 0)
  73. Case DISP_CHANGE_SUCCESSFUL
  74. Call ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
  75. MsgBox "تم تغيير تباين الشاشة", vbInformation Or vbMsgBoxRight Or vbMsgBoxRtlReading, "ضبط تباين الشاشة"
  76. Case Else
  77. MsgBox "Mode not supported", vbSystemModal, "Error"
  78. End Select
  79. End Sub
  80.  

2. في قسم التصريحات للنافذة الرئيسية عرف المتغيرين التاليين:

  1.  
  2. Private OldScrnWidth As Long
  3. Private OldScrnHeight As Long
  4.  

3. في الإجراء Form_Load للنافذة الرئيسية اكتب الكود التالي:

  1.  
  2. Dim MsgTxt As String
  3.  
  4. OldScrnWidth = Screen.Width / Screen.TwipsPerPixelX
  5. OldScrnHeight = Screen.Height / Screen.TwipsPerPixelY
  6.  
  7. If (OldScrnWidth <> 1024) Or (OldScrnHeight <> 768) Then
  8. MsgTxt = "لكي يعمل البرنامج بشكل صحيح يجب ضبط تباين الشاشة على 1024 × 768."
  9. MsgTxt = MsgTxt & vbCrLf & vbCrLf & "هل تريد ضبطه الآن على هذا القياس؟"
  10. MsgTxt = MsgTxt & vbCrLf & vbCrLf & "ملاحظة: سيقوم البرنامج باستعادة التباين الحالي عند إغلاقه."
  11. If MsgBox(MsgTxt, vbYesNo Or vbExclamation Or vbMsgBoxRight Or vbMsgBoxRtlReading, "ضبط تباين الشاشة") = vbYes Then
  12. ChangeResolution 1024, 768
  13. End If
  14. End If
  15.  

4. في الإجراء Form_Unload للنافذة الرئيسية اكتب الكود التالي:

  1.  
  2. if (OldScrnWidth <> (Screen.Width / Screen.TwipsPerPixelX)) Or (OldScrnHeight <> (Screen.He
    ight / Screen.TwipsPerPixelY)) Then
  3. ChangeResolution OldScrnWidth, OldScrnHeight
  4. End If
  5.  

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#10

يعني يا اخ najy انت رايك ان احكم المستخدم بابعاد الشاشه التي صممت عليها بالرنامج وبذلك لن يتاثر البرنامج باي شئ .؟؟

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

تحياتي العطرة ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#11
Muhammad Fayed كتب:
مرفق مثال معدل ببعض الكوماندز به طريقتين الأولي حجم ثابت والثانية متغير بحجم النافذة

أنا فاكر إن كان فيه أداة أكتيف اكس علي PSCODE تريحك من عناء ضبط الأدوات علي الفورم بس نسيت اسمها تقريبا كان Resizer او شيء شبيه

------------------------------------------------------------------------------------------------------------------------------------------------------------

استاذي العزيز

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

انا اريد اعادة ترتيب ازار الامر عند تكبير الفورم واعادة التريب عند تصغير الفوم ؟؟

مثال

انا الا اريد ان يتغير حجم ازر الامر عندما يتم تكبير الفورم

ارجو من الله ان تكون فاهم ماذا اقصد من هذا السوال

والله يحفظكم ويرعاكم

ولكم مني فائق الاحترام والتقدير

#12

شكرا لك اخ محمد ..

الان ضهرت عندي شغلة احب ان اسالك بها ..

مسالة اللون في Rich text box .. كيف يمكن ان اجعل لون الخلفية احمر مثلا والخط ازرق ( على سبيل المثال ) ..

تحياتي العطرة ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#13
اقتباس
انا اريد اعادة ترتيب ازار الامر عند تكبير الفورم واعادة التريب عند تصغير الفوم ؟؟

Command1 -- الحجم لا يتغير بل يتم إعادة ترتيب

ولو أنا فاهم خطأ فيرجي منك إرفاق مثال يصغير بين المشكلة عندك

بالنسبة لللون اخ سنان فلا أجد ما يمنع من استخدام خاصية Backcolor لتغيير الخلفية

وبالنسبة للون الكتابة فيمكن تحديده من خاصية SelColor مع الإستعانة بكلا من :

SelStart : لتحديد بداية التأشير

SelLength : لتجديد طول النص المؤشر

RTB.BackColor = vbRed

RTB.SelStart = 0

RTB.SelLength = 5

RTB.SelColor = vbBlue

أو استخدام

RTB.SelLength = Len(RTB.Text)

لتغيير لون التكست بأكمله

طريقة أخري :

RTB.SelColor = vbBlue

RTB.SelText = "asdfghj"

#14
Muhammad Fayed كتب:
Command1 -- الحجم لا يتغير بل يتم إعادة ترتيب

ولو أنا فاهم خطأ فيرجي منك إرفاق مثال يصغير بين المشكلة عندك

بالنسبة لللون اخ سنان فلا أجد ما يمنع من استخدام خاصية Backcolor لتغيير الخلفية

وبالنسبة للون الكتابة فيمكن تحديده من خاصية SelColor مع الإستعانة بكلا من :

SelStart : لتحديد بداية التأشير

SelLength : لتجديد طول النص المؤشر

RTB.BackColor = vbRed

RTB.SelStart = 0

RTB.SelLength = 5

RTB.SelColor = vbBlue

أو استخدام

RTB.SelLength = Len(RTB.Text)

لتغيير لون التكست بأكمله

طريقة أخري :

RTB.SelColor = vbBlue

RTB.SelText = "asdfghj"

------------------------------------------------------------------------------------------------------------

استاذي العزيز

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

نامل الاطلاع على المرفق حتى تعرف ماذا اريد ؟؟

ونامل من الله ثم منكم استاذي العزيز ان ترسل لنا مثال حول ذلك

والله يحفظكم ويرعاكم

ولكم مني فائق الاحترام

______.rar

#15

والله يا أخي انا ما زلت لا أفهمك

انا شايف إنك بتتحدث عن Command2 ومش واخد بالك انك تشرح علي ما يحدث في Command1

انا عملت Command2 مش أساسي .. حاجة زيادة كده .. لو حد حب يحسبها بنسب.

لكن الأساس علي Command1.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…