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

معلومة:مستجدات في تحويل شكل البرنامج إلى XP, Windo

مغلق
بدأه محمد سامر أبو سلو في 30 سبتمبر 2005 · 11 رد · 988 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

منذ فترة طرحت موضوع بعنوان سطر برمجي واحد لتحول شكل البرنامج إلى XP, Windo وتم النقاش فيه حول الطريقة application.enablevisualstyles وطريقة الـ manifest وحيث أن الطريقة الأولى لها مشاكل مع أيقونات الـ ToolBar وأن الثانية لها صعوباتها مع أنها لاتظهر فيها المشكلة السابقة ولمن لم يتابع الموضوع في وقتها إليكم رابط الموضوع القديم

سطر برمجي واحد لتحول شكل البرنامج إلى XP, Windo

والمستجدات هو إمكانية إنشاء ملف manifest آليا من داخل البرنامج في حالة عدم وجوده وبهذا نكون قد حلينا المشكلتين الأساسيتين التي تواجهنا هنا

1 - في حال عدم إدخاله ضمن الـ exe هناك خوف من حذف الملف

2 - موضوع إدخاله في الـ exe لتلافي مشكلة الحذف ربما يكون غير مريح للبعض

بالإضافة إلى

3 - يجب عليك دوما التأكد من أن الملف يحتوي رقم الإصدار الصحيح لبرنامجك

تم تعديل هذه المشاركة بواسطة samerselo في 30 سبتمبر 2005 في 00:36

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#2

