تقييم الموضوع :
  • 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 ك ب / التحميلات : 82)
الرد }}}
تم الشكر بواسطة:
#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 ك ب / التحميلات : 86)
قال الإمام الشافعي رحمه الله
جد لأخيك المسلم سبعين عذرا فإن لم تجد فقل هناك عذر لا يعلمه إلا الله ولا أعلمه أنا
من أقوال الحكماء
الرد }}}
تم الشكر بواسطة:
#6
السلام عليكم

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

- تحياتي .


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

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

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

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Heart كيفية تغيير نوعية الــ DataBase أبو خالد الشكري 4 239 10-01-24, 10:55 PM
آخر رد: أبو خالد الشكري
  [vb6.0] سؤال حول كيفية عمل زر كوماند داخل عمود Msflexgrid جلال اليمني 5 551 14-09-23, 05:12 AM
آخر رد: جلال اليمني
  [سؤال] كيفية حذف إسم شخص من listbox من دون الضغط على الإسم؟ ihabgh123 2 406 12-06-23, 10:09 PM
آخر رد: ihabgh123
  [vb6.0] كيفية برمجة ادات "Office Ribbon" في الفيجوال بيزك 0.6 Hammam Khalfi 0 428 21-04-23, 03:39 PM
آخر رد: Hammam Khalfi
  [سؤال] كيفية عمل group على اكثر من متغير ف تقرير active report 2 aboezzat84 1 847 12-02-22, 11:00 PM
آخر رد: Taha Okla
  [vb6.0] كيفية قلب نص TextBox من اليمين إلى اليسار أبو خالد الشكري 6 1,447 25-12-21, 07:54 PM
آخر رد: أبو خالد الشكري
  [vb6.0] سؤال مهم : كيفية عمل progress bar يتحرك فعليا مع تنفيذ العمليات التي يتم اجراؤها hamada salah90 2 1,325 22-12-21, 07:50 PM
آخر رد: hamada salah90
  [vb6.0] كيفية تغيير خاصية Style للCommandButton في زمن التنفيذ ياسر عبد الكريم 0 921 16-11-20, 09:00 PM
آخر رد: ياسر عبد الكريم
  سؤال حول إنشاء جدول بالكود haider kh 0 1,144 27-08-20, 02:14 AM
آخر رد: haider kh
  سؤال حول إنشاء جدول بالكود haider kh 0 1,095 27-08-20, 01:57 AM
آخر رد: haider kh

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


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