السبت، 4 أبريل 2020

الجمعة، 13 مارس 2020

تعلم برنامج الاكسيس 2016 من الصفر الاحتراف ... متجدد

مجموعة من الدروس التعليمية تأخذك من الصفر الى الاحتراف فى التعامل مع برنامج اكسيس 2016 وسيتم في هذه الدروس التعرف على
1- واجهة البرنامج
2- انشاء الجداول 
3- العلاقات بين الجداول
4- النماذج Forms
5- التقارير
6- الاسعلامات queries
ومجموعة من الموضوعات المتقدمة الاخرى مثل VBA وكثير من المشاريع التعليمية 

الأربعاء، 4 مارس 2020

حفظ واسترجاع صورة بقاعدة البيانات

تصميم برنامج يقوم بعمل حفظ صورة داخل قاعدة بيانات اكسيس واسترجاعها والشرح بالفيديو ومرفق ملفات البرنامج

لتحميل ملفات المشروع من الرابط التالى


الاثنين، 2 مارس 2020

تعلم عمل برنامج دليل التليفونات بالفيديو


فى هذا الموضوع سنتعرف على طريقة عمل دليل تليفونات باستخدام برنامج vb.net وقاعدة بيانات الاكسيس فيديو صوت وصورة 

الدرس الاول : - 

الدرس الثانى : - 

الدرس الثالث :- 

الدرس الرابع :- 

الدرس الخامس : - 

الدرس السادس :- 

تحميل ملفات المشروع التالى 


الاثنين، 28 أكتوبر 2019

انشاء مشروع WPF فى الفيجوال ستوديو


لإنشاء مشروع WPF جديد ، يلزمك تشغيل Visual Studio واختيار خيار "مشروع جديد ..." من شاشة البدء. إذا قمت بتعطيل شاشة البدء ، فافتح قائمة "ملف" واختر "جديد" ، ثم "مشروع". يجب عرض مربع الحوار مشروع جديد.

يعرض مربع الحوار New Project مجموعة مصنفة من قوالب الحلول التي يمكن استخدامها لإنشاء العديد من أنواع مختلفة من المشروع. 
يتم سرد قوالب WPF في قسم Windows ، والذي يمكن تحديده في الشجرة على اليسار. في الصورة ، يتم عرض قسم Windows داخل الفرع C # او VBمن الشجرة. 
دد قالب "تطبيق WPF". أضف اسمًا للمشروع في Name TextBox وانقر فوق "موافق" لإنشاء الحل الجديد.
WPF WINDOWS

بمجرد إنشاء المشروع ، سترى النافذة الرئيسية لبرنامج Visual Studio ، والذي يقدم عددًا من إطارات التصميم والمحررات والأدوات. التصميم الفعلي لهذه النوافذ يعتمد على التكوين الخاص بك. يوجد أدناه تخطيط نموذجي يتضمن جميع الأدوات الأكثر استخدامًا لتصميم التطبيقات المستندة إلى XAML:
العناصر المرقمة في الصورة أعلاه هي:
1-     قائمة
2-     أشرطة الأدوات
3-     الأدوات
4-     نافذة مصمم
5-     محرر XAML
6-     مكتشف الحل 

7-     نافذة الخصائص

الأحد، 27 أكتوبر 2019

WPF XAML



من المعتاد إنشاء برنامج "Hello World" عندما تصادف لغة برمجة جديدة لأول مرة. الكود أدناه هو مثل هذا البرنامج.



<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>    
           <TextBlock>Hello, world!</TextBlock>     
    </Grid>    
</Page>

إذا قمت بلصق XAML أعلاه في محرر Kaxaml ، واستبدال الكود الافتراضي ، سترى أن منطقة المعاينة يتم تحديثها لإظهار ما يلي:
Hello, world!

 دعونا نلقي نظرة على مختلف عناصر Hello World XAML. أول شيء نراه هو عقدة الجذر ، والتي في هذه الحالة هي عنصر الصفحة. لن نرى المزيد من عنصر الصفحة في المقالات المستقبلية في هذه السلسلة ، حيث أننا سنستخدم بشكل رئيسي العقد الجذرية للنافذة. عادةً ما يتم استخدام صفحة في تطبيقات WPF نمط التنقل ، في حين يتم استخدام نافذة للنوافذ ومربعات الحوار القياسية. في هذا المثال ، تكون علامة الصفحة مفيدة بسبب سلوك Kaxaml. إذا قمت بتغيير نص "الصفحة" إلى "نافذة" ، فسترى أنك بحاجة إلى الضغط على مفتاح قبل عرض Kaxaml.

