المتابعون للمدونة

الأربعاء، 7 يونيو 2017

عرض الترجمة فوق الفديو:


عرض الترجمة فوق الفديو:

في المنشور السابق، كنت أريد أن أعرض نص الترجمة في مربع نص شفاف فوق الفيديو.. وقد رأينا بالفعل كيف نجعل مربع النص شفافا.. لكن للأسف لم يمكن عرض مربع النص فوق الفيديو، لأن المشروع يستخدم طريقة غريبة، وهي فتح مشغل الفيديو في عملية مستقلة Process، ثم استخدام دوال API لسرقة الأدوات الموضوعة على نافذة مشغل الفيديو، ونقلها إلى لوحة العرض في المشروع.. وقد فشلت كل محاولاتي لإظهار مربع النص فوق نافذة الفيديو المسروقة (لا يبارك ربنا في الأشياء المسروقة :) )
وبعد عدة محاولات، وجدت حلا، والغريب أنه حل مشكلة إضافية كنت سأبدأ البحث فيها :).. كل ما فعلته هو:

- وضع الترجمة على نموذج مستقل مع جعله دائما فوق القمة TopMost = true.
- وجعلته بدون حافة ولا شريط أدوات FormBorderStyle = None.
- وأعطيته لون خلفية (وليكن الأخضر)، ووضعت هذا اللون الأخضر أيضا كمفتاح للشفافية TransparencyKey.. هذا يعني أن هذا النموذج سيكون شفافا كله ما عدا أي جزء ليس لونه أخضر.
- بعد هذا وضعت مربع النص الشفاف فوق هذا النموذج، وجعلت لون الكتابة ForeColor أبيض.
حتى الآن لن يظهر أي شيء على النافذة، لأن مربع النص والنموذج شفافان، لكن لو وضعت أي نص (لونه أبيض) في مربع النص، فسيظهر هذا النص على الشاشة بمفرده.
الجميل في الأمر هو أن هذا حل مشكلة أخرى، وهي أنني كنت أريد عرض تظليل خارجي للنص بلون مختلف لتميزه العين.. وقد حدث هذا تلقائيا، فحروف النص البيضاء صارت تحيط بها هالة خضراء ناتجة من بقايا لون أرضية النموذج الذي استخدمناه كمفتاح للشفافية.. الحقيقة لا أدري لماذا حدث هذا، ولكن الحمد لله أنه حدث :).. ربما يستخدم GDI+s تأثيرا معينا لتجسيم النص بجعل طبقة رقيقة من لون الأرضية المحيط به أغمق قليلا وهذا يعني أنه لم يعد نفس اللون الأخضر المستخدم في خاصية مفتاح الشافية، لهذا ظل موجودا.
هذا هو الكود:
Form _formSubtitle = new Form
{
    Height = _subtitlesHeight + 1,
    BackColor = Color.Green,
    TransparencyKey = Green,
    FormBorderStyle = FormBorderStyle.None,
    TopMost = true,
    Visible = true
}; 

_subtitleTextBox = new RichTextBoxViewOnly()
{
    BackColor = _backgroundColor,
    ForeColor = Color.White,
    Dock = DockStyle.Fill,
};

_formSubtitle.Controls.Add(_subtitleTextBox);
_subtitleTextBox.MouseClick += SubtitleTextBoxMouseClick;
_subtitleTextBox.TextChanged += _subtitleTextBox_TextChanged;
الباقي سهل طبعا، وهو ضبط موضع هذا النموذج ليكون فوق الفيديو المعروض.

 

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر