18-11-13, 06:16 PM
(17-11-13, 09:46 PM)ناجي إبراهيم كتب : السلام عليكم...--------------------------------------------------------
استعمل الأكواد التالية بدل الأكواد في المرفق. مع الملاحظات التالية:
كود تهيئة الـ FlexGrid لا يمكن أن يكون في الحدث Form_Resize و إلا فإنه سيتم تنفيذه كلما تغير حجم النافذة. مكانه الصحيح هو الحدث Form_Load.
معالجة مفاتيح التحكم (مثل Enter و BackSpace و Delete) تتم عادة في الحدث KeyDown أو الحدث KeyUp. أما الحدث KeyPress فيستعمل لعالجة مفاتيح الكتابة (الحروف و الأرقام و الرموز الأخرى).
تمت إضافة استعمال المفتاح Delete لمسح محتوى الخلية بأكمها.
في عمود رقم الصنف يمكن إدخال الأرقام فقط و بطول 9 خانات (طبعاً يمكنك تعديل ذلك في الكود).
عند إنشاء صف جديد في الـ FlexGrid يتم الانتقال إليه و ضمان ظهوره (بدل بقائه مختفياً في الأسفل).
عند كتابة رقم في العمود الأول و ضغط Enter يتم البحث عنه في قاعدة البيانات و جلب بقية البيانات، أو إظهار رسالة بعدم وجود صنف بهذا الرقم.
كود :
Private Sub Form_Load()
Set db = OpenDatabase(App.Path & "\db1.mdb", 2)
Set rs = db.OpenRecordset("soft", 2)
fox.Rows = 10
fox.Cols = 5
fox.Clear
fox.ColAlignment(0) = 3
fox.ColAlignment(1) = 3
fox.ColAlignment(2) = 3
fox.ColAlignment(3) = 3
fox.ColAlignment(4) = 3
fox.ColWidth(0) = 1500 '
fox.ColWidth(1) = 2800
fox.ColWidth(2) = 1500
fox.ColWidth(3) = 1500
fox.ColWidth(4) = 1500
fox.TextMatrix(0, 0) = "رقم الصنف"
fox.TextMatrix(0, 1) = "اسم الصنف"
fox.TextMatrix(0, 2) = "العدد"
fox.TextMatrix(0, 3) = "القيمة"
fox.TextMatrix(0, 4) = "المجموع الفردي"
End Sub
Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
rs.Close
db.Close
End Sub
Private Sub fox_KeyDown(KeyCode As Integer, Shift As Integer)
With fox
Select Case KeyCode
Case vbKeyBack
If .Text <> "" Then .Text = Left$(.Text, (Len(.Text) - 1))
Case vbKeyDelete
.Text = ""
Case vbKeyReturn
If .Col = 0 Then
If IsNumeric(.Text) Then
rs.FindFirst "iD = " & .Text
If rs.NoMatch Then
MsgBox "لا يوجد صنف بهذا الرقم"
Else
.TextMatrix(.Row, 1) = rs("chs")
.TextMatrix(.Row, 2) = rs("no")
.TextMatrix(.Row, 3) = rs("vbn")
.TextMatrix(.Row, 4) = rs("CTT")
End If
End If
ElseIf .Col = (.Cols - 1) Then
If .Row = (.Rows - 1) Then .Rows = .Rows + 1
.Col = 0
.Row = .Row + 1
If .Row > 12 Then .TopRow = .Rows - 13
Else
.Col = .Col + 1
End If
End Select
End With
End Sub
Private Sub fox_KeyPress(KeyAscii As Integer)
With fox
If KeyAscii > 31 Then
If fox.Col = 0 Then
If (Len(.Text) < 9) And IsNumeric(Chr$(KeyAscii)) Then
.Text = .Text + Chr$(KeyAscii)
End If
Else
.Text = .Text + Chr$(KeyAscii)
End If
End If
End With
End Sub
نرجو الاستفادة و السلام.
اخي العزيز ناجي ابراهيم
السلام عليكم ورحمة وبركاته
لك من الف شكر وتقدير والله يحفظكم ويرعاكم
إذا ضاقت بك الأحوال يوماً فَثِقْ بالواحِدِ الفَرْدِ العَلِيِّ

