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

أداة تغيير شكل الفورم مع الSource

مغلق
بدأه هاني الأتاسي في 22 فبراير 2001 · 2 رد · 1,392 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

من أجل أن أتدرب على البرمجة بال ATL أو Active Template Library .. التي تسهل في برمجة الكائنات أكانت ActiveX أو COM . قمت ببناء هذه الأداة التي تقوم بتغيير شكل الفورم وسميتها IrregularShapeWnd Control v1.0.

هناك عدة مزايا في بناء ال ActiveX بال ATL عنه في ال MFC ، ويمكن أن نتحدث عن ذلك في النقاط التالية :

مزايا بناء ال ActiveX في ال ATL :

  • استقلالية ملف ال OCX الناتج ، حيث إنه لا يحتاج إلى أي من مكتبات الربط الديناميكي .
  • صغر حجم الملف مقارنة مع ال OCX الناتجة من ال MFC في حالة ربط المكتبة بشكل Static .

أما المساوئ ففي الحقيقة لا توجد مساوئ . ولكن يمكن القول أن البرمجة بال ATL هي أصعب من البرمجة بالMFC لأنك في ال ATL سوف تستخدم الWin32-API .

حسنا ، لنتحدث عن هذه الأداة باختصار :

اسم الأداة : IrregularShapeWnd Control

ميزاتها :

  • تعمل على جميع البيئات Visual Basic و Visual C وأيضا لغات ال script ..
  • إمكانية إضافة الصورة والتعديل في الخواص أثناء تصميم البرنامج . وتقوم الأداة بعرض الصورة التي قمت باختيارها على الفورم أثناء التصميم ، هذا ما يسمح لك بتوزيع الأدوات فوق الصورة بسهولة كبيرة .
  • تدعم جميع أنواع الصور jpg ، gif ، bmp ، wmf ، ico . وغيرهم …
  • لن تحتاج إلى الصورة بعد بناء الملف التنفيذي لأن الصورة تدمج داخل الملف التنفيذي بشكل تلقائي .
  • السرعة الهائلة في عملية إظهار الفورم أثناء التنفيذ .
  • لا تحتاج إلى أي كود من أجل استخدامها ، فقط صمم ونفذ .
  • تحديد المنطقة التي تسمح للمستخدم من خلالها تحريك الفورم . وذلك بصنع صورة (أبيض/وأسود) تحدد أين منطقة تحريك الفورم .

الأحداث :

  • Draw : يسمح لك بالرسم فوق الأداة .
  • Click : يستدعى عند الضغط بالفأرة على الأداة .
    شرح بسيط عن طريقة عمل الأداة :
    أولا: عندما يقوم المستخدم باختيار الصورة واختيار اللون المطلوب إزالته ، فإن الأداة تقوم بصنع Region وذلك بالاعتماد على خوارزمية بسيطة جدا . هذا ال Region يمكن استخدامه بعد ذلك في تغير شكل الفورم عن طريق التابع SetWindowRgn ..
    ثانيا : الصورة و ال Region المحسوب يسجل داخل ملف الexe عن طريق الاستفادة من الInterface IPersistStreamInit .. طبعا الصورة وال Region يتم تحميلهم من ملف ال exe ، وذلك قبل عرض الصورة والفورم وتتم هذه العملية بسرعة ، إذ ليس هناك داعي من إعادة تنفيذ خوارزمية حساب الRegion ..
    ثالثا : تم الاستفادة من الرسالة WM_NCHITTEST من أجل التحكم بعملية تحريك الفورم كما نريد .. وتقوم الأداة بمعالجة هذه الرسالة القادمة إلى الفورم . وتمت عملية مراقبة الرسائل القادمة إلى الفورم عن طريق ال SubClassing ..
    يمكن الرجوع إلى الsource لمعرفة المزيد عن كيفية عمل هذه الأداة .
    الأداة TransWnd.ocx موجودة في الوصلة التالية : http://haniproxy.netfirms.com/TransWnd_ocx.zip
    ال source يمكن تنزيله من الموقع : http://haniproxy.netfirms.com/TransWnd_src.zip
    من أجل استخدامها :
    • قم بتسجيل الأداة في الويندوز .
    • ضعها على الفورم الذي تريد تغيير شكله .
    • ادخل على خصائص (Properties) الأداة . واذهب إلى الصفحة Picture.
    • اختر الصورة التي تريد وقم باختيار اللون عن طريق سحب الإبرة فوق اللون المطلوب .
    • اضغط على Make Transparent .
    • الآن يمكنك أن ترى الصورة في الأداة . غير حجم الأداة حتى ترى جميع الصورة . وقم بتشغيل البرنامج .
    • لاحظ أنه يمكنك تحريك الفورم من أي مكان تريد .
    • من أجل تحديد المنطقة التي تسمح للمستخدم منها تحريك الإطار :
    • اذهب إلى خصائص الأداة من جديد ومنه إلى Move Mask .
    • اختر Allow mask ومنه اختر الصورة ولكن يجب أن تنتبه أن المنطقة ذات اللون الأسود أو أي لون غير الأبيض هي التي تسمح للمستخدم من تحريك الإطار .

    وضعت مثال بسيط بالفيجوال سي++ يبين كيفية استخدام هذه الأداة :

    المثال موجود في الوصلة : http://haniproxy.netfirms.com/TransWndTest.zip

    وصورة المثال :

    TransWndTest.gif

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

Coding on the Cloud and for the Cloud!

My Blog

#2

مرحبا اخوي هاني

طبعا اول شي الله لايحير لك بال إن شاء الله "دعوة ولية الساعة ثلاثة ونص الا خمسة" D:

انا جربت الاداة الجديدة والله انك تعبت معانا واليك ما حدث :

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

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

سي ثاني ايش رايك لو خليت الاداة لما تاخد الرسمة تقوم بتلوين باقي الفورم باللون(0-0-0) وتعمل له Resion تعني تخليه كله شفاف وبالتالي لن تظهر الا الرسمة وبعدين تبدأ في سحب الوان الرسمة المرغوب في جعلها شفافة وكمثال لو وضعت صورتي على فورم اقوم بتلوين خلفية صورتي باللون اللي ابيه يطلع شفاف (لون غير موجود في اي جزء من الصورة) واسوي Region للفورم وبعدين اعلم هاللون بالاداة واخليه شفاف عندها راح يطلع الفورم كله عبارة عن صورتي فقط وبدون خلفية يعني تصبح Skin لجسمي فقط بالصورة واي مكون احطه على الفورم طبعا راح يطلع بالتحميل لان الشفافية سويتها على ارضية الفورم وجزء من الصورة .

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

وعلى كل حال مجهود طيب ياعزيزي D:

على فكرة انا ادرجت رقمك عندي بالماسينجر وابيك تطل علينا ولو مره في الساعة D:

#3

شكرا للجميع

والله يعينكم على اسئلة بدائية

بحظرها لكم

شكر خاص.....للمشرف


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

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