منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[سؤال] كيفية إنشاء أدوات جديدة - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغات البرمجة الاخرى (http://vb4arb.com/vb/forumdisplay.php?fid=4)
+--- قسم : قسم لغة vb6.0 (http://vb4arb.com/vb/forumdisplay.php?fid=18)
+---- قسم : قسم أسئلة vb6.0 (http://vb4arb.com/vb/forumdisplay.php?fid=28)
+---- الموضوع : [سؤال] كيفية إنشاء أدوات جديدة (/showthread.php?tid=2029)



كيفية إنشاء أدوات جديدة - النبراس12 - 26-02-14

السلام عليكم

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


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

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

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

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

وأعذروني إن أطلت عليكم
والسلام عليكم ورحمة الله وبركاته



RE: كيفية إنشاء أدوات جديدة - AL_BRNS - 26-02-14

وعليكم السلام ورحمة الله وبركاته

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

كود :
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

بالتوفيق


RE: كيفية إنشاء أدوات جديدة - النبراس12 - 26-02-14

أخي هذا الكود يضيف زر أمر مرة واحدة فقط

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

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

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


RE: كيفية إنشاء أدوات جديدة - ناجي إبراهيم - 26-02-14

السلام عليكم...

شكراً للأخ 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.

نرجو الاستفادة و السلام.


RE: كيفية إنشاء أدوات جديدة - النبراس12 - 26-02-14

تم بحمد الله التعامل مع إضافة الأدوات ولكن بقيت مشكلة صغيرة أو كبيرة (لا أعلم xDHuh)
المشكلة هي :

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

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

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

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

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

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


RE: كيفية إنشاء أدوات جديدة - VB_Coder - 26-02-14

السلام عليكم

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

- تحياتي .


RE: كيفية إنشاء أدوات جديدة - النبراس12 - 26-02-14

جزاكم الله خير الجزاء وأثابكم بما عملتم

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

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

والسلام عليكم ورحمة الله وبركاته