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

تحريك scrollbar في listview بالكود؟؟

بدأه felark في 10 يونيو 2012 · 3 رد · 793 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

لأني جربت الكود التالي لتحويل اتجاه الأدوات من اليسار لليمين ولكن لم يضبط معي.

Option Explicit 
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long 

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 

Private Const WS_EX_LAYOUTRTL = &H400000 
Private Const GWL_EXSTYLE = (-20) 

Public Sub SetRtoL(Ctl As Control) 
Ctl.Visible = False 
SetWindowLong Ctl.hwnd, GWL_EXSTYLE, GetWindowLong(Ctl.hwnd, GWL_EXSTYLE) Or WS_EX_LAYOUTRTL 
Ctl.Visible = True 
End Sub


Private Sub Form_Activate()

    SetRtoL listview1

End Sub

بدلا من اليسار لليمين a.png

np5g95.png

أريد البرنامج من اليمين لليسار b.png

2cqcrgx.png

لذلك أرجو وضع الكود المناسب ولكم شكري وتقديري

تم تعديل هذه المشاركة بواسطة felark في 10 يونيو 2012 في 18:05

#2

للرفع :)

#3

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

الكود الذي ذكرته ليس بعيداً، إلا أنه ينقصه تحديث الـ Control بالإضافة إلى أن هناك خدعة في الموضوع و هي أن الـ ColumnHeaders في الـ ListView هي مكون ابن (Child Control) و هو أيضاً يحتاج إلى عملية قلب من اليسار إلى اليمين.

في Module ضع الكود التالي:

Option Explicit

Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_LAYOUTRTL = &H400000
Private Const WS_EX_NOINHERITLAYOUT = &H100000

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function UpdateWindow Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Public Sub SetRightToLeftLayout(ByVal ControlHandle As Long)
    Dim OldLong As Long
    OldLong = GetWindowLong(ControlHandle, GWL_EXSTYLE)
    SetWindowLong ControlHandle, GWL_EXSTYLE, OldLong Or WS_EX_LAYOUTRTL
    UpdateWindow ControlHandle
End Sub

* لاحظ أن تصريح الدالة FindWindowEx يبدأ بـ Public لأننا سنحتاجها في الـ Form.

و في الحدث Form_Load اكتب السطرين التاليين:

' تغيير الليست فيو
    SetRightToLeftLayout ListView1.hwnd
' تغيير رؤوس الأعمدة
    SetRightToLeftLayout FindWindowEx(ListView1.hwnd, 0&, "msvb_lib_header", "")

* حيث استعملنا الدالة FindWindowEx للحصول على الـ HWND الخاصة بالـ ColumnHeaders Control. النص "msvb_lib_header" هو اسم الصنف (Class Name) للـ ColumnHeaders.

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

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

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

#4

جزاك الله خيراً أخي وكتب أجرك

ونفع بك وبعلمك

وأسكنك أعالي الجنان

وكتب لك في رمضان الغفران

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