تتضمن عقدة الجذر مساحات أسماء XML اثنين. هذه تعمل إلى حد ما مثل استخدام التوجيهات لمساحات C #. وهي تحدد المكان الذي سيبحث فيه المستند عن عناصر التحكم والعناصر الأخرى التي تضيفها إلى XAML. مساحات الاسمين المدرجة هي تلك الافتراضية التي توفر عناصر WPF القياسية. يمكنك أيضًا الرجوع إلى مساحات الأسماء الخاصة بك باستخدام بناء جملة مماثل. لاحظ أن أحد مساحات الأسماء له اسم مستعار ، "x". عند استخدام عناصر من مساحة الاسم هذه ، سترى أننا بحاجة إلى تضمين x في تعريفات العنصر.

يعرّف عنصر الشبكة شبكة ، والتي هي عنصر تحكم تخطيط قياسي في WPF. تحدد الشبكات الأعمدة والصفوف التي تتقاطع لتكوين خلايا. يمكن إضافة عناصر التحكم إلى هذه الخلايا لإعطاء تنظيم مرئي ممتع. في مثال Hello World ، لم يتم تضمين أي أعمدة أو صفوف حتى يكون للشبكة خلية واحدة فقط.

العنصر الأخير في المثال هو TextBlock. هذا يحتوي على مقدار صغير من النص الذي يمكن أن يتضمن بعض التنسيقات. قمت بتعريف النص بين علامتي الفتح والإغلاق لعنصر XML في هذه الحالة.

بعد TextBlock هناك بعض العلامات الختامية. هذه تضمن أن XML تم تشكيله بشكل جيد. إذا لم يكن كذلك ، فلن يعمل البرنامج.

مثال اخر  

على سبيل المثال ، خذ بعين الاعتبار XAML التالي. لن أصفها بالتفصيل ، حيث سنرى هذا الرمز في المقالات المستقبلية. الاختلافات بين هذا والمثال السابق هي إضافة تعريفات للصف والعمود وإدراج بعض عناصر التحكم الإضافية. لاحظ عنصر StackPanel. هذا هو عنصر تحكم تخطيط آخر. بدلاً من إظهار العناصر في الشبكة ، يتحكم المكدس عموديًا أو أفقيًا.
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="200"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <TextBlock Text="Forename"/>
        <TextBlock Grid.Row="1" Text="Surname"/>
        <TextBlock Grid.Row="2" Text="Age"/>
        <TextBlock Grid.Row="3" Text="Sex"/>
        <TextBox Grid.Column="1" Text="Bob"/>
        <TextBox Grid.Column="1" Grid.Row="1" Text="Smith"/>
        <TextBox Width="80" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Left"
                 Text="40"/>
        <StackPanel Grid.Column="1" Grid.Row="3" Orientation="Horizontal">
            <RadioButton Content="Male"/>
            <RadioButton Content="Female"/>
        </StackPanel>
    </Grid>
</Page>
 نتيجة الكود السابق

التنسيقات 

أحد الأسباب التي تجعل الأشخاص تحب WPF هي قدرته على إضافة التصميم إلى عناصر التحكم بطرق يصعب تحقيقها في Windows Forms. في الكود أدناه أضفت بعض التصميم الأساسي باستخدام خصائص عناصر التحكم المختلفة. يتم تعيين الخصائص باستخدام سمات XML. لقد أضفت هوامش إلى مربعات النص ، والمحاذاة العمودية إلى كتل النص والألوان إلى أزرار الاختيار.
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="200"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <TextBlock Text="Forename" VerticalAlignment="Center"/>
        <TextBlock Grid.Row="1" Text="Surname" VerticalAlignment="Center"/>
        <TextBlock Grid.Row="2" Text="Age" VerticalAlignment="Center"/>
        <TextBlock Grid.Row="3" Text="Sex" VerticalAlignment="Center"/>
        <TextBox Grid.Column="1" Text="Bob" Margin="5"/>
        <TextBox Grid.Column="1" Grid.Row="1" Text="Smith" Margin="5"/>
        <TextBox Width="80" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Left"
                 Text="40" Margin="5"/>
        <StackPanel Grid.Column="1" Grid.Row="3" Orientation="Horizontal" Margin="5">
            <RadioButton Content="Male" Foreground="Blue" Margin="0 0 10 0"/>
            <RadioButton Content="Female" Foreground="DeepPink"/>
        </StackPanel>
    </Grid>
