تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] كيفية إنشاء أدوات جديدة
#1
Question 
السلام عليكم

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


ثانيا عندي سؤال حيرني من زمان أدور وأبحث عن هذا الكود وحاولت أكثر من محاولة
في الكود وخرجت عندي نسبيا النتيجة 40%

السؤال : كيف أستطيع إذا تم الظغط على الـــcommand يتم توليد CommandButton جديد

مثل الــــــForm أستطيع أن أقول له
كود :
Dim Frm As New Form1
Form1.show
فيتم توليد Form1 جديد

أريد مثل هذا الكود ولكن أريده أن يولد CommandButton جديد

وأعذروني إن أطلت عليكم
والسلام عليكم ورحمة الله وبركاته
الرد }}}}
تم الشكر بواسطة:
#2
وعليكم السلام ورحمة الله وبركاته

هذا كود انشاء زر جديد وتنفيد امر من خلاله

كود :
Option Explicit
Private WithEvents cmd As CommandButton
Private Sub Command1_Click()
Set cmd = Form1.Controls.Add("VB.CommandButton", "cmdOne")
cmd.Visible = True
cmd.Caption = "New Command"
End Sub

Private Sub cmd_Click()
MsgBox "New Command"
End Sub

بالتوفيق
الرد }}}}
تم الشكر بواسطة: ناجي إبراهيم , VB_Coder , النبراس12
#3
أخي هذا الكود يضيف زر أمر مرة واحدة فقط

لو ضغط من جديد على زر Command1 لايضيف الزر من جديد

حمل المرفق وبعد إظافة الزر حركه من مكانه ثم عد واضغط Command1 تجده لايعمل

أفيدونا هذا الملف المرفق


الملفات المرفقة
.rar   مثال إضافة أدوات.rar (الحجم : 1.4 ك ب / التحميلات : 46)
الرد }}}}
تم الشكر بواسطة:
#4
السلام عليكم...

شكراً للأخ AL_BRNS الذي سبق بالإجابة.

إذا كنت تعرف مسبقاً ما هي المكونات التي تريد إنشاء نسخ منها أثناء التشغيل (أي بالكود) فإن أسهل طريقة هي استعمال مصفوفة المكونات (Control Array) أي مجموعة مكونات من نوع واحد (مثلاً CommandButton أو TextBox) و تنتمي لمصفوفة تحمل نفس الاسم و يميزها رقم المؤشر (Index).

لإنشاء مصفوفة مكونات استعمل إحدى طريقتين:

أ. بضط الخاصية Index:

1. ضع أول عنصر (مثلاً CommandButton) على الـ Form (نفرض أن اسمه سيكون Command1).
2. في الخاصية Index لـ Command1 اكتب 0 (صفر).

ستقوم VB تلقائياً بإنشاء مصفوفة مكونات اسمها Command1 و يصبح اسم أول عنصر فيها هو:
كود :
Command1(0)


ب. بالنسخ:

1. بعد وضع الـ Command1 على الـ Form انقر عليه بالزر الأيمن و انسخه (Copy أو اضغ Ctrl+C).
2. انقر على الـ Form بالزر الأيمن و ألصق (Paste أو اضغط Ctrl+V). ستسألك VB ما إذا كنت تريد إنشاء مصفوفة مكونات (Control Array) فأجب بنعم.

ستقوم VB تلقائياً بإنشاء مصفوفة مكونات اسمها Command1 و يصبح اسما أول عنصرين فيها هما:
كود :
Command1(0)
Command1(1)

* المفهوم من سؤالك أنك لا تريد وجود المكونات مسبقاً. استعمل الطريقة الأولى. أي بعد وضع مكون واحد اضبط الخاصية Index التابعة له على 0. و لكي لا يكون مرئياً بشكل مبدئي أثناء التشغيل اضبط الخاصية Visible التابعة له على False.

* في بداية الكود (في قسم التصريحات العام) عرف متغيراً كعداد، و اكتب إجراءاً لتحميل زر جديد:
كود :
Private ButtonCount As Integer

Private Sub CreateNewButton(ACaption As String, ALeft As Single, ATop As Single, AWidth As Single, AHeight As Single, ATag As String)
    ButtonCount = ButtonCount + 1

    Load Command1(ButtonCount)
    With Command1(ButtonCount)
        .Caption = ACaption
        .Move ALeft, ATop, AWidth, AHeight
        .Tag = ATag
        .Visible = True
    End With
End Sub

* عندما تريد إنشاء مكون جديد (CommandButton في هذا المثال) قم باستدعاء الإجراء السابق (في زر آخر أو في أمر قائمة أو حيثما تريد):
كود :
CreateNewButton "new_caption", new_left, new_top, new_width, new_height, "new_tag"

* استعملنا الخاصية Tag لنضع بها قيمة تميز الأزرار عن بعضها لغرض الكود.

مثلاً لنفرض أننا نريد إنشاء 3 أزرار تحرير (قص، نسخ، لصق):

كود :
CreateNewButton "Cut", 50, 50, Command1(0).Width, Command1(0).Height, "cut"
CreateNewButton "Copy", 50, 120, Command1(0).Width, Command1(0).Height, "copy"
CreateNewButton "Paste", 50, 190, Command1(0).Width, Command1(0).Height, "paste"