وإليكم الإجراء الذي يقوم بذلك كاملا فقط أضفه في أي مكان في مشروعك

    Sub CreateManifest()
        If File.Exists(Application.StartupPath & "\" & Application.ProductName & ".exe.manifest") = True Then
            Exit Sub
        Else
            'Generate File Content
            Dim Content As String
            Dim bl As String = vbCrLf
            Content = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" & bl
            Content &= "<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>" & bl
            Content &= "<assemblyIdentity" & bl
            Content &= "version='1.0.0.0'" & bl
            Content &= "processorArchitecture='X86'" & bl
            Content &= "name='Microsoft.Winweb."
            Content &= Application.ProductName
            Content &= ".exe'" & bl
            Content &= "type='win32'" & bl
            Content &= "/>" & bl
            Content &= "<description>"
            Content &= Application.ProductName
            Content &= "</description>" & bl
            Content &= "<dependency>" & bl
            Content &= "<dependentAssembly>" & bl
            Content &= " <assemblyIdentity" & bl
            Content &= "type='win32'" & bl
            Content &= "name='Microsoft.Windows.Common-Controls'" & bl
            Content &= "version='6.0.0.0'" & bl
            Content &= "processorArchitecture='X86'" & bl
            Content &= "publicKeyToken='6595b64144ccf1df'" & bl
            Content &= "language='*'" & bl
            Content &= " />" & bl
            Content &= "</dependentAssembly>" & bl
            Content &= "</dependency>" & bl
            Content &= "</assembly>"
            'Create Manifest File
            Dim sw As StreamWriter = File.CreateText(Application.StartupPath & "\" & Application.ProductName & ".exe.manifest")
            sw.Write(Content)
            sw.Close()
            'Reload Me
            Shell(Application.StartupPath & "\" & Application.ProductName & ".exe", AppWinStyle.NormalFocus, False)
            Me.Close()
        End If
    End Sub

وفي حدث Load للفورم الرئيسية في برنامجك form1 مثلا أو في بداية sub الذي تبدأ منه برنامجك يمكنك استخدام كود شبيه بالتالي لاستخدام الإجراء

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        CreateManifest()
        Me.Refresh()
    End Sub

مرفق مثال عملي للكود

WindowsApplication1.zip

تم تعديل هذه المشاركة بواسطة samerselo في 30 سبتمبر 2005 في 00:30

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

الف شكر يا اخي لدس سؤال كيف يمكنني تغير شكل الزر للشكل الذي اريده؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

تعلم:كيف تشغل برنامجك (قبل) ما يشتغل ال explorer, مثل ال check desk في الوندوز 98 و me

اللهم عطر يومنا بالايمان وانر قلبنا بالقرآن ورزقنا من حيث لانحتسب واجعل لنا سكينة تطمئن بها روحنا واحفظنا من كل سوء اللهم بارك لنا في رجب وشعبان وبلغنا رمضان آمين يارب العالمين

ranneh.com

#4

الفكرة من هذا الموضوع هو الاستفادة من السمات المرئية للويندوز إكس بي فهو يغير شكل الفورم والتحكمات إلى السمة المستخدمة حاليا من قبل الويندوز

استخدام المثال هنا أعتقد انه واضح خاصة بوجود المثال العملي ولمزيد من التفاصيل راجع الموضوع القديم المشار إليه ضمن المشاركة الأولى بهذا الموضوع

تم تعديل هذه المشاركة بواسطة samerselo في 30 سبتمبر 2005 في 14:28

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#5

أما إن كنت تقصد موضوع تغيير شكل الزر إلى بيضاوي أو أي شكل آخر متعدد الأطراف فهذا خارج عن هذا الموضوع هنا ويمكنك عمل ذلك باستخدام أوامر GDI+ ضمن الحدث paint الخاص بالزر

تم تعديل هذه المشاركة بواسطة samerselo في 30 سبتمبر 2005 في 14:31

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#6

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

   Public Sub CreateManifest(ByVal Frm As Object)

        Dim FileName As String = Application.ExecutablePath & ".manifest"
        If File.Exists(FileName) = True Then
            Exit Sub
        Else
            'Generate File Content
            Dim Content As String
            Dim bl As String = vbCrLf
            Content = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" & bl
            Content &= "<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>" & bl
            Content &= "<assemblyIdentity" & bl
            Content &= "version='1.0.0.0'" & bl
            Content &= "processorArchitecture='X86'" & bl
            Content &= "name='Microsoft.Winweb."
            Content &= Application.ProductName
            Content &= ".exe'" & bl
            Content &= "type='win32'" & bl
            Content &= "/>" & bl
            Content &= "<description>"
            Content &= Application.ProductName
            Content &= "</description>" & bl
            Content &= "<dependency>" & bl
            Content &= "<dependentAssembly>" & bl
            Content &= " <assemblyIdentity" & bl
            Content &= "type='win32'" & bl
            Content &= "name='Microsoft.Windows.Common-Controls'" & bl
            Content &= "version='6.0.0.0'" & bl
            Content &= "processorArchitecture='X86'" & bl
            Content &= "publicKeyToken='6595b64144ccf1df'" & bl
            Content &= "language='*'" & bl
            Content &= " />" & bl
            Content &= "</dependentAssembly>" & bl
            Content &= "</dependency>" & bl
            Content &= "</assembly>"
            'Create Manifest File
            Dim sw As StreamWriter = File.CreateText(FileName)
            sw.Write(Content)
            sw.Close()
            'Reload Me
            Shell(Application.ExecutablePath, AppWinStyle.NormalFocus, False)
            Frm.Close()
        End If
    End Sub

واستخدامها لم يتغير كثيرا فقط

بدلا من

CreateManifest()

يجب عليك استخدام

CreateManifest(Me)

تم تعديل هذه المشاركة بواسطة samerselo في 30 سبتمبر 2005 في 14:38

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#7

بس في شغلة نسيتها يجب عليك إضافة الاستيراد التالي في بداية الملف الذي سيحتوي على الإجرائية

Imports System.IO

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#8

شكراً أخي الكريم على هذا المجهود الطيب، وهذه الطريقة بالفعل جيدة لمن يعمل برنامج ويريد أن يشغله على الفريمورك 1.0 أما إذا أراد تشغيله على الفريمورك 1.1 أو 2.0 (أي إذا عمله بالفيجوال ستديو 2003 و2005) فمن المفضل أن يقوم بذلك عن طريق كتابة سطر وحيد يفي بالغرض وذلك بعد عمل إنشلايزينغ للفورم:

Application.EnableVisualStyles()

Learn Japanese :>>> http://www.nouben.com/

#9

السلام على من اتبع الهدى ورحمة الله وبركاته

عزيزي سمير هل هذا حل للمشكلة التي طرحتها في قسم السي شارب الموضوع

وشكرا

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#10

@أخ HMS

كلامك صحيح بشكل عام ولكن في الفريموورك 1.1 (فيجول ستوديو 2003) - لم اعمل على الفريموورك 2 (فيجول ستوديو 2005) - هناك مشكلة تم طرحها في الموضوع القديم المشار إليه أعلاه عندما تقوم باستخدام الأمر EnableVisualStyles وهي أن أيقونات التول بار وكذلك الأزرار تختفي عند استخدام هذا الأمر حيث لم نستطع تجاوز هذه المشكلة اثناء المناقشات التي دارت في الموضوع القديم المشار إليه أعلاه ومن هنا كانت العودة لطريقة الـ Manifest التي تعمل على فيجول ستوديو 2002 و 2003 بشكل رائع رغم صعوبتها بالنسبة للبعض

@أخ Ahmed H. Alawady

لايوجد في الموضوع الذي أشرت إليه حل للمشكلة المذكورة لأنه حتى تعمل الطريقتين يجب عليك جعل FlatStyle مساوي لـ System ويمكن اعتبار هذا حل مؤقت للمشكلة المذكورة وهو برأيي أفضل حل حتى الآن

مازالت مشكلة EnableVisualStyles مع أيقونات الأزرار والتول بار غير محلولة حتى الآن ضمن فيجول ستوديو 2003 الذي أعمل عليه - بالنسبة لفيجول ستوديو 2005 لا أدري -

-يرجى ممن لديه نسخة من فيجول ستوديو 2005 التجريب وإخبارنا بالنتيجة -

لذا يبقى الحل الأفضل حتى الآن هو طريقة الـ manifest

أخوكم محمد سامر

بانتظار آراء الجميع في الموضوع لأنني أعتقد أن هذا الموضوع مهم للجميعع

تم تعديل هذه المشاركة بواسطة samerselo في 30 سبتمبر 2005 في 19:43

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#11

أعتذر أخي samerselo فأنا لم أقرأ تلك المشاركة.

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

Learn Japanese :>>> http://www.nouben.com/

#12

@أخ HMS

لامشكلة - المهم هو النقاش البناء للوصول إلى الحل الأفضل

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

هذا الموضوع مغلق.

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