</Page>
 النتيجة


السبت، 26 أكتوبر 2019

WPF Windows Presentation Foundation

ما هو WPF ؟

 

المشار إليها فيما يلي باسم WPF ، هي إحدى تقنيات Microsoft التي تتيح لك إنشاء واجهات مستخدم غنية لتطبيقات سطح مكتب Windows. تم تقديم WPF مع .NET Framework الإصدار 3.0 كتكنولوجيا بديلة لـ Windows Forms.
يهدف WPF إلى السماح لك بإنشاء تجارب مستخدم أكثر ثراءً مما يمكنك تطويره بسهولة باستخدام Windows Forms. لتحقيق ذلك ، يغير WPF اختيار تكنولوجيا العرض الأساسية تمامًا. بينما تستند Windows Forms إلى واجهة جهاز الرسومات المستندة إلى البكسل (GDI) ، يستخدم WPF الأنظمة المستندة إلى ناقل DirectX.
نظرًا لأن معظم بطاقات الفيديو الحديثة تدعم DirectX ، فإن تطبيقات WPF تسمح بتدوير النصوص والصور المستندة إلى المتجهات وتدويرها دون استخدام البيكسل. يمكنك دمج رسومات ورسوم متحركة ثنائية وثلاثية الأبعاد ، والتي تستخدم تلقائيًا تسريع الأجهزة المتاحة لتحسين الأداء. يمكنك أيضًا استخدام WPF لتطبيقات الأعمال التي لا تتطلب مثل هذه الرسوم البيانية المزدهرة. على سبيل المثال ، يتضمن Visual Studio 2010 و 2012 واجهات المستخدم المطورة باستخدام WPF.

Extensible Application Markup Language او XAML


يمكنك إنشاء تخطيطات WPF باستخدام مصمم Visual Studio. كما هو الحال مع Windows Forms ، يمكنك سحب وإسقاط عناصر التحكم من مربع الأدوات على سطح تصميم للإطار. عند إنشاء تصميمات واجهة المستخدم الخاصة بك بهذه الطريقة ، يقوم Visual Studio بإنشاء تعليمات برمجية باستخدام لغة جديدة باسم "لغة تمييز التطبيق القابلة للتوسيع". هذا هو اختصار ل XAML ، وضوحا "Zamm Ell".

بخلاف نماذج Windows ، لا يخفي WPF التعليمات البرمجية التي ينشئها المصمم. كود XAML سهل المشاهدة ، كما هو مبني على XML ، سهل الفهم. في الواقع ، من السهل للغاية التعامل معه بحيث يتم تشجيعك بنشاط على تحريره يدويًا. في كثير من الحالات ، يكون من السهل التعامل مع عناصر XML وسماتها مباشرةً بدلاً من إنشاء نفس النتائج مع مصمم. خلال البرنامج التعليمي ، سوف نركز على XAML ، بدلاً من العمل مع المصممين ، لأن هذا يتيح فهمًا أكبر للتكنولوجيا.

XAML لها تطبيقات أوسع من إنشاء واجهات مستخدم WPF. إنه أيضًا الأساس لتصميم واجهات Silverlight وبرامج وتطبيقات Windows Phone للأجهزة اللوحية التي تعمل بنظام Windows 8. هناك اختلافات بين التقنيات المستندة إلى XAML ولكن تعلم متغير واحد يجعل الانتقال إلى الآخرين أسهل. سنركز على إصدار WPF من XAML ، لأنه الوحيد الذي يسمح لك بإنشاء تطبيقات مع وصول كامل إلى ميزات نظام التشغيل Microsoft Windows.

من الميزات الرائعة لـ WPF والتطبيقات المستندة إلى XAML بشكل عام ، الفصل بين واجهة المستخدم والرمز الآخر في برنامجك. تعتمد تطبيقات Windows Forms اعتمادًا كبيرًا على الأحداث ، حيث ترتبط معالجات الأحداث بعناصر التحكم المرئية. يفصل WPF بين رمز XAML ، والذي يحدد تصميم التطبيق ورمز الخلفية الذي تنشئه باستخدام لغة .NET مثل C #.

على الرغم من أنه يمكنك الاتصال بالكود للتحكم في الأحداث ، إلا أنه من الأكثر شيوعًا الاستفادة من تقنيات الربط والبيانات القوية في XAML. هذه تتيح لك الرجوع إلى الخصائص والأساليب بشكل فضفاض حسب الاسم في سمات XML. في وقت التشغيل ، يتم تكوين عناصر التحكم وفقًا للخصائص المسماة. ترتبط الأزرار وعناصر التحكم الأخرى بالأوامر التي يتم تنفيذها استجابة لإجراءات المستخدم ، مع تغيير حالة عناصر التحكم المرتبطة تلقائيًا وفقًا لتوفر الأوامر.

يرتبط التصميم والرمز بشكل فضفاض بحيث يمكن للأشخاص المختلفين العمل على هذه العناصر المنفصلة. على سبيل المثال ، يمكن للمطور إنشاء فئات تحتوي على خصائص لربطها وأوامر تنفيذها دون معرفة تصميم واجهة المستخدم. مع توفر الحد الأدنى من التفاصيل للرمز الأساسي ، يمكن لمصمم واجهة المستخدم إنشاء XAML بشكل منفصل للمطور لدمجه في المشروع لاحقًا. قامت Microsoft بإنشاء أدوات منفصلة لهذين الدورين. يتم تشجيع المطورين على استخدام Visual Studio بينما يمتلك المصممون أدوات Expression Studio ، بما في ذلك Blend.

يتم توفير فصل آخر من المخاوف عن طريق التصميم. باستخدام مفهوم مماثل لفصل المحتوى والأسلوب في صفحات الويب التي يوفرها HTML و CSS ، يمكنك تحديد الأنماط باستخدام XAML وتطبيقها على عناصر تحكم متعددة. على سبيل المثال ، إذا قررت أن جميع الأزرار الموجودة في البرنامج يجب أن تكون حمراء وتحتوي على نص غامق ، فيمكنك تحديد نمط لذلك وإضافة النمط إلى جميع الأزرار. إذا قررت لاحقًا أن اللون الأزرق سيكون لونًا أفضل ، فيمكنك تحديث النمط في مكان واحد وستتخذ جميع عناصر التحكم التي تستخدم النمط الشكل الجديد.

عناصر تحكم محسنة  

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

للسماح بتجارب أكثر حداثة ، تكون عناصر التحكم في WPF أكثر قوة. أولاً ، أنها قابلة للتكوين. هذا يعني أنه يمكنك تداخل عناصر التحكم داخل بعضها البعض. على سبيل المثال ، لا يحتاج الزر إلى تضمين وصف نصي فقط. يمكنك تضمين عنصر رسومي للذهاب مع النص. يمكن أن تكون القائمة المنسدلة أكثر من سلسلة من العناصر النصية. يمكن أن يكون كل خيار يمكن للمستخدم اختياره هو صورة أو رسم متحرك أو حتى فيديو.

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

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

Multimedia

كانت نماذج Windows محدودة للغاية في دعمها للوسائط المتعددة. يقوم WPF بتصحيح ذلك باستخدام عناصر التحكم القياسية للصور والصوت والفيديو. يمكن تشغيل الصوت والفيديو بتنسيقات متعددة ودمجه في عناصر التحكم باستخدام تركيبة التحكم. يمكنك بسهولة تضمين الوسائط المتعددة التي يتم تشغيلها تلقائيًا أو التي يتم التحكم فيها بواسطة إجراءات المستخدم.

عيوب WPF 

 WPF هي تقنية قوية للغاية ولكن لديها بعض العيوب. بالنسبة لمطوري Windows Forms ذوي الخبرة ، يكون الفرق بين الأسلوبين كبيرًا. تؤدي مرونة WPF إلى زيادة التعقيد في بعض السيناريوهات. هذا يعني أن WPF لديه منحنى تعليمي أكثر حدة من Windows Forms وأن الترحيل إلى WPF يتطلب الكثير من التعلم. يمكن اعتبار حقيقة أن WPF يمكن استخدامها بطريقة مشابهة لنماذج Windows بمثابة عيب. على الرغم من أنه يسمح بنقل أسرع ، إلا أنه في بعض الأحيان يعني أن مطوري WPF الجدد غير مدركين لقوة النموذج الجديد.

مشكلة أخرى مع WPF لمطوري واجهة المستخدم الموجودة هي أن بعض عناصر تحكم Windows Forms الأقل استخدامًا مفقودة. يمكنك تنزيل بعض إصدارات المصادر المفتوحة أو المجانية ، أو شراء مجموعة تحكم إذا كنت تفضل ذلك. لا يتم تضمين بعض عناصر التحكم لأنه يمكنك تعديل قوالب عناصر تحكم WPF الأخرى لإنشاءها بنفسك. ومع ذلك ، قد يبدو هذا كثيرًا من العمل عندما ترغب في تطوير منتج بسيط ونشره بسرعة.

WPF مرنة للغاية. في بعض الحالات ، يكون البرنامج مرنًا جدًا حيث يتيح لك التنقل باستخدام الرسوم المتحركة والوسائط والكائنات ثلاثية الأبعاد وما شابه ذلك. إذا كنت ، مثلي ، لست مصممًا جيدًا ، فمن السهل إنشاء واجهة مستخدم تصبح محبطة أو غير قابلة للاستخدام أو قبيحة. في هذه الحالات ، قد يكون من الأفضل الالتزام بعناصر تحكم أكثر بساطة أو استخدام مصمم لإنشاء واجهاتك.


الأربعاء، 26 يوليو 2017

استخدام printDocument فى الفيجوال بيسك دوت نت

سنتعلم فى هذا الدرس كيفية استخدام العنصر 
Print Document 
حيث Print Document هو المكون الأساسي للطباعة داخل الدوت نت


وتتم الطباعة عبر استدعاء الطريقة Print للكائن PrintDocumet وهذه الطريقة تنادي علي الحدث PrintPage وهو الحدث الذى يوضع فيه كود تحديد خصائص الطباعة وذلك باستخدام طرق الرسم للكائن Griphic لنقوم بذلك أنشأ مشروع جديد وضع المكون PrintDocumet على الفورم واضف زر أمر Button

لكي نطبع الصفحة نكتب فى حدث الزر هذا الكود

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

      PrintDocument1.Print()

  End Sub

اضعط ظغطتين علي المكون PrintDocumet يظهر الحدث PrintPage

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles 

PrintDocument1.PrintPage

    End Sub

البارمتر e : جميع الخواص التى فيه هى المسئولة عن خواص الطباعة
الخاصية Graphics : هى المسئولة عن تحديد مخرجات الطباعة التى ستطبع
الخاصية MarginBounds : الخاصية المسئولة عن الهوامش للصفحة وتحدد منطقة الطباعة
الخاصية PageSettings : الخاصية المسئولة عن خصائص الصفحة المطبوعة - حجم اصفحة - الاتجاه - الهوامش وغيرها من الخواص 
ومن خواص الخاصية PageSettings الخاصية PrinterSettings وهي خاصية أخري تحتوى على خصائص حول الطابعة والاعدادات الخاصة بها
نتعامل مع الكود التالى فى الحدث PrintPage 
يقوم بطباعة مستطيل يغلق منطقة الطباعه للصفحة(الهوامش) 
يقوم بطباعة نص فى داخله كما يقوم بطباعة نص خارج منطقة الطباعة القيمة الافتراضية للهوامش هى 1 انش لكل جانب

                  سنتعلم من المثال كثير من الطرق المهمة لذا يجب الانتباه
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage


        Dim Gra As Graphics = e.Graphics
        Dim X, Y, Widt, Heig As Integer
        X = e.MarginBounds.X
        Y = e.MarginBounds.Y
        Widt = e.MarginBounds.Width
        Heig = e.MarginBounds.Height

        Gra.DrawRectangle(Pens.Red, New Rectangle(X, Y, Widt, Heig))
        Dim printFont As New Font("tahoma", 36, FontStyle.Regular)
        Gra.DrawString("BADRMEDIA SOFTWARE", printFont, _
                        Brushes.Green, 150, 300)
        Gra.DrawString("Print Out Range", _
                        New Font("arial", 20, FontStyle.Regular), _
                        Brushes.Black, -10, -10)
    End Sub

العنصر PageSettings

له عدة خصائص منها : 

الخاصية Bounds وهى مثل الخاصية MarginBounds للبارمتر e فى الحدث printpage لكن هذه الخاصية هنا لا تهتم بالهوامش المحددة عن طريق المستخدم وهى تمثل شكل مستطيل Rectangle حجم صفحة A4 هى 827×1169 وصفحة letter هي 850×1100

الخاصية Margins :
تمثل الهوامش المحددة عم طريق المستخدم كخواص Top - Left - Right - Bottom

الخاصية PaperSize : 

