السلام عليكم...
ربما كانت هناك مواضيع مشابهة، لكني أحببت أن أضع نسختي الخاصة ( :) ) مع الكود المصدري (Source Code) لمن يحب أن يعدل عليها.
الأداة أو المكون عبارة عن ActiveX Control يستعمل لتغيير شكل النافذة حسب صورة أو مجموعة صور أو شكل هندسي أو مجموعة أشكال هندسية (
مستطيلات دوائر ... إلخ).
يمكن تشكيل شكل النافذة بوضع صورة على النافذة مباشرة (الخاصية Picture للنافذة) أو بوضع صورة أو أكثر في مكونات Image أو مكونات
PictureBox أو بوضع مجموعة من الأشكال (المكون Shape)، أو بمزج الصور و الأشكال.
بالإضافة إلى ذلك يمكن تطبيق درجة من الشفافية على النافذة بأكملها حسب درجة شفافية نحددها.
* لا تحتاج إلى كتابة أي كود لتفعيل الأداة أو جعلها تعمل.
خصائص الأداة:
* الخاصية TransparentColor: تحدد اللون الذي سيتم اعتباره شفافاً. أي منطقة داخل النافذة مغطاة بهذا اللون تظهر شفافة و لا تعتبر جزءاً من النافذة، سواء أكان اللون على سطح النافذة مباشرة أو في أحد مكوناتها. القيمة الافتراضية اللون الأبيض.
* الخاصية Opacity: تحديد درجة الإعتام (عدم الشفافية). هذه الخاصية من النوع Byte، أي أنها تقبل القيم من 0 إلى 255. القيمة 255 (الافتراضية) تعني إعتام كامل كما هو الحال مع النوافذ الطبيعية. أما القيمة 0 فتعني أن النافذة شفافة بالكامل. درجة الاشفافية تشمل النافذة بأكملها و بكل مكوناتها.
* الخاصية TransformKind: لتحديد نوع التغيير الذي سيطبق على النافذة. هذه الخاصية تقبل واحدة من 4 قيم:
= القيمة wtkNothing: لا يتم تغيير شكل النافذة و لا يتم تطبيق الشفافية (لا يحدث شيء للنافذة).
= القيمة wtkShapeOnly: هذه هي القيمة الافتراضية، حيث يتم تغيير شكل النافذة فقط (حسب قيمة الخاصية TransparentColor) و لكن يتم إهمال الخاصية Opacity.
= القيمة wtkOpacityOnly: يتم تطبيق الشقاقية فقط على النافذة (حسب قيمة الخاصية Opacity) و لكن يتم إهمال الخاصية TransparentColor.
= القيمة wtkShapeAndOpacity: يتم تطبيق كل من تغيير شكل النافذة و الشفافية.
* الخاصية DoMoveForm: من النوع Boolean و قيمتها الافتراضية True. إذا كانت قيمتها True فإنه يمكن تحريك النافذة بالفأرة من أي جزء فارغ من أجزائها (غير مغطى بأحد المكونات، باستثناء الـ Shape و الـ Line، و أحياناً مكونات Image - انظر الخاصية MoveByImageControls فيما بعد). أما إذا كانت قيمة هذه الخاصية False فإن تحريك النافذة من أي جزء غير متاح بشكل تلقائي.
* الخاصية MoveByImageControls: من النوع Boolean. في الأحوال العادية يمكن تحريك النافذة عندما لا يكون مؤشر الفأرة فوق أحد المكونات مثل الـ TextBox أو الـ CommandButton، و كذلك الحال مع المكون Image. لكن بما أن المكون Image قد يستخدم لوضع الصورة التي ستحدد شكل النافذة فقد تم إيجاد هذه الخاصية. إذا كانت قيمتها True (القيمة الافتراضية) فإنه يمكن تحريك النافذة بالفأرة حتى و إن كان مؤشر الفأرة فوق مكون Image (طبعاً إذا كانت قيمة الخاصية DoMoveForm هي True).
* الخاصية KeepSysMenu: من النوع Boolean، و القيمة الافتراضية هي False. إذا كانت قيمتها True فإن النقر بالزر الأيمن على رمز النافذة في شريط مهام Windows يعرض قائمة النظام (القائمة التي تحتوي على الأوامر "تكبير" و "تصغير" و "استعادة" و "نقل" و "إغلاق"). أما إذا كانت قيمتها False فإن الزر الأيمن لا يعرض قائمة النظام.
** ملاحظات:
1. لا توجد أحداث (Events) للأداة.
2. الأداة غير ظاهرة أثناء التنفيذ و بالتالي لا يهم مكانها في النافذة.
3. لاستعمال الأداة في مشاريعك انسخ الملف ShapedWindowControl.ocx (في المرفقات) إلى المجلد System32، ثم سجل الأداة في النظام بتنفيذ الأمر التالي من خلال الأمر "تشغيل" (Run) من القائمة "ابدأ" (Start):
regsvr32 ShapedWindowControl.ocx
ثم يجب إضافة الأداة إلى صندوق المكونات في المشروع باختيار الأمر Components من القائمة Project، ثم ابحث في نافذة المكونات عن البند
TShapedWindow: OCX to change window shape and transparency و قم بتحديده.
* أضف نسخة واحدة من الأداة إلى النافذة، ثم اضبط الخصائص حسبما يلزم. لا تحتاج لكتابة أي كود!
المرفقات:
نرجو الاستفادة و السلام.