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

كود رائع للتعامل مع دقة الشاشة ( قراءة وتغيير)

بدأه mas123 في 2 سبتمبر 2009 · 8 رد · 744 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

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

كل عام أنتم جميعا بخير

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

واليوم عدت لكم بكود بسيط ورائع في نفس الوقت

أحس روعته رغم أني محتاج لتفسير الإخوة المتمكنين لكيفية استخدام هذا الكود

الكود عبارة عن دالتين

الأولى لمعرفة جميع الأحجام الممكن تغيير دقة الشاشة إليها

وهذه هي التي لم أفهم طريقة استعمالها حيث أن الدالة من نوع collection الذي لم يسبق لي التعامل معه

والثانية لتغيير دقة الشاشة إلى أي حجم تريده بدلالة العرض والارتفاع

والآن مع الكود

Option Compare Database
Private Const CCDEVICENAME = 32
Private Const CCFORMNAME = 32
Private Const DM_PELSWIDTH = &H80000
Private Const DM_PELSHEIGHT = &H100000

Private Type DEVMODE
	dmDeviceName As String * CCDEVICENAME
	dmSpecVersion As Integer
	dmDriverVersion As Integer
	dmSize As Integer
	dmDriverExtra As Integer
	dmFields As Long
	dmOrientation As Integer
	dmPaperSize As Integer
	dmPaperLength As Integer
	dmPaperWidth As Integer
	dmScale As Integer
	dmCopies As Integer
	dmDefaultSource As Integer
	dmPrintQuality As Integer
	dmColor As Integer
	dmDuplex As Integer
	dmYResolution As Integer
	dmTTOption As Integer
	dmCollate As Integer
	dmFormName As String * CCFORMNAME
	dmUnusedPadding As Integer
	dmBitsPerPel As Integer
	dmPelsWidth As Long
	dmPelsHeight As Long
	dmDisplayFlags As Long
	dmDisplayFrequency As Long
End Type

Private Declare Function apiEnumDisplaySettings Lib "user32" _
		Alias "EnumDisplaySettingsA" _
		(ByVal lpszDeviceName As Long, _
		ByVal iModeNum As Long, _
		lpDevMode As Any) _
		As Boolean

Private Declare Function apiChangeDisplaySettings Lib "user32" _
		Alias "ChangeDisplaySettingsA" _
		(lpDevMode As Any, _
		ByVal dwflags As Long) _
		As Long

Function numDisplay() As Collection
Dim collRes As Collection
Dim boolRet As Boolean
Dim tDevMode As DEVMODE
Dim lngMode As Long

	Set collRes = New Collection
	Do
		boolRet = apiEnumDisplaySettings(0&, lngMode&, tDevMode)
		With tDevMode
			collRes.Add .dmPelsWidth & "x" & _
					.dmPelsHeight & " @ " & .dmBitsPerPel & " bit", _
					lngMode & vbNullString
		End With
		lngMode = lngMode + 1
	Loop Until boolRet = False
	Set numDisplay = collRes
	Set collRes = Nothing
End Function

Function ChangeRes(intX As Integer, intY As Integer) As Boolean
Dim tDevMode As DEVMODE
Dim boolCanChange As Boolean
Dim boolRet As Boolean
Dim lngRet As Long, lngMode As Long

	On Error GoTo Err_Handler
	Do
		boolRet = apiEnumDisplaySettings(0&, lngMode&, tDevMode)
		With tDevMode
			If .dmPelsWidth = intX And .dmPelsHeight = intY Then
				boolCanChange = True
			End If
		End With
		lngMode = lngMode + 1
	Loop Until boolRet = False

	If boolCanChange Then
		With tDevMode
			.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
			.dmPelsWidth = intX
			.dmPelsHeight = intY
		End With
		lngRet = apiChangeDisplaySettings(tDevMode, 0&)
	End If
	ChangeRes = boolCanChange
exit_Handler:
	Exit Function
Err_Handler:
	ChangeRes = False
	Resume exit_Handler
End Function

بانتظار تواصل الخبراء

أخوكم

محمد صالح

التغير هو القانون الدائم للحياة.ودوام الحال من المحال

فلماذا لا نتغير بإرادتنا إلى ما نريد؟ قبل أن تغيرنا الحياة مجبرين إلى ما لا نريد؟

موقعي

#2

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

مرفق أخي مثال لتوضيح طريقة استخدام الدالتين من نموذج في الأكسس... أرجو أن يكون ذا فائدة، والله أعلم.

resolution.rar

#3

بسم الله الرحمن الرحيم

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

#4

جزاك الله خيرا أخي أحمد على توضيحك طريقة استعمال collection

ولكن القائمة تحتوي على أكثر من 30 دقة شاشة متاحة

في حين أن الويندوز لا يظهر سوى 5 فقط

كما بالصورة

شكرا لك

post-121764-1251894957_thumb.jpg

التغير هو القانون الدائم للحياة.ودوام الحال من المحال

فلماذا لا نتغير بإرادتنا إلى ما نريد؟ قبل أن تغيرنا الحياة مجبرين إلى ما لا نريد؟

موقعي

#5

وإياك جزى الله خيراً أخي...

لاحظ أن القيم المعادة من دالة API تحوي احتمالات مختلفة لقيم دقة شاشة مع قيم عمق اللون (bits per pixel)، بالإضافة إلى تردد العرض (display frequency - لكنه غير معروض في المثال)، إضافة إلى قيم أخرى. (التشكيلات) المختلفة من هذه القيم تجعل بنود القائمة كثيرة...

والله أعلم...

تم تعديل هذه المشاركة بواسطة أحمد مبارك الحيقي في 2 سبتمبر 2009 في 17:46

#6

شكرا اخي لتواصلك

إذاُ

كيف يمكننا أن نصل إلى مجموعة دقة الشاشة المسموحة فعلا في الجهاز

والتي تبدأ من 640 * 460 تقريبا

وبعدها 800*600

وبعدها 1024*768

وهكذا

التغير هو القانون الدائم للحياة.ودوام الحال من المحال

فلماذا لا نتغير بإرادتنا إلى ما نريد؟ قبل أن تغيرنا الحياة مجبرين إلى ما لا نريد؟

موقعي

#7

الأخ الكريم mas123

ألف شكر على الدالة

خبيرنا الرائع أحمد مبارك الحيقى ....

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

تحياتى

محمد ندا

... بقمة السعادة .. أعود بإذن الله لصحبتكم الرائعة قريباً ...

#9

بارك الله فيك أخي أحمد

ونفع بك المسلمين

التغير هو القانون الدائم للحياة.ودوام الحال من المحال

فلماذا لا نتغير بإرادتنا إلى ما نريد؟ قبل أن تغيرنا الحياة مجبرين إلى ما لا نريد؟

موقعي

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

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

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

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

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