تمثل الخاصية حجم الورق وابعاد الورقة هى ابعاد الخاصية Bounds ولكن هناك خاصيتان مهمتان لهذا الكائن هما Kind و PaperName 

الخاصية Kind تاخذ نوع الورق 

الخاصية PaperSource : 

تمثل نوع ملقم الورق أو درج الورق 

SourceName للعنصر PaperSource هو ''Auto Sheet Feeder."


الخاصية PrinterResolution : 

تمثل دقة الطباعة الخواص X,Y لهذا العنصر تعود بالقيم الافقية والعمودية على التوالى كنقاط لكل انش DPI والخاصية Kind تتضمن عدة خواص (Low, Medium, High, Custom, Draft )


الخاصية Color :

تسند لها قيمة منطقية True / False - تجعلها True لو كانت الطابعة ألوان

If printDoc.PrinterSettings.SupportsColor Then
          e.PageSettings.Color = True
      End If
================================

تعرفنا على الكائن PageSettings

تعال نتعرف الان على الكائن 

الكائن PrinterSettings 

من خواص هذا الكائن:

SupportsColor :
تستطيع عن طريقه أن تعود بقيمة منطقية تحدد اذا كانت الطابعة تدعم الطباعة بالالوان ام لا واستخدامناه فى الكود السابق

MaximumCopies : 
يعطى اقصى عدد من النسخ ممكن أن تطبعه الطابعة فى المرة الواحدة

Copies :

تحدد فيها عدد النسخ المراد طباعتها 

IsValid : 

تعود بقيمة منطقية تحدد اذا كان اسم الطابعة صحيح وان الطابعة موجودة ومتاحة

InstalledPrinters : 
يسترجع اسماء كل الطابعات الموجودة على الكمبيوتر والشبكة صناديق الحوار هناك ثلاث كائنات تكون كمربعات حوار أثناء التنفيذ تستخدم مع الكائن Print Document ووظيفتها التحكم فى عملية الطباعة والتعامل مع خيارات المستخدم

صندوق الحوار PageSetupDialog 

هذا الصندوق يحدد اعدادات الصفحة اتجاه الطباعة - الهوامش - الورق الخ من أمور 

صندوق الحوار PageSetupDialog يعود بكائن PageSetting يمثل الاعدادات المحددة من قبل المستخدم ويجب مراعاتها و جعل البرنامج يقوم بالطباعة على حسب ما حدده المستخدم
With PageSetupDialog1
  .PageSettings = PrintDocument1.DefaultPageSettings
  If .ShowDialog =DialogResult.OK Then _
              PrintDocument1.DefaultPageSettings = .PageSettings
End With
مربع الحوار PrintDialog :
مربع الحوار هذا يسمح للمستخدم باختيار الطابعة وتحديد الخواص لها لو تجاهلته سيتم استخدام الافتراضية بخواصه


    PrintDialog1.PrinterSettings = _
            PrintDocument1.DefaultPageSettings.PrinterSettings
    PrintDialog1.AllowSelection = True
    PrintDialog1.AllowSomePages = True
       If PrintDialog1.ShowDialog = DialogResult.OK Then
           PageSetupDialog1.PageSettings =                 
           PrintDocument1.DefaultPageSettings
        If PageSetupDialog1.ShowDialog = DialogResult.OK Then
             PrintDocument1.DefaultPageSettings = _
                          PageSetupDialog1.PageSettings
             PrintDocument1.Print
  End If

مربع الحوار PrintPreview : 

لمعاينة المخرجات قبل طباعتها ومعرفة مدى ملاءمتها للطباعة ثم يحدد هل سيطبع ام لا وبذلك تلغي الأمر Print للكائن PrintDocument فتضع للعنصر ShowDialog الأمر PrintPreview

الثلاثاء، 18 يوليو 2017

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

بسم الله الرحمن الرحيم 

هناك طرق كثيرة لطباعة الفورم واذا قمت بالبحث ستجد الكثير اسرع هذه الطرق هو ماتم مناقشته في منتدى ميكروسوفت وكانت الطريقة هي انه يتم اخذ صورة عن الفورم بطريقة Capture ومن ثم طباعتها على اساس انها صورة


بصراحة انا لم اجرب هذا الكود لكن وددت ان اضعه لك عله يفيدك وتتمكن من استخدامه

المتطلبات الرئيسية :- 

1- كائن PrintDocument ويكون اسمه PrintDocument1

2- يكون زر الطباعة اسمه PrintButton


وبهذه الطريقه تقوم بطباعة الفورم بطريقه سهله وسريعه لكن من عيوبها انك لاتستطيع اختيار اشياء من الطباعة اي انه سوفق يقوم بتصوير الفورم ويقوم بطباعته 

الجمعة، 14 يوليو 2017

شرح عمل برنامج شات بالفيجوال بيسك دوت نت

شرح لكيفية عمل برنامج شات بالفيجوال بيسك دوت نت
 chat application with vb.net



متطلبات العمل على هذا المشروع يجب ان تكون ملم بالموضوعات التالية :...
تعدد المسارات فى الفيجوال بيسك دوت نت
شرح HashTable
كتاب احتراف برمجة الشبكات

فى البداية سنقوم بعمل البرنامج الخاص بالسيرفر والذى سيقوم بالتنصت على البورت 8888 ويتعامل مع طلبات clients فعندما يطلب احد الكلينتس الاتصال يقوم السيرفر بتسجيله فى clientsList والتى هى عبارة عن HashTable ثم نقوم بانشاء مسار thread جديد للتعامل مع طلبات Clients 
وعندما ترد رساله للسيرفر من العميل يقوم السيرفر بتحديد العميل مرسل الرسالة من clientsList ويرسل الرسالة للعملاء كلهم والتى يمكن ان نطلق على هذه العملية BroadCast لذا كل عميل يستطيع رؤية الرسائل المرسلة من باقى العملاء ويستطيع ارسال الرسائل ايضا 
clientsList التى سوف يتم عملها ستقوم بتخزين اسماء العملاء Clients 

اولاً : - انشاء برنامج السيرفر 

1- نقوم بعمل مشروع جديد من نوع Console Application 
2- استدعاء فضاء الاسماء الاتية 
Imports System.Net.Sockets
Imports System.Text
3- داخل الموديول الرئيسى نقوم بانشاء كلاس يتعامل مع طلبات العملاء 
 Public Class handleClinet
        Dim clientSocket As TcpClient
        Dim clNo As String
        Dim clientsList As Hashtable

هذا الاجراء يقوم بانشاء مسار لكل عميل يقوم بالاتصال بالسيرفر واستخدام الاجراء doChat
Public Sub startClient(ByVal inClientSocket As TcpClient, _
        ByVal clineNo As String, ByVal cList As Hashtable)
            Me.clientSocket = inClientSocket
            Me.clNo = clineNo
            Me.clientsList = cList
            Dim ctThread As Threading.Thread = 
            New Threading.Thread(AddressOf doChat)
            ctThread.Start()
End Sub

الاجراء التالى المستخدم من قبل المسار السابق 
يقوم بعملية ارسال الرساله لباقى العملاء عن طريق استدعاء الاجراء  broadCast 
والذى سنقوم بعمله لاحقاً

Private Sub doChat()
            
            Dim requestCount As Integer
            Dim bytesFrom(10024) As Byte
            Dim dataFromClient As String
            Dim sendBytes As [Byte]()
            Dim serverResponse As String
            Dim rCount As String
            requestCount = 0

      While (True)
             Try
             requestCount = requestCount + 1
             Dim networkStream As NetworkStream = _
                 clientSocket.GetStream()
networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
                    dataFromClient = _
        dataFromClient.Substring(0, dataFromClient.IndexOf("$"))
        msg("From client - " + clNo + " : " + dataFromClient)
        rCount = Convert.ToString(requestCount)

        broadcast(dataFromClient, clNo, True)
        Catch ex As Exception
              MsgBox(ex.ToString)
        End Try
    End While
End Sub

End Class
4- انشاء اجراء broadCast والمسئول عن ارسال الرسالة لكل العملاء المسجلين بالسيرفر

 Private Sub broadcast(ByVal msg As String, _
    ByVal uName As String, ByVal flag As Boolean)
        هنا يقوم بالمرور على كل المسجلين بالسيرفر وارسال الرساله لكل منهم
        Dim Item As DictionaryEntry
        For Each Item In clientsList
            Dim broadcastSocket As TcpClient
            broadcastSocket = CType(Item.Value, TcpClient)
            Dim broadcastStream As NetworkStream = _
                    broadcastSocket.GetStream()
            Dim broadcastBytes As [Byte]()