* كيف نجعل هذه الأزرار تنفذ عملاً ما؟
ننقر نقراً مزدوجاً على الزر الأصلي لفتح الكود على إجراء الحدث Click ستلاحظ أن له بارامتراً اسمه Index يشير إلى رقم الزر في مصفوفة المكونات (إذا لم يكن الزر عنصراً في مصفوفة مكونات فلن يكون لإجراء الحدث Click أية بارامترات). إذا كنا نعرف رقم مؤشر المكون الذي نتعامل معه فيمكننا استعمال البارامتر Index و لكننا - في هذا المثال - لا نعرف، و بالتالي سنستعمل الخاصية Tag كما ذكرنا سابقاً:

كود :
Private Sub Command1_Click(Index As Integer)
    Select Case Command1(Index).Tag
        Case "cut"
            ' كود القص
        Case "copy"
            ' كود النسخ
        Case "paste"
            ' كود اللصق
    End Select
End Sub


* الطريقة الثانية طويلة بعض الشيء و تحتاج إلى استعمال الـ Class Modules.

نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}}
تم الشكر بواسطة: VB_Coder , AL_BRNS , النبراس12
#5
تم بحمد الله التعامل مع إضافة الأدوات ولكن بقيت مشكلة صغيرة أو كبيرة (لا أعلم xDHuh)
المشكلة هي :

أنا معي كود تحريك الأدوات على الــــForm ولكن في حين أني أردت تحريك الأدوات المضافة((Command(Indexs) يطلب مني تعريف Index وللمعلومية أن الكود يضاف في حدثين الأول هو : Form_DragDrop وفي هذ الحدث يرفض التعرف على Index

الثاني هو : Command1_MouseDown وهنا تم تعريف Index

وعندما حاولت تعريف Index في General لم تظهر لي أخطاء لكن الكود لا يعمل

فما هو الحل أخي علما بأن الكود يعمل 100%

وإن لم يفهم كلامي (وأنا عارف إنكم ما فهمتم شي )

حملوا المرفقات


الملفات المرفقة
.rar   مثال إضافة أدوات.rar (الحجم : 1.52 ك ب / التحميلات : 52)
قال الإمام الشافعي رحمه الله
جد لأخيك المسلم سبعين عذرا فإن لم تجد فقل هناك عذر لا يعلمه إلا الله ولا أعلمه أنا
من أقوال الحكماء
الرد }}}}
تم الشكر بواسطة:
#6
السلام عليكم

- الشكر للأخوة الذين أجابوا في البداية , وهذا التعديل فقط إكمال النقص البسيط المتبقي .

- تحياتي .


الملفات المرفقة
.rar   مثال إضافة أدوات-Fixed.rar (الحجم : 1.82 ك ب / التحميلات : 52)
كود :
For each Breathe in MyLife
Breathe.Say " سبحان الله والحمد لله ولا إله إلا الله والله أكبر أستغر الله العظيم وأتوب إليه"
Next
الرد }}}}
تم الشكر بواسطة: AL_BRNS , النبراس12 , ناجي إبراهيم
#7
جزاكم الله خير الجزاء وأثابكم بما عملتم

تم بحمد الله اليوم إكتشاف كود ومعلومة جديدة

و أود أن أتقدم بالشكر لكل من شارك في هذه المناقشة خصوصا والقائمين على المنتدى عموما

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيفية ربط قاعدة البيانات القوائم المنسدلة bidaya 11 111 اليوم, 12:16 AM
آخر رد: bidaya
  كيفية اظهار التاريخ الهجري في البرنامج allobaed 5 100 29-11-16, 02:20 PM
آخر رد: allobaed
  كيفية اضافة قائمة علوية لبرنامجي bidaya 2 80 28-11-16, 01:33 AM
آخر رد: bidaya
  كيفية استعادة سجل بعد حذفة haiderkh 1 82 03-11-16, 11:10 AM
آخر رد: أبوبكر سويدان
Exclamation [سؤال] كيفية تحديث بيانات جدول داخل قاعدة بيانات sql 2000 engabuhema 6 229 27-10-16, 11:28 AM
آخر رد: engabuhema
  [vb6.0] ما هي طريقة تسجيل أدوات ocx في الفيجوال بيسك - iisys 4 139 13-10-16, 01:53 PM
آخر رد: Ashraf Elafify
  [vb6.0] سؤال فى داتا ريبورت عن كيفية طباعة سجل واحد فقط المبرمج العتيق 4 163 02-10-16, 12:53 AM
آخر رد: Ahmed_Mansoor
  مثال على كيفية الطريقة لتحديث برنامجك عن طريق الإنترنت Ahmed_Mansoor 10 850 27-09-16, 12:13 AM
آخر رد: زياد مقداد
  كيفية ربط جداول مختلفة في نفس قاعدة البيانات زياد مقداد 2 166 26-09-16, 11:57 PM
آخر رد: زياد مقداد
  [سؤال] كيفية عمل تقرير يومي وشهري vb6 بقاعدة بيانات اكسسس abazrmhamed 1 155 31-08-16, 09:17 PM
آخر رد: Amir_alzubidy

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم