-
Posts
9980 -
تاريخ الانضمام
-
تاريخ اخر زياره
-
Days Won
406
نوع المحتوي
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
كل منشورات العضو jjafferr
-
هدية: من اليمين الى اليسار، مربع القائمة ListBox والشجرة TreeView
jjafferr replied to jjafferr's topic in قسم الأكسيس Access
وحيا الله الشباب أخوي رمهان وأخوي محمد وأخوي أبوآلآء وشكرا على لطيف كلماتكم جعفر -
وهاي المرفق 54.1.TreeView_RTL.mdb.zip
-
السلام عليكم 1. من المعروف ان تنسيق النص في مربع القائمة ListBox هو من اليسار الى اليمين ، مشكلة كانت تصادفني دائما ، وهو تنسيق القيم في مربع القائمة لتكون من اليمين الى اليسار بالنسبة للغة العربية (طريقة تغيير مربع القائمة الى مربع تحرير ونص ، ثم عمل التنسيق عليه من اليمين الى اليسار ، ثم اعادته الى مربع قائمة لا يعمل معظم الوقت) ، موقع http://www.lebans.com والذي يحتوي على مالذ وطاب عنده طريقه لهذا التنسيق: http://www.lebans.com/justicombo.htm كذلك. 2. ونفس المشكلة مع موضوع تنسيق الشجرة TreeView من اليمين الى اليسار. النتيجة: و وطريقة العمل ، يوضع هذا الكود في وحدة نمطية: Option Compare Database Option Explicit #If VBA7 And Win64 Then '64 bits Public Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As Long Public Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare PtrSafe Function InvalidateRect Lib "user32" (ByVal hwnd As LongPtr, lpRect As Long, ByVal bErase As Long) As Long Public Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr Public Declare PtrSafe Function GetFocus Lib "user32" () As LongPtr Public Declare PtrSafe Function GetWindow Lib "user32" (ByVal hwnd As LongPtr, ByVal wCmd As Long) As LongPtr Dim hwnd As LongPtr #Else '32 bits Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As Long, ByVal bErase 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 Declare Function GetFocus Lib "user32" () As Long Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long Dim hwnd As Long #End If Public Const GW_CHILD = 5 Public Const WS_EX_LAYOUTRTL = &H400000 Public Const GWL_EXSTYLE = (-20) Function RTL_Set(frm As Form, ctl As Control) Dim varHwnd As Variant Dim OldLong As Long frm.SetFocus ctl.SetFocus varHwnd = GetFocus() OldLong = GetWindowLong(varHwnd, GWL_EXSTYLE) SetWindowLong varHwnd, GWL_EXSTYLE, OldLong Or WS_EX_LAYOUTRTL InvalidateRect hwnd, 0, False End Function Function RTL_SetTree(frm As Form, ctl As Control) Dim OldLong As Long OldLong = GetWindowLong(ctl.hwnd, GWL_EXSTYLE) SetWindowLong ctl.hwnd, GWL_EXSTYLE, OldLong Or WS_EX_LAYOUTRTL InvalidateRect hwnd, 0, False End Function ' ' From http://www.microsoft.com/middleeast/msdn/faq.aspx ' 'Place OnLoad of the Form ' Dim OldLong As Long 'For Form ' OldLong = GetWindowLong(Me.hwnd, GWL_EXSTYLE) ' SetWindowLong Me.hwnd, GWL_EXSTYLE, OldLong Or WS_EX_LAYOUTRTL ' InvalidateRect hwnd, 0, False 'For List ' OldLong = GetWindowLong(List1.hwnd, GWL_EXSTYLE) ' SetWindowLong List1.hwnd, GWL_EXSTYLE, OldLong Or WS_EX_LAYOUTRTL ' InvalidateRect hwnd, 0, False 'For The StatusBar ' OldLong = GetWindowLong(StatusBar1.hwnd, GWL_EXSTYLE) ' SetWindowLong StatusBar1.hwnd, GWL_EXSTYLE, OldLong Or WS_EX_LAYOUTRTL ' InvalidateRect hwnd, 0, False 'For TreeView ' Dim nodX As Node ' Set nodX = TreeView1.Nodes.Add(, , "R", "Root") ' Set nodX = TreeView1.Nodes.Add("R", tvwChild, "C1", "Child 1") ' Set nodX = TreeView1.Nodes.Add("R", tvwChild, "C2", "Child 2") ' Set nodX = TreeView1.Nodes.Add("R", tvwChild, "C3", "Child 3") ' Set nodX = TreeView1.Nodes.Add("R", tvwChild, "C4", "Child 4") ' nodX.EnsureVisible ' OldLong = GetWindowLong(TreeView1.hwnd, GWL_EXSTYLE) ' SetWindowLong TreeView1.hwnd, GWL_EXSTYLE, OldLong Or WS_EX_LAYOUTRTL ' InvalidateRect hwnd, 0, False 'For ListView ' OldLong = GetWindowLong(ListView1.hwnd, GWL_EXSTYLE) ' SetWindowLong ListView1.hwnd, GWL_EXSTYLE, OldLong Or WS_EX_LAYOUTRTL ' InvalidateRect hwnd, 0, False 'For ProgressBar ' ProgressBar1.Value = 50 ' OldLong = GetWindowLong(ProgressBar1.hwnd, GWL_EXSTYLE) ' SetWindowLong ProgressBar1.hwnd, GWL_EXSTYLE, OldLong Or WS_EX_LAYOUTRTL ' InvalidateRect hwnd, 0, False 'For ToolBar ' mhwnd = GetWindow(Toolbar1.hwnd, GW_CHILD) ' OldLong = GetWindowLong(mhwnd, GWL_EXSTYLE) ' SetWindowLong mhwnd, GWL_EXSTYLE, OldLong Or WS_EX_LAYOUTRTL ' InvalidateRect hwnd, 0, False في اسفل الكود انا تركت الكود لبقية الاشياء اللي يمكن عملها من اليمين الى اليسار. اما تنفيذ التنسيق لمربع القائمة ، فهو وضع هذا الكود عند تحميل النموذج الذي يحتوي على هذا المربع (وهنا اسم حقل مربع القائمة هو List0_RTL ) : 'ListBox RTL Call RTL_Set(Me, List0_RTL) وتنسيق الشجرة ، فهو وضع هذا الكود عند تحميل النموذج الذي يحتوي على الشجرة (وهنا اسم الشجرة هو TreeView1) : 'TreeView RTL Call RTL_SetTree(Me, TreeView1) وللأمانة العلمية ، فاني استخدم قاعدة البيانات التي وضعها الاخ محمد في الرابط: http://www.officena.net/ib/index.php?showtopic=60781 جعفر تعديل 1: 18-11-2021 ، جعل البرنامج يعمل على النواتين 32بت و 64 بت 54.RTL_TreeView_ListBox_32bits_n_64bits.accdb.zip
-
السلام عليكم أخوي أبا عمر حيله جميلة باستخدام SetWindowPos إحنا بسبب طريقة السؤال كنا نحاول ان نخفي شاشة الاكسس ، بس انت ماشاء الله عليك ، نظرت للموضوع من خارج العلبة ، وحصلت على مفهوم أكبر وطرق اخرى للحل ، هنيئا لك هذه القدرة وللعلم ، راعي الغنم في مشاركته رقم 84 لمح لهذا الشي نظريا ، ولم يطبقه برمجيا ، وانت سبقته ففيك الخير جعفر
-
مطلوب كود في الاكسيس لفتح قاعدة بيانات في اكسيس
jjafferr replied to bondoke's topic in قسم الأكسيس Access
تفضل وكما قال الاخ عبدالله ، Application.followhyperlink يستطيع ان يفتح قاعدة بيانات اخرى ، مثل ما في موضوعك الاصلي عن هذا السؤال: http://www.officena.net/ib/index.php?showtopic=60818&p=393534 جعفر -
وعليكم السلام لو كنت مخبرنا من البداية قصدك ، كنا اعطيناك الحل من البداية والكود هو: myApp = Me.txtOpenFile 'myApp = "F:\Temp\myDatabase.mdb" 'Shell myApp, 1 Application.FollowHyperlink myApp اما مربع النص ، فيمكنك ان تكتب فيه المسار يدويا كذلك ، مع اني اضفت امكانية فتح ملفات الاكسس كذلك. جعفر 53-Word_Print.zip
-
زيادة مبلغ إيقاف الخصم الشهري الى مبلغ القرض
jjafferr replied to طاهر اوفيسنا's topic in قسم الأكسيس Access
وعليكم السلام أخي كريمو محتاج شوية وقت وارجع لك ان شاء الله جعفر -
أخي الفاضل استعمل السطرين اللي في منتصف الكود ، وخبرني النتيجة: ' End If Me.txtname = Node.Parent Me.txtSon = Node.FirstSibling On Error Resume Next Debug.Print "node.Child; " & Node.Child جعفر
-
تغير البيانات بناءاً على القائمة المنسدلة
jjafferr replied to الحياه ممر's topic in قسم الأكسيس Access
عفوا أختي ، اعتقد بانك ارفقتي برنامج آخر!! مافي نموذج باسم اساسي ، ولا لقيت حقل رقم اللوحة في الجداول!! جعفر -
مكتبة _ ملفات ,,, لكبار الاساتذه ,,, تم تجميعها من شروحات متعدده
jjafferr replied to ابو الآء's topic in قسم الأكسيس Access
انا اقول الرجال ساكت ، اثارية يعدل وينظم ثروته بارك الله فيك أخي أبوآلآء انا انزلت برنامجين افحصهم جعفر -
وبدون مساعدة الاستاذ رمهان جعفر
-
حياك الله للعلم ، انا قلت: وفي الكود استخدمت >= و <= يعني في مقارنتي للوقت ، قلت الوقت اكبر من او بساوي ، وللقيمة الثانية قلت اصغر من او يساوي ، والسبب اني ما استخدمت = فقط هو: ان البرنامج عندما يقضي 60 ثانية ويكون صاير وقت مراجعة وقت الكمبيوتر ، فإن البرنامج يطلب من CPU الكمبيوتر ان ينفذ الى المعادلة ، وفي الكثير من الاوقات يكون CPU الكمبيوتر مشغولا في تنفيذ اوامر اخرى (هو دائما مشغول في تنفيذ الاوامر ، هذا شغله ) ، لذلك ، فان CPU الكمبيوتر قد يتأخر بعض الوقت في تنفيذ الامر ، وبهذا تكون اجزاء من الثانية قد فاتت ، ويكون وقت المقارنة غير عن الذي كان جعفر
-
تفضل 1. التوقيت: البرنامج يفحص وقت الكمبيوتر كل دقيقة ، 2. هذا هو كود الفحص: Private Sub Form_Timer() Set rst = Me.RecordsetClone rst.MoveLast: rst.MoveFirst RC = rst.RecordCount For i = 1 To RC 'Debug.Print Format(Now, "hh:mm") & vbCrLf & Format(rst!Class_Time_From, "hh:mm") & vbCrLf & Format(rst!Class_Time_To, "hh:mm") & vbCrLf 'compare the timer with the Class_Time If Format(Now, "hh:mm") >= Format(rst!Class_Time_From, "hh:mm") And Format(Now, "hh:mm") <= Format(rst!Class_Time_To, "hh:mm") Then 'Debug.Print "I am in" rst.FindFirst "[Class_Number]=" & rst!Class_Number Me.Bookmark = rst.Bookmark Exit Sub End If rst.MoveNext Next i Debug.Print "------" End Sub 3. اضفت 3 حقول في الجدول: Class_Number: لرقم كل حصة ، ومافي داعي لها ، لكنها لتسهيل الشغل (يعني بالعربي ، انا حطيتها ، وبعدين شفت مافي داعي لها ، بس كنت كتبت الكود ومستكاود اغيره ) ، Class_Time_From: البرنامج يفحص الوقت "من" و "الى" ، وحسب التجربة ، يفضل ان يكون الوقت بينهم على الاقل 3 دقائق ، Class_Time_To: جعفر 60.تجريبي.mdb.zip
-
هذا بالضبط اللي اعمله الان شكرا لك أخي أبوآلآء جعفر
-
حياك الله أخوي رمهان في الواقع كنت اعمل برنامج اجمع فيه جميع الكائنات في النموذج والتي لا يمكن تغيير اتجاهها لليمين الى اليسار ، مثل Tree View (اعلاه) و ListBox وقد اتطرق للكائنات الباقية الكود هو ما ارفقته في هذا الموضوع بتغيير بسيط لكل نوع جعفر
-
تفضل انا وضعت الكود التالي في كود النموذج: Private Sub TreeView1_NodeClick(ByVal Node As Object) On Error GoTo err_TreeView1_NodeClick 'lblItemCode.Caption = "" 'If Node.Key <> "Root" Then ' lblItemCode.Caption = Mid(Node.Key, InStr(Node.Key, "_") + 1) 'End If 'lblPath.Caption = Node.FullPath ' Dim colon As Integer ' colon = InStr(Node.Text, ":") ' Me.txt3 = Mid(Node.Text, 1, colon - 1) ' Me.Txt4 = Mid(Node.Text, colon + 1) ' colon = InStr(Node.Child, ":") ' If colon = 0 Then ' Me.txt1 = Val(Mid(Node.Child, 1, colon - 1)) + Node.Children ' Me.txt1 = "" ' Else ' Me.txt1 = Val(Mid(Node.Child, 1, colon - 1)) + Node.Children ' End If On Error Resume Next Debug.Print "node.Child; " & Node.Child Debug.Print "node.Children; " & Node.Children Debug.Print "node.Expanded; " & Node.Expanded Debug.Print "node.FirstSibling; " & Node.FirstSibling Debug.Print "node.FullPath; " & Node.FullPath Debug.Print "node.Index; " & Node.Index Debug.Print "node.Key; " & Node.Key Debug.Print "node.LastSibling; " & Node.LastSibling Debug.Print "node.Next; " & Node.Next Debug.Print "node.Parent; " & Node.Parent Debug.Print "node.Previous; " & Node.Previous Debug.Print "node.Root; " & Node.Root Debug.Print "node.Selected; " & Node.Selected Debug.Print "node.Sorted; " & Node.Sorted Debug.Print "node.Tag; " & Node.Tag Debug.Print "node.Text; " & Node.Text Debug.Print "----------------------" Exit Sub err_TreeView1_NodeClick: If Err.Number = 91 Then colon = 0 Else MsgBox Err.Number & vbCrLf & Err.Description End If End Sub رجاء مشاهدة هذا المقطع قبل البدء في قراءة التالي: . 1. النافذة تحت الكود كانت فاضية ، 2. نقرنا في النموذج على "الحفظ العام" ، 3. رجعنا للكود ولاحظنا النتائج النقر هي: node.Child; الصادر node.Children; 2 node.Expanded; True node.FirstSibling; الحفظ العام node.FullPath; جميع الاقسام-الحفظ العام node.Index; 2 node.Key; node.LastSibling; الشئون الهندسية node.Next; الشئون الادارية node.Parent; جميع الاقسام node.Root; جميع الاقسام node.Selected; True node.Sorted; False node.Tag; Level1 node.Text; الحفظ العام ---------------------- 4. سؤالك: فنجد ان جواب سؤالك هو في الكود: node.FirstSibling; الحفظ العام او في node.FullPath; جميع الاقسام-الحفظ العام او في node.Text; الحفظ العام 5. ولما نقرنا على "الصادر" ، 6. كانت النتيجة: node.Child; 4 node.Children; 1 node.Expanded; False node.FirstSibling; الصادر node.FullPath; جميع الاقسام-الحفظ العام-الصادر node.Index; 3 node.Key; node.LastSibling; الوارد node.Next; الوارد node.Parent; الحفظ العام node.Root; جميع الاقسام node.Selected; True node.Sorted; False node.Tag; Level2 node.Text; الصادر ---------------------- فنجد ان القيمة في: node.FirstSibling; الصادر او في node.FullPath; جميع الاقسام-الحفظ العام-الصادر او في node.Text; الصادر وعلى هذا المنوال ، تستطيع ان تتوصل الى ما تريد من هذه المعلومات ومثل ما اخبرتك في البداية ، هذا الكود من احد مشاركاتي السابقة ، لذا ، فانك تستطيع ان تستخدم الكود التالي (طبعا بعمل تغييرات بسيطة على المسميات) لإستخراج اي قيمة من الكود اعلاه: ' Dim colon As Integer ' colon = InStr(Node.Text, ":") ' Me.txt3 = Mid(Node.Text, 1, colon - 1) ' Me.Txt4 = Mid(Node.Text, colon + 1) ' colon = InStr(Node.Child, ":") ' If colon = 0 Then ' Me.txt1 = Val(Mid(Node.Child, 1, colon - 1)) + Node.Children ' Me.txt1 = "" ' Else ' Me.txt1 = Val(Mid(Node.Child, 1, colon - 1)) + Node.Children ' End If جعفر 54.1.TreeView_RTL.mdb.zip
-
شكرا أخوي رمهان بس بعد ماعرفنا السبب ، في اعتقادي انه من الافضل ان نقارن الساعة قبل الانتقال الى السجل التالي ، وخصوصا اذا بالغلط تم تشغيل البرنامج في الوقت الغير صحيح ، فالطلبة بتستانس ، كما ان البرنامج لن يعطي نتائج صحيحة إلا اذ تم تشغيله في الوقت الصح ، بينما بطريقتي ، فالحصص ستكون مضبوطة يعني الاخ جمال لازم يعطينا توقيت بداية كل حصة. فيك الخير أخوي رمهان في عمل فكرتي ، إلا اذا عندك او عند الاخ جمال فكرة اخرى جعفر
-
وعليكم السلام ايش رايك اعلمك كيف تصيد بدل ما اعطيك سمكة في احد مواضيعي السابقة ، تعمقت في الاختيارات الموجودة عندنا عند النقر على اي من مكونات الشجرة ، لذا ، في الكود على النقر على الشجرة ، اكتب هذا الكود: On Error Resume Next Debug.Print "node.Child; " & Node.Child Debug.Print "node.Children; " & Node.Children Debug.Print "node.Expanded; " & Node.Expanded Debug.Print "node.FirstSibling; " & Node.FirstSibling Debug.Print "node.FullPath; " & Node.FullPath Debug.Print "node.Index; " & Node.Index Debug.Print "node.Key; " & Node.Key Debug.Print "node.LastSibling; " & Node.LastSibling Debug.Print "node.Next; " & Node.Next Debug.Print "node.Parent; " & Node.Parent Debug.Print "node.Previous; " & Node.Previous Debug.Print "node.Root; " & Node.Root Debug.Print "node.Selected; " & Node.Selected Debug.Print "node.Sorted; " & Node.Sorted Debug.Print "node.Tag; " & Node.Tag Debug.Print "node.Text; " & Node.Text Debug.Print "----------------------" وتأكد بانك فتحت نافذة النتائج (النافذة في اسفل VBA): فكلما نقرت على الشجرة ، على طول اذا لتلك النافذة وشاهد النتيجة ، وعلى اساسها ستعرف الامر الصحيح للوصول لما تريد وإحنا في الخدمة بعد محاولاتك جعفر
-
تغير البيانات بناءاً على القائمة المنسدلة
jjafferr replied to الحياه ممر's topic in قسم الأكسيس Access
طيب ارفقي برنامجك ، واشرحي فيه اي جدول ، اي حقل محتاجة للعمل عليه جعفر -
وعليكم السلام الله يطول في عمرك وتكون دوم سالم تو انت الله هداك كتبت المعادلات كلها ، قاصر تدخل اسماءها في الكود وخلص الموضوع وين المشكلة؟ جعفر
-
وعليكم السلام هذا ممكن عن طريق التوقيت في النموذج ، ولكنه غير عملي (بالنسبة لي طبعا) ، لكن السؤال ، ليش تريد عمل هذا الشئ؟ لأن ممكن تحصل على اللي تريده بطريقه ثانيه/افضل جعفر
-
ول ول ول ، هالكثر الموضوع معقد رحم الله والديك أخوي رمهان ، رفعت الرايه عنا كلنا جعفر
-
وعليكم السلام اما انا فأضع تنسيق الحقل في الجدول ، وعلى اساسه يتنظم في النموذج والاستعلام والتقرير جعفر
-
وعليكم السلام انا عملت مربع النص ، وطريقة جلب اسم الملف ، فقط لتسهيل العمل ، انا افهم من سؤالك بأنك تريد ان توضع اسم ومسار الملف في الكود مباشرة (وإلا كيف نعرف اي ملف نشتغل علي!!) هذا هو الكود للطباعة: Private Sub cmdPrintLandscape_Click() Dim objWord As Object Set objWord = CreateObject("Word.Application") objWord.Documents.Open ("C:\Temp\abc.doc") objWord.Visible = False 'True '<== ** Look at the code below objWord.PrintOut ' wait for the printout to finish, then close Word Do While objWord.BackgroundPrintingStatus > 0 'pause 5 seconds untill the document is printed PauseTime = 5 ' Set duration. Start = Timer ' Set start time. Do While Timer < Start + PauseTime DoEvents ' Yield to other processes. Loop Loop objWord.Documents.Close Save = False objWord.Quit Set objWord = Nothing End Sub وتشغيل برنامج exe Private Sub cmd_run_Click() On Error Resume Next Shell "C:\windows\Notepad.exe", 1 End Sub جعفر
-
زيادة مبلغ إيقاف الخصم الشهري الى مبلغ القرض
jjafferr replied to طاهر اوفيسنا's topic in قسم الأكسيس Access
شكرا لك على هذه الاجابات بعد حوالي ساعة من الان ابدأ العمل إن شاء الله الفكرة هي: نبني جدول جديد اسمه tbl_Loans ، هذا الجدول نسجل فيه القروض ، بكل انواعها ، بحيث عند عمل القرض في النموذج Cridi (او اي نوع آخر من القروض) ، فتلقائيا يعمل 10 سجلات (يعتمد على نوع القرض) ، ولما يسدد قرض الشهر ، فقيمة التسديد تظهر في حقل المبلغ المدفوع (وهنا ميزة اخرى لهذا الحقل ، وهو اذا شاء الموظف ان يسدد اي مبلغ آخر ، فندخله المبلغ هنا) ، وبالنسبة لأشهر الاعفاء ، فسيكون سجل اسم الشهر موجودا ، ولكن بدون مبلغ الاقتطاع الشهري ، مع وجود ملاحظة بان الشهر معفي ، وعلى هذا الاساس ، فحساب المبالغ المطلوب اقتطاعها ، ستكون من هذا الجدول ، وحساب المبالغ المتبقية وووو ، طبعا هذا التغيير ، سيجعلك تغير في بعض النماذج الاخرى ، لقراءة المبالغ الحقيقة (وحسابها في اي وقت شئت) وليست مبالغ إفتراضية فهل نتوكل على الله بالعمل علي هذه الطريقة؟ جعفر