تقييم الموضوع :
- 0 أصوات - بمعدل 0
- 1
- 2
- 3
- 4
- 5
معلومة ::: أجعل المستخدم عبر تطبيقك يخرج برامج أخري - CodeDom
|
المشاركات : 2,523
المواضيع 707
الإنتساب : Sep 2012
السمعة :
48
الشكر: 91
تم شكره 1104 مرات في 297 مشاركات
كاتب الموضوع : BADRMEDIA
ربما رأيت فى بعض الأنظمة التى تعتمد على قاعدة بيانات SQL أن مصممي النظام أتاحوا لمدراء النظام أن يكتبوا أوامر T- SQL إلي قاعدة البيانات مباشرة – ويقوم بأعمال على النظام كأنه مصمم للنظام
وربما يقوم مصمم النظام بتصميم هذا الجزء له هو – حيث يذهب إلى متابعة نظامه فى شركة ما
لكن هل فكرت أن يقوم بتصميم جزء فى النظام – يتيح للمستخدم تصميم برنامج خاص به مباشرة
بحيث يكتب الكود ويتم تحويل هذا الكود لتطبيق !!!!!!!!!
هذا هو الجديد
يوجد فضاء اسم فى الدوت نت باسم CodeDom وهو المسئول عن ذلك
لنري مثال حي الان
===================================
افتح مشروع جديد Windows App
فى قسم فضاء الاسم أعلن عن هذا
كود :
Imports System.CodeDom
Imports System.CodeDom.Compiler
سنقوم لإنشاء إجراء هو المسئول عن العملية
نحتاج إلى اضافة NameSpace إلى الكود المنشأ وفضاء الاسم CodeDom بالفعل يمكن ذلك
كود :
Dim NameSpace_inCreateApp As New CodeNamespace("BADRMEDIA")
كما فى الكود أضفنا فضاء اسم باسم البرنامج الذى سننشأه الآن
كما يمكننا أن نضيف أى فضاء اسم أخربكل سهولة عبر Import
كود :
NameSpace_inCreateApp.Imports.Add(New CodeNamespaceImport("System"))
الكود يقول أنه سيتم اضافة فضاء اسم وهو System للكود الذى سيطبق
المشاركات : 2,523
المواضيع 707
الإنتساب : Sep 2012
السمعة :
48
الشكر: 91
تم شكره 1104 مرات في 297 مشاركات
ماذا لو أردت أن تضيف للتطبيق الذى سينشأ - كلاس Class هل فكرت فى ذلك ؟؟؟
كود :
Dim Class_inCreateApp As New CodeTypeDeclaration("BADRMEDIA_Class")
Class_inCreateApp.IsClass = True
Class_inCreateApp.Attributes = MemberAttributes.Public Or MemberAttributes.Static
NameSpace_inCreateApp.Types.Add(Class_inCreateApp)
هنا أضفنا Class باسم BADRMEDIA_Class
ولكن لم يعرف البرنامج بعد أنه Class
لكن فى السطر الثاني أخبرناه أنه Class
كود :
Class_inCreateApp.IsClass = True
وبنفس الطريقة يمكن إنشاء IsInterface وغيرها من الأنواع
فى السطر الثاثل عرفنا نوع التعريف هل هو Static أم Public
وفي النهاية أضفنا الكلاس للمشروع الجديد
كود :
NameSpace_inCreateApp.Types.Add(Class_inCreateApp)
المشاركات : 2,523
المواضيع 707
الإنتساب : Sep 2012
السمعة :
48
الشكر: 91
تم شكره 1104 مرات في 297 مشاركات
جاء دور أن نضيف Method للتطبيق المنشأ
كود :
Dim Method_inCreateApp As New CodeEntryPointMethod()
Method_inCreateApp.Attributes = MemberAttributes.Public Or MemberAttributes.Static
Method_inCreateApp.Statements.Add(New CodeSnippetStatement(TextBox1.Text))
Class_inCreateApp.Members.Add(Method_inCreateApp)
قمنا بانشاء Method باسم Method_inCreateApp ولو لاحظنا فى فى نوعه سنجد أنه CodeEntryPointMethod
وهذا يعنى أنه يعمل عمل الاجراء Main منطقة دخول البرنامج
ثم حددنا Attributes كما في السطر الثاني
فى التطبيق نحن نضيف TextBox وزر Button
في السطر الثالث
كود :
Method_inCreateApp.Statements.Add(New CodeSnippetStatement(TextBox1.Text
))
هذا أهم سطر فى الفكرة وهو أننا أخذنا الكود المكتوب في مربع النص TextBox بحيث ننفذه
وفى السطر الأخير قمنا بشئ اخر وهو أننا أضفنا Method_inCreateApp إلى الكلاس وليس الى فضاء الاسم لأن Method جزء من Class ثم الكلاس جزء من فضاء الاسم
كود :
Class_inCreateApp.Members.Add(Method_inCreateApp)
المشاركات : 2,523
المواضيع 707
الإنتساب : Sep 2012
السمعة :
48
الشكر: 91
تم شكره 1104 مرات في 297 مشاركات
الآن سنقوم بعمل ترجمة للكود وتطبيقه
كود :
Dim Compile_inCreateApp As New CodeCompileUnit
Compile_inCreateApp.Namespaces.Add(NameSpace_inCreateApp)
Dim CompilingParams As New Compiler.CompilerParameters()
CompilingParams.ReferencedAssemblies.Add("system.dll")
CompilingParams.GenerateInMemory = False
CompilingParams.GenerateExecutable = True
CompilingParams.OutputAssembly = "c:\BADRMEDIA.exe"
Dim CodeProvider As New Microsoft.VisualBasic.VBCodeProvider
Dim Compiler As ICodeCompiler = CodeProvider.CreateCompiler
Dim CompilerResult As CompilerResults = Compiler.CompileAssemblyFromDom(CompilingParams, Compile_inCreateApp)
في أول الكود قمنا بانشاء CodeCompileUnit
كود :
Dim Compile_inCreateApp As New CodeCompileUnit
التى تقوم باعطاء معلومات عن التطبيق من خلال Method
ثم نضيف ذلك إلى فضاء الاسم
كود :
Compile_inCreateApp.Namespaces.Add(NameSpace_inCreateApp
)
ُثم أنشأنا عنصر نرسل له خصائص العنصر Compiler
كود :
Dim CompilingParams As New Compiler.CompilerParameters()
ثم أرسلنا ثلاث خصائص
كود :
CompilingParams.GenerateInMemory = False
CompilingParams.GenerateExecutable = True
CompilingParams.OutputAssembly = "c:\BADRMEDIA.exe"
الخاصية الأول أعطت الصلاحية للكومبيلر بعمل ال Generation فى الذاكرة
والخاصية الثانية اعطت له الصلاحية بعمل ملف تنفيذى
والثالثة أعطت مسار انشاء الملف واسمه
===================
أنشانا Complier
كود :
Dim Compiler As ICodeCompiler = CodeProvider.CreateCompiler
ثم سنمرر للكائن CompilerResults الخواص و Compiler
كود :
Dim CompilerResult As CompilerResults = Compiler.CompileAssemblyFromDom(CompilingParams, Compile_inCreateApp)
المشاركات : 2,523
المواضيع 707
الإنتساب : Sep 2012
السمعة :
48
الشكر: 91
تم شكره 1104 مرات في 297 مشاركات
لقد قمنا فعلاً بالترجمة للمشروع - لكن كيف نصطاد الخطأ
كود :
If CompilerResult Is DBNull.Value Or CompilerResult.Errors.Count > 0 Then
For i As Integer = 0 To CompilerResult.Errors.Count - 1
MsgBox(CompilerResult.Errors(i).ToString)
Next
End If
الكود واضح وما يحتاج شرح
المشاركات : 2,523
المواضيع 707
الإنتساب : Sep 2012
السمعة :
48
الشكر: 91
تم شكره 1104 مرات في 297 مشاركات
بالفعل أنهينا شرح الاجراء وسيكون شكله فى النهاية
كود :
Public Sub CreateApp()
Dim NameSpace_inCreateApp As New CodeNamespace("BADRMEDIA")
NameSpace_inCreateApp.Imports.Add(New CodeNamespaceImport("System"))
Dim Class_inCreateApp As New CodeTypeDeclaration("BADRMEDIA_Class")
Class_inCreateApp.IsClass = True
Class_inCreateApp.Attributes = MemberAttributes.Public Or MemberAttributes.Static
NameSpace_inCreateApp.Types.Add(Class_inCreateApp)
Dim Method_inCreateApp As New CodeEntryPointMethod()
Method_inCreateApp.Attributes = MemberAttributes.Public Or MemberAttributes.Static
Method_inCreateApp.Statements.Add(New CodeSnippetStatement(TextBox1.Text))
Class_inCreateApp.Members.Add(Method_inCreateApp)
Dim Compile_inCreateApp As New CodeCompileUnit
Compile_inCreateApp.Namespaces.Add(NameSpace_inCreateApp)
Dim CompilingParams As New Compiler.CompilerParameters()
CompilingParams.ReferencedAssemblies.Add("system.dll")
CompilingParams.GenerateInMemory = False
CompilingParams.GenerateExecutable = True
CompilingParams.OutputAssembly = "c:\BADRMEDIA.exe"
Dim CodeProvider As New Microsoft.VisualBasic.VBCodeProvider
Dim Compiler As ICodeCompiler = CodeProvider.CreateCompiler
Dim CompilerResult As CompilerResults = Compiler.CompileAssemblyFromDom(CompilingParams, Compile_inCreateApp)
If CompilerResult Is DBNull.Value Or CompilerResult.Errors.Count > 0 Then
For i As Integer = 0 To CompilerResult.Errors.Count - 1
MsgBox(CompilerResult.Errors(i).ToString)
Next
End If
End Sub
وتحت حدث الزر Button نكتب هذا الكود
كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
CreateApp()
Shell("c:\BADRMEDIA.exe", AppWinStyle.NormalFocus)
End Sub
بالنسبة لكود المستخدم كمثال :
اكتب فى مربع النص هذا الكود
كود :
console.writeline("www.vb4arab.com")
for i as integer = 0 to 5
console.writeline("www.BADRMEDIA.com")
next
console.readline()
المشاركات : 2,523
المواضيع 707
الإنتساب : Sep 2012
السمعة :
48
الشكر: 91
تم شكره 1104 مرات في 297 مشاركات
|
المواضيع المحتمل أن تكون متشابهة . |
الموضوع : |
الكاتب |
الردود : |
المشاهدات : |
آخر رد |
|
معلومة :: تعلم كيف تحفظ صورة في My.Settings بدون الإحتياج إلى مسارها! |
أسامة أحمد |
13 |
6,269 |
15-04-24, 01:13 AM
آخر رد: أبو جودة
|
|
ما تأثير الالوان على المستخدم |
viv |
4 |
2,771 |
11-06-18, 04:26 AM
آخر رد: mohamed haroon
|
|
[مشروع] برامج محاكاة |
Fantastico |
10 |
4,845 |
01-08-17, 12:23 AM
آخر رد: moor
|
|
معلومة ::: ListBox |
Blue Sky |
14 |
22,067 |
14-11-16, 11:32 PM
آخر رد: فارس جراح
|
|
الترقيم التلقائي في برامج الداتا بيز |
silverlight |
1 |
2,660 |
07-06-16, 12:05 AM
آخر رد: silverlight
|
|
معلومة مهمه فى المصفوفات |
ali.alfoly |
2 |
3,734 |
30-08-13, 02:25 AM
آخر رد: ali.alfoly
|
|
من المنتدى القديم - معلومة ::: ProgressBar ( للاخ BADRMEDIA ) |
المبرمج علي نوري |
2 |
3,832 |
23-08-13, 11:17 PM
آخر رد: nin9e
|
|
اجعل برنامج مضاد للغلق من المستخدم او من التاسك مانجر |
just.coder |
5 |
3,269 |
01-05-13, 03:59 AM
آخر رد: mr.omar
|
|
التقاط لون من شاشة المستخدم |
H111er |
0 |
1,922 |
11-12-12, 08:54 PM
آخر رد: H111er
|
|
من المنتدى القديم - معلومة ::: CheckBox ( للاخ BADRMEDIA ) |
المبرمج علي نوري |
1 |
2,921 |
30-11-12, 05:54 PM
آخر رد: مبرمج أوتار
|
يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم