15-11-17, 01:04 AM
الصفحات : 1 2
15-11-17, 01:14 AM
(15-11-17, 01:04 AM)silverlight كتب : [ -> ]لا تقلق علي السورس كود فهو في أمان
تستطيع ارسال الرابط في رسالة
سوف افتح الرسائل انتظرني لحظات
قمت بأرسال الرساله لك
شكرا
15-11-17, 03:50 AM
البرتامج ضخم و و محتاج مراجعة كاملة للكود
عموما ...... في الفورم Main حاول تغير الاسم الي MainForm
وفي نفس الفورم
عليك مثلا أن لا تقوم بتحمبل الصور من الريسورس في الخدث load
لكن الأفضل أن يكون لديك شئ مثل هذا الكود
ايضا عليك تغيير الروتين SetPicture ليكون كالتالي
يوجد Flicker أو اهنزاز
يحدث عند تحريك الفورم ونفس الشئ يحدث عند تحريك أي فورم أخر
اضبط الخاصية BackgroundBuffer لكل فورم و اجعلها True
بشكل عام انت تستخدم صور كثيرة كخلفية و يمكنك أن توفر وقتا ضخما و تقلل من الكود الخاص بكل Panel بحيث انه يتم تصميمها لوحدها باستخدام الوراثة
اخر شئ انا شغلت الفروم فترة 10 دقايق و لم يحدث شئ
لكنك لا تضمن ما يمكن أن حدث معك أثناء التشغيل عند العميل
خاصة انك تستخدم مكتبات مختلفة مثل مترو و خلافه
وأنا لا أضمن لك كفاءة هذه المكتبات تماما
حاول تقلل من حجم الفونت و تقلل من تحميل اشياء كثيرة عند بداية التشغيل
دي ملاحظاتي
لكن المشروع محتاج إعادة نظر خصوصا قيما يخص الجرافكس
الكلاس التالي هدية لك و يمكنك ان تستخدمه مع الريسورس بدون أن يحدث مشاكل في عملية Dispose
الكود التالي يوضح كيفية استخدام الكلاس مع ملف صور موجود في الريسورس
أو مع صورة من ملف
عموما ...... في الفورم Main حاول تغير الاسم الي MainForm
وفي نفس الفورم
عليك مثلا أن لا تقوم بتحمبل الصور من الريسورس في الخدث load
لكن الأفضل أن يكون لديك شئ مثل هذا الكود
PHP كود :
Private ReadOnly Property Images As IEnumerable(Of Bitmap)
Get
Dim result As IEnumerable(Of Bitmap) = Nothing
If result Is Nothing Then
Dim images As List(Of Bitmap) = New List(Of Bitmap)()
images.Add(My.Resources.minimize_white_32) '0
images.Add(My.Resources.server_connection_blue_64) ' 1
result = images.ToList
End If
Return result
End Get
End Property
ايضا عليك تغيير الروتين SetPicture ليكون كالتالي
PHP كود :
Private Sub SetPicture(ByVal imgSrc As Bitmap, ByRef target As PictureBox)
Using imgDest As Bitmap = New Bitmap(target.ClientSize.Width, target.ClientSize.Height)
Dim source_aspect, dest_aspect, k_aspect, K As Double
source_aspect = imgSrc.Width / imgSrc.Height
dest_aspect = imgDest.Width / imgSrc.Height
k_aspect = dest_aspect / source_aspect
If (k_aspect > 1) Then
K = imgSrc.Height / imgDest.Height
Else
K = imgSrc.Width / imgDest.Width
End If
Dim x_new, y_new, w_new, h_new As Integer
w_new = CInt(imgSrc.Width / K)
h_new = CInt(imgSrc.Height / K)
x_new = CInt(imgDest.Width / 2 - w_new / 2)
y_new = CInt(imgDest.Height / 2 - h_new / 2)
Using g As Graphics = Graphics.FromImage(imgDest)
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(imgSrc, New Rectangle(x_new, y_new, w_new, h_new))
End Using
target.Image = imgDest
End Using
End Sub
يوجد Flicker أو اهنزاز
يحدث عند تحريك الفورم ونفس الشئ يحدث عند تحريك أي فورم أخر
اضبط الخاصية BackgroundBuffer لكل فورم و اجعلها True
بشكل عام انت تستخدم صور كثيرة كخلفية و يمكنك أن توفر وقتا ضخما و تقلل من الكود الخاص بكل Panel بحيث انه يتم تصميمها لوحدها باستخدام الوراثة
اخر شئ انا شغلت الفروم فترة 10 دقايق و لم يحدث شئ
لكنك لا تضمن ما يمكن أن حدث معك أثناء التشغيل عند العميل
خاصة انك تستخدم مكتبات مختلفة مثل مترو و خلافه
وأنا لا أضمن لك كفاءة هذه المكتبات تماما
حاول تقلل من حجم الفونت و تقلل من تحميل اشياء كثيرة عند بداية التشغيل
دي ملاحظاتي
لكن المشروع محتاج إعادة نظر خصوصا قيما يخص الجرافكس
الكلاس التالي هدية لك و يمكنك ان تستخدمه مع الريسورس بدون أن يحدث مشاكل في عملية Dispose
PHP كود :
Imports System.Runtime.InteropServices
Public Class ImageBuffer
Implements IDisposable
Private _handle As IntPtr
Private _source As Bitmap
Private _valid As Integer
Public Sub New(source As Bitmap)
Me._source = source
Me._valid = If(Not source Is Nothing, 1, 0)
Me.Assign()
End Sub
Public ReadOnly Property Valid() As Boolean
Get
Return (Me._handle <> IntPtr.Zero) AndAlso (Not _valid)
End Get
End Property
Public ReadOnly Property Handle As IntPtr
Get
Return Me._handle
End Get
End Property
Public Sub Dispose()
Me.Release()
If Me._source IsNot Nothing Then
Me._source.Dispose()
Me._source = Nothing
End If
End Sub
Private Sub Assign()
If Me._valid Then
Me.Assign(Me._source)
End If
End Sub
Private Sub Assign(source As Bitmap)
If source IsNot Nothing Then
Me.Release()
Me._handle = source.GetHbitmap
End If
End Sub
Private Sub IDisposable_Dispose() Implements IDisposable.Dispose
Me.Dispose()
End Sub
Private Sub Release()
If Not _handle.Equals(IntPtr.Zero) Then
Me._handle = New IntPtr(0)
Marshal.FreeHGlobal(Me._handle)
End If
End Sub
End Class
الكود التالي يوضح كيفية استخدام الكلاس مع ملف صور موجود في الريسورس
أو مع صورة من ملف
PHP كود :
Using buffer As ImageBuffer = New ImageBuffer(CType(My.Resources.dest, Bitmap))
If buffer.Valid Then
PictureBox1.Image = Image.FromHbitmap(buffer.Handle)
End If
End Using
PHP كود :
Using buffer As ImageBuffer = New ImageBuffer(New Bitmap(".\dest.jpg"))
If buffer.Valid Then
PictureBox1.Image = Image.FromHbitmap(buffer.Handle)
End If
End Using
15-11-17, 06:46 AM
صديقي silverlight حقيقه لا استطيع شكرك كفايه على مجهودك ووقتك لمساعدتي
بفضل لله وبفضلك تمكنت من معرفة المشكله التي تسبب كل هذا
وتستطيع تجربه ذلك بالنسخه التي لديك، اذا لاحظت في ال main load يوجد هناك Timer2.start و انا قمت بوضعه كملاحظه
عندما كنت احاول ان افصل الاتصال بقاعده البيانات، وبالصدفه قمت بتشغيل النسخه التي قمت بارسالها لك ، قلت لعل المشكله بالاتصال
او بداعي الفضول و فعلا لم يحدث شيء عند التشغيل ، فقمت بفصل الاتصال بالنسخه الاصليه لكن المشكله كانت لا تزال موجودة، عند تشغيل النسخه
المرسله مره اخرى لاحظت ان الساعه التي في اعلى ال main form لا تعمل، قمت بتعطيل ال Timer2 الخاص بالساعه في النشخه الاصليه وحلت المشكله.
على كل حال انا شاكر جدا لمجهولك ووقتك ، و اذا كان لديك اي اقتراحات او اذا لاحظت اي شيئ خاطأ في طريقه البرمجه لدي ساكون مسرور بسماع انتقاداتك.
بفضل لله وبفضلك تمكنت من معرفة المشكله التي تسبب كل هذا
وتستطيع تجربه ذلك بالنسخه التي لديك، اذا لاحظت في ال main load يوجد هناك Timer2.start و انا قمت بوضعه كملاحظه
عندما كنت احاول ان افصل الاتصال بقاعده البيانات، وبالصدفه قمت بتشغيل النسخه التي قمت بارسالها لك ، قلت لعل المشكله بالاتصال
او بداعي الفضول و فعلا لم يحدث شيء عند التشغيل ، فقمت بفصل الاتصال بالنسخه الاصليه لكن المشكله كانت لا تزال موجودة، عند تشغيل النسخه
المرسله مره اخرى لاحظت ان الساعه التي في اعلى ال main form لا تعمل، قمت بتعطيل ال Timer2 الخاص بالساعه في النشخه الاصليه وحلت المشكله.
على كل حال انا شاكر جدا لمجهولك ووقتك ، و اذا كان لديك اي اقتراحات او اذا لاحظت اي شيئ خاطأ في طريقه البرمجه لدي ساكون مسرور بسماع انتقاداتك.
15-11-17, 01:46 PM
دعني أوضح لك شئ أخير فقط
لو نظرت الي الصورة في مشاركتك الأولي وهي أصل سؤالك
ستجد أن الخطأ حدث عند محاولتك إظهار الديالوج أو محاولتك إظهار الفرم shops_diagram
هنا فقط حدث الخطأ
و الخطأ حدث في فضاء الأسماء System.Drawing
ونوع الحطأ System OutOfMemory
أما سبب الخطأ فهو إما أنت أو أحد المكتبات التي تستخدمها يقوم باستخدام Graphic Object لكي يرسم شئ ما
وهذه Graphic Object لازم يتعمل لها Dispsoe
في البداية أنا اعتقدت انها المكتبات التي تستخدمها في برنامج
لكنك أوضحت لاحقا أن نفس المشكلة تحدث حتي لو استخدمت الكونترول الخاصة بمايكروسوفت و الموجودة في الفيجوال استوديو
لذلك لا يتبقي أن السبب هو كود كتبته أنت في shop_digram
راجع أكوادك فقط و تأكد أن كل شئ تمام
بالتوفيق
لو نظرت الي الصورة في مشاركتك الأولي وهي أصل سؤالك
ستجد أن الخطأ حدث عند محاولتك إظهار الديالوج أو محاولتك إظهار الفرم shops_diagram
هنا فقط حدث الخطأ
و الخطأ حدث في فضاء الأسماء System.Drawing
ونوع الحطأ System OutOfMemory
أما سبب الخطأ فهو إما أنت أو أحد المكتبات التي تستخدمها يقوم باستخدام Graphic Object لكي يرسم شئ ما
وهذه Graphic Object لازم يتعمل لها Dispsoe
في البداية أنا اعتقدت انها المكتبات التي تستخدمها في برنامج
لكنك أوضحت لاحقا أن نفس المشكلة تحدث حتي لو استخدمت الكونترول الخاصة بمايكروسوفت و الموجودة في الفيجوال استوديو
لذلك لا يتبقي أن السبب هو كود كتبته أنت في shop_digram
راجع أكوادك فقط و تأكد أن كل شئ تمام
بالتوفيق
15-11-17, 04:25 PM
صديقي silverlight ، المشكله لا تحصل فقط عند استدعاء shop_diagram المشكله تحصل
بعد 10 دقائق تقريبا و اذا قمت بالضغط على اي button يقوم باستدعاء form بغض النظر عن الفورم او محتواه
سيحدث ال break ويتوقف البرنامج
وبالنسبه للمكتبات انا استخدم مكتبه لل combobox ومكتبه textbox وفمت بعمل مشروع سابق ولم يحدث اي مشاكل.
كما قلت لك المشكله تحدث بسبب الوظيفه التي يقوم بها timer2 في الفورم الرئيس لا ادري ما الذي يحصل لان وظيفنه لاظهار الساعه
وهو موصول ب progress bar يقوم بالزياده مع كل ثانيه.
والحمد لله تم حل المشكله الان البرنامج يعمل لساعات دون مشاكل.
بعد 10 دقائق تقريبا و اذا قمت بالضغط على اي button يقوم باستدعاء form بغض النظر عن الفورم او محتواه
سيحدث ال break ويتوقف البرنامج
وبالنسبه للمكتبات انا استخدم مكتبه لل combobox ومكتبه textbox وفمت بعمل مشروع سابق ولم يحدث اي مشاكل.
كما قلت لك المشكله تحدث بسبب الوظيفه التي يقوم بها timer2 في الفورم الرئيس لا ادري ما الذي يحصل لان وظيفنه لاظهار الساعه
وهو موصول ب progress bar يقوم بالزياده مع كل ثانيه.
والحمد لله تم حل المشكله الان البرنامج يعمل لساعات دون مشاكل.
09-01-19, 01:13 AM
شكرا لك يا اخوتي
الصفحات : 1 2