If flag = True Then
broadcastBytes = Encoding.ASCII.GetBytes(uName + " says : " + msg)
Else
broadcastBytes = Encoding.ASCII.GetBytes(msg)
End If

        broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length)
            broadcastStream.Flush()
        Next
    End Sub
5- داخل الاجراء الرئيسى sub main الاكواد المتحكمه فى السيرفر 
دى طبعا الليسته اللى بيتسجل فيها اسماء العملاء
Dim clientsList As New Hashtable
    Sub Main()
        دا بيتنصت على البورت 8888
        Dim serverSocket As New TcpListener(8888)
        Dim clientSocket As TcpClient
        Dim counter As Integer
        بدأ عملية التنصت
        serverSocket.Start()
        msg("Chat Server Started ....")
        counter = 0

        While (True)
            counter += 1
            clientSocket = serverSocket.AcceptTcpClient()

            Dim bytesFrom(10024) As Byte
            Dim dataFromClient As String
            استقبال طلبات اتصال العملاء
            Dim networkStream As NetworkStream = _
            clientSocket.GetStream()
networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
            dataFromClient = _
            dataFromClient.Substring(0, dataFromClient.IndexOf("$"))
           تسجيل العملاء بالليسته
            clientsList(dataFromClient) = clientSocket
            ارسال رساله لكل العملاء 
            broadcast(dataFromClient + " Joined ", dataFromClient, False)

            msg(dataFromClient + " Joined chat room ")
            انشاء اوبجكت من الكلاس للتعامل مع العملاء والتعامل مع رسائلهم
            Dim client As New handleClinet
            client.startClient(clientSocket, dataFromClient, clientsList)
        End While

        clientSocket.Close()
        serverSocket.Stop()
        msg("exit")
        Console.ReadLine()
    End Sub
6- طبعا مننساش الاجراء الخاص بالطباعة على الشاشة 
sub msg(ByVal mesg As String)
        mesg.Trim()
        Console.WriteLine(" >> " + mesg)
End Sub

اولاً : - انشاء برنامج الكلينت
سنقوم بانشاء برنامج windows form وستكون مهمته الاساسية ارسال الرسائل للسيرفر 
1- استدعاء فضاء الاسماء 
Imports System.Net.Sockets
Imports System.Text
2- تعريفات عامة 
Dim clientSocket As New System.Net.Sockets.TcpClient() 
Dim serverStream As NetworkStream 
Dim readData As String 
Dim infiniteCounter As Integer

3- فى حدث الضغط على زر الاتصال بالسيرفر
Try
   دى بتحول اسم العميل الى بايت عشان نرسلها للسيرفر
   Dim outStream As Byte() = Encoding.ASCII.GetBytes(TextBox1.Text & "$")
   الاتصال بالسيرفر 127.0.0.1 ودا لما يكون السيرفر على نفس الجهاز والبورت 8888
   clientSocket.Connect("127.0.0.1", 8888)
   بعدين تجهيز الرسالة وارسالها
   serverStream = clientSocket.GetStream
   serverStream.Write(outStream, 0, outStream.Length)
   serverStream.Flush()
Catch ex As Exception
    MsgBox(ex.Message)
End Try

4- زر ارسال الرسالة 

        readData = "Conected to Chat Server ..."
        msg()
        نفس اللى عملناه فى السابق بس دى مع الرسالة
        serverStream = clientSocket.GetStream
        Dim outstream As Byte() = System.Text.Encoding.ASCII.GetBytes(TextBox3.Text & "$")
        serverStream.Write(outstream, 0, outstream.Length)
        serverStream.Flush()
        عمل مسار عشان يتنصت على البورت ويتلقى الرسائل من السيرفر
        Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf getMessage)
        ctThread.Start()

5- اجراء التنصت واستقبال الرسائل

Private Sub getMessage()
        For infinteCounter = 1 To 2
            infinteCounter = 1
            serverStream = clientSocket.GetStream
            Dim buffSize As Integer
            Dim inStream(10024) As Byte
            buffSize = clientSocket.ReceiveBufferSize
            serverStream.Read(inStream, 0, buffSize)
            Dim returnData As String = System.Text.Encoding.ASCII.GetString(inStream)
            returnData = "" + returnData
            msg()
        Next
End Sub

والان تم الانتهاء من البرنامجين 


تحميل الاكواد الخاصة بالبرنامجين السابقين : - 
برنامج server

برنامج Client

جميع الحقوق محفوظة © 2019 الحقيبة البرمجية لمبرمجى VB.NET