اذهب إلى المحتوى

E.Nourddine

الأعضاء
  • المساهمات

    1458
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    18

كل منشورات العضو E.Nourddine

  1. يتعيّن عليك استعمال الدالة String.Format والتي تُدمج مجموعة من القيم بالشكل الذي تختاره أنت، ثم تُعطي قيمتها إلى العمود الجديد الحاوي على قيم باقي الأعمدة، بهذا الشكل: DataColumn newColumn; newColumn = new DataColumn("col4"); //String.Formatدمج باقي قيم الأعمدة في عمود جديد باستخدام newColumn.Expression = string.Format("Col1\-{0};Col2\-{1};Col3\-{2}", col1, col2, col3); scaleResponseData.Columns.Add(newColumn);مع الملاحظ أنه تمت إضافة عمود جديد للجدول، بعد ملئه بقيم باقي الأعمدة. #String Format in C
  2. تحقق من أن طول المتغير النصي يساوي طول المتغير 2- بعد تعويض النقط بلا شيء 'فراغ'، أي أنه تم التعويض بشكل صحيح: If code.Substring(0, 1) = "M" And Len(Replace(code, ".", "")) = Len(code) - 2 Then هذا مثال توضيحي بسيط: Dim MyString As String MyString = "M2.W1.SSE" If MyString.Substring(0, 1) = "M" And Len(Replace(MyString, ".", "")) = Len(MyString) - 2 Then TextBox1.Text = MyString Else TextBox1.Text = "Didn't work!!" End Ifالجزء الأول من الدالة if للتحقق من عملية التعويض، ليتم بعد ذلك تقسيم النص إلى أجزاء، على الشكل التالي: Dim MyString As String MyString = "M2.W1.SSE" If MyString.Substring(0, 1) = "M" And Len(Replace(MyString, ".", "")) = Len(MyString) - 2 Then TextBox1.Text = MyString Else TextBox1.Text = "Didn't work!!" End If If code.Substring(0, 1) = "M" And UBound(Split(MyString, ".")) = 2 Then '<-- MsgBox("This method also works") Else MsgBox("This method doesn't work") End Ifالرسائل MsgBox لإظهار عمل السكريبت.
  3. يمكن، وذلك بإنشاء مصفوفة تتضمن أسماء الماركات، ثم المرور على قيم المصفوفة وحساب عدد تكرار كل قيمة موجودة بها. وهذه الطريقة لمعرفة عدد 'HP' الموجودة في المصفوفة مثلا، بخلاف أنه يمكننا معرفة عدد القيم الموجودة بالمصفوفة بشكل كلي، لكن هذه الشيفرة لعدّ كل قيمة متكررة وإظهارها على شكل القيمة- عدد تكرارها، بهذا الشكل: Dim myarray As String() = {"HP", "IBM", "HP", "HP", "MICROSOFT"} Dim occur = myarray.GroupBy(Function(f) f).Select( _ Function(f1) New With {.Item = f1.Key, .Count = f1.Count()}) Dim out As String For Each itm In occur out = out & itm.ToString & vbCrLf Next MsgBox(out)لنحصل في الأخير على نتائج مماثلة لهذه: {Item = MICROSOFT, Count = 1} {Item = HP, Count = 3} {Item = IBM, Count = 1} مثال آخر : ننشئ مصفوفة:Dim arr As New List(Of String)نضيف لها بعض القيم:arr.Add(CurrentString) القيم المضافة :Jane Jane Matt Matt Matt Matt Jane Paulربط كل قيمة بالقيم المشابهة لها:Dim Summary = From a In arr Group By Name = a Into Group _ Select Name, Cnt = Group.Count()حساب القيم المتشابهة:For Each elem In Summary 'Output elem.Name 'Output elem.Cnt Nextالنتيجة المحصل عليها في آخر المثال:Name = "Jane", Cnt = 3 Name = "Matt", Cnt = 4 Name = "Paul", Cnt = 1
  4. أولا عليك باستعمال محوّل -Converter- أكثر تماشيا مع ما تريده، وذلك بالاستعانة بالكلاس الذي يتيح لنا إمكانيات أكبر للتعامل مع enum: public class EnumBooleanConverter : IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { string parameterString = parameter as string; if (parameterString == null) return DependencyProperty.UnsetValue; if (Enum.IsDefined(value.GetType(), value) == false) return DependencyProperty.UnsetValue; object parameterValue = Enum.Parse(value.GetType(), parameterString); // valueاسترجاع القيمة return parameterValue.Equals(value); } // واسترجاع القيمة أخر الدالةenumللتأكد من قيم public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { string parameterString = parameter as string; if (parameterString == null) return DependencyProperty.UnsetValue; return Enum.Parse(targetType, parameterString); } #endregion }ثم نَربط حقول RadioButton بقيمة enum المُدخلة من طرف المستخدم: // المُدرجةمن المستخدمenumربط الحقول بقيمة <Grid> <Grid.Resources> <l:EnumBooleanConverter x:Key="enumBooleanConverter" /> </Grid.Resources> <StackPanel > <RadioButton IsChecked="{Binding Path=VeryLovelyEnum, Converter={StaticResource enumBooleanConverter}, ConverterParameter=FirstSelection}">first selection</RadioButton> <RadioButton IsChecked="{Binding Path=VeryLovelyEnum, Converter={StaticResource enumBooleanConverter}, ConverterParameter=TheOtherSelection}">the other selection</RadioButton> <RadioButton IsChecked="{Binding Path=VeryLovelyEnum, Converter={StaticResource enumBooleanConverter}, ConverterParameter=YetAnotherOne}">yet another one</RadioButton> </StackPanel> </Grid>الطريقة الثانية لفعل ذلك، عن طريق محوّل بالشكل التالي - أبسط من السابق- : public class EnumToBooleanConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return value.Equals(parameter); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return value.Equals(true) ? parameter : Binding.DoNothing; } }ولربط الحقول بهذا المحول، نستعمل الطريقة : <StackPanel> <StackPanel.Resources> <local:EnumToBooleanConverter x:Key="EnumToBooleanConverter" /> </StackPanel.Resources> <RadioButton IsChecked="{Binding Path=YourEnumProperty, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static local:YourEnumType.Enum1}}" /> <RadioButton IsChecked="{Binding Path=YourEnumProperty, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static local:YourEnumType.Enum2}}" /> </StackPanel>Binding Radio Buttons to a Single Property Wpf Radio Button Binding Radio Buttons Using Group Property in WPF
  5. حقيقة الأمر أن هناك خاصية Name واحدة و x:Name ماهو إلا تمثيل لـ XAML:Name، حيث يمثل الحرف x تعويضا لـ XAML على بيئة WPF، وجاءت التسمية بهذا الشكل، نظرا لأن الخصائص والقيم للحقول على هذه البيئة أصبحت تكتب بهذا الشكل، لذا دعنا نتمعن في الكود التالي: <TextBox x:Name="textBox"/> <Label Content="{Binding Text, ElementName=textBox}"/>نلاحظ وجود حقل نصي باسم "textBox" مع ملصق 'label'، كما أن اسم الحقل عُيّن بالخاصية x:Name . وتجدر الاشارة إلى أن استعمال x:Name نجده في الإصدارات الجديد من wpf حيث اقتصرت في الماضي على استعمال name، مما يؤكد أن البيئة ستركز وبشكل كبير على استعمال هذه الصيغة مستقبلا. وللعلم فإن تقنية wpf باستعمالها لـ XAML تتيح للمبرمج العمل بشكل محترف أكثر، فملفات XAML مشابهة إلى حد كبير لملفات xml والتي من خصائصها تراتبية الوسوم ومميزات أخرى كثيرة. https://msdn.microsoft.com/en-us/library/cc295302.aspx
  6. يمكن استدعاء مكتبة System.Windows.Media التي تتيح لك الوصول إلى العديد من الإمكانيات من بينها استعمال صيغة اللون Hexadecimal، بهذه الطريقة: using System.Windows.Media; Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");وتوجد طريقة ثانية أيضا: string hex = "#FFFFFF"; Color _color = System.Drawing.ColorTranslator.FromHtml(hex);وهذه قائمة بالألوان مع أكوادها Hexadecimal وRGB: Name Hex Code RGB Code aliceblue #F0F8FF 240, 248, 255 antiquewhite #FAEBD7 250, 235, 215 aqua #00FFFF 0, 255, 255 aquamarine #7FFFD4 127, 255, 212 azure #F0FFFF 240, 255, 255 beige #F5F5DC 245, 245, 220 bisque #FFE4C4 255, 228, 196 black #000000 0, 0, 0 blue #0000FF 0, 0, 255 blueviolet #8A2BE2 138, 43, 226 brown #A52A2A 165, 42, 42 burlywood #DEB887 222, 184, 135 cadetblue #5F9EA0 95, 158, 160 chartreuse #7FFF00 127, 255, 0 chocolate #D2691E 210, 105, 30 coral #FF7F50 255, 127, 80 cornsilk #FFF8DC 255, 248, 220 crimson #DC143C 220, 20, 60 cyan #00FFFF 0, 255, 255 darkblue #00008B 0, 0, 139 darkcyan #008B8B 0, 139, 139 darkgoldenrod #B8860B 184, 134, 11 darkgray #A9A9A9 169, 169, 169 darkgreen #006400 0, 100, 0 darkkhaki #BDB76B 189, 183, 107 darkmagenta #8B008B 139, 0, 139 darkolivegreen #556B2F 85, 107, 47 باقي الألوان عبر هذا الرابط
  7. لاستعمال بيئة restatable في بيئة جديدة، عليك القيام بذلك على الشكل: \NewEnviron{restat}{% \begin{restatable}{theorem}{A} \BODY \end{restatable}%حيث تمثل NewEnvirron\ بداية البيئة لتأتي تتمة المستند بالشكل العادي، فيكون كود المستند كامل بالشكل: \documentclass{article} \usepackage{amsmath,environ} \usepackage{thmtools,thm-restate} \NewEnviron{restat}{% \begin{restatable}{theorem}{A} \BODY \end{restatable}% } \begin{document} \begin{restat} something \end{restat} \end{document}ويمكن أيضا إنشاء Environment جديد عن طريق: \begin{proof}[Title of this proof] <the proof> \end{proof}Defining LATEX commands and environments
  8. بالنسبة للمثال الأول لا أرجحه، لأن إظهار الجزء الاخير من اسم المقطع لا معنى لذلك. الصورة الثانية أي حالة أن الاسم يظهر كاملا مع نقط الحذف، هو مبدئيا جيد، لكن لدي بعض الملاحظات من شأنها أن تجعله أفضل: أزل نقط الحذف في آخر الاسم، لأننا لن نكون في حاجة إليها بعد الآن.أضف إلى اسم النص خاصية التحريك، حيث يوجد وسم على html يدعى بـ marquee، يمكن تطبيق نفس التأثر على اسم المقطع، بحيث يظهر متحركا من اليمين إلى اليسار مما يتيح للمستخدم قراءة الاسم كاملاً.هذه التغيرات كان الهدف منها التحسين من ظهور قارئ المقاطع الصوتية، وإعطاء المستخدم أقصى ما يمكن، ولأنه تطبيق موبايل سيكون بعض الشيء ضيق في مكان العرض، لكن القارئ عموما جيد.
  9. بالنسبة للدوال -functions- على لغة php لا يمكن تعريف متغير ثم استعماله داخل الدالة، وهذا من أساسيات اللغة. لذا من السهولة تمرير قيم أثناء إنشاء الدالة أو مايصطلح عليه بـ parameters، حيث تلقبل الدالة هذه القيم أثناء استعمالها، بحيث تستعمل هذه القيم داخلها بالشكل الذي يعطي في آخر الأمر نتيجة . هذا مثال عن دالة مع parameters: <?php function add_some_extra(&$string) { $string .= ', et un peu plus.'; } $str = 'Ceci est une chaîne'; add_some_extra($str); echo $str; // 'Ceci est une chaîne, et un peu plus.' تُظهر <= ?>ولحل المشكل المتعلق بك على ووردبريس استعمل دالة معرفة بشكل مًجمل global بهذا الشكل : funtion get_global_array() { // 1, 2 , 3 ارجاع القيم return [1, 2, 3]; }عن طريق: get_global_array()يمكن استعمال الدالة في أي مكان من الصفحة.
  10. الطريقة المثلى التي يتبعها محترفو ووردبريس، هي إنشاء مصفوفة وملئها بمعايير جملة الإستعلام التي نريد، ثم جلب البيانات حسب جملة الاستعلام المركبة بالشكل الذي نرغب به، هذا مثال على المصفوفة: $args = [ 'category_name' => get_queried_object()->post_name, 'order' => 'ASC',// لجعل الترتيب تصاعدي من أ إلى ي 'orderby' => 'title' // 'name'يمكنك استعمال // اضافة القيمة إلى المصفوفة ]; وهي واضحة كما تبين التعليقات المدمجة مع الكود، ليصبح الكود الإجمالي لجلب المنشورات مرتبة أبجديا، على الشكل: $args = [ 'category_name' => get_queried_object()->post_name, 'order' => 'ASC',// لجعل الترتيب تصاعدي من أ إلى ي 'orderby' => 'title' // 'name'يمكنك استعمال https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters // اضافة القيمة إلى المصفوفة ]; $q = new WP_Query( $args ); // loop حلقات if ( $q->have_posts() ) { while ( $q->have_posts() ) { $q->the_post(); // title, content إظهار ما تريده كمحتوى أو عنوان } wp_reset_postdata(); }في حال كان المحتوى بلغة لاتينية، سيظهر مرتباً من A إلى Z.
  11. الصورة التالية تمثل قسم الإعدادات الخاص بي على أكاديمية حسوب: لاحظ أن الإعدادات خاصة بي فقط، أي يمكنني تغيير معلوماتي الشخصية، وروابط حساباتي على مواقع التواصل الإجتماعي... والعديد من الأمور التي لن يتمكن أحد غيري من فعلها، والأمر يسري على جميع مستخدمي المنصة، وتعطي هذه الخصوصية بعض التحكم لي كمستخدم في حسابي، والذي يعتبر صورة عني لدى باقي الزوار والمستخدمين. الجانب الخاص بمدير -أو مدراء- الموقع ذو صلاحيات أكبر من تلك الممنوحة للمستخدم العادي، وأيضا خصائص بإجمالي الموقع، ويعد الأدمن أومدير الموقع من الركائز الاساسية لأي موقع، ومما لا شك فيه أن موقع أكاديمية حسوب يزخر بالعديد من المدراء والمسؤولين، يتقاسمون بينهم مهام تسيير وإدارة المنصة، وتنقسم هذه الصلاحيات حسب وظيفة ومهمة كل واحد منهم. الإجابة عن السؤال ستكون بنعم، ويبقى محتوى الموقع ووظيفته المُتحكمان في ضرورة أو عدم وجوب وجود الصلاحيات، مع العلم أنه لا بد من وجود أدمن للموقع.
  12. بالنسبة للدوال الرياضية على برنامج LaTeX، من الأفضل استعمال PGFPiots بدلا من Tikz، حيث أن الأولى تمكّن من انشاء منحنى الدوال المثلتية كـ sin ، cos وtang، لنحصل على شكل مشابه: \documentclass{article} \usepackage{pgfplots} \begin{document} \begin{tikzpicture} \begin{axis}[ domain=0:2*pi, axis lines=middle, enlargelimits=true, trig format plots=rad ] \addplot [orange, thick, samples=100] {sin( x + 1.047196 )}; \end{axis} \end{tikzpicture} \end{document}وفي حال أردت استعمال مكتبة Tikz عليك بإدراج: \draw plot (\x, {sin( (\x + 1.047196)r }); حيث أن الكود سيكون على الشكل: \documentclass{article} \usepackage{tikz} \begin{document} \begin{tikzpicture} \draw [orange, thick] plot [samples=100, domain=0:2*pi] (\x, {sin( (\x + 1.047196)r }); \end{tikzpicture} \end{document}يمكن أيضا استعمال المكتبة datavisualization لرسم منحنى الدالة، هكذا: \documentclass[tikz, border=5mm]{standalone} \usetikzlibrary{datavisualization.formats.functions} \begin{document} \begin{tikzpicture} \datavisualization [school book axes, visualize as line=sin, sin={style={thick, orange}} ] data[set=sin, format=function] { var x : interval [0:2*pi] samples 100; func y = sin((\value{x} + 1.047196) r); }; \end{tikzpicture} \end{document}ليكون المنحنى بهذا الشكل: A LaTeX Package to create normal/logarithmic plots in two and three dimensions.
  13. إذا كان التطبيق يقوم بنفس مهام الموقع، وبشكل تجاوبي مع أغلب الهواتف الذكية، فما هي وظيفة التطبيق إذن؟ من الأشياء التي لا أجد لها تفسيراً هي اتجاه أصحاب المواقع إلى إضافة زر تحميل التطبيق الخاص بموقعهم، مع العلم أن التطبيق يتضمن نفس مميزات الموقع، لا أدري هل هي موجة تطبيقات الهواتف الذكية أم ماذا، وأنا كمستخدم يُدرك أن التطبيق على الهاتف لن يأتي بشيء جديد خارج الخدمات الممنوحة على الموقع، لا أحمّل التطبيق -صراحةً-، وقد يكون السبب في ذلك محاولة تسويق الموقع بشكل أو بآخر، مما يعطي صورة عكسية عن الموقع. بالنسبة للتصميم، لسي بالضرورة أن يكون مشابها للموقع، كما أن التطبيق يجب أن يأتي بجديد ليس موجودا على الموقع، لأن غالبة المواقع الآن متجاوبة مع الشاشات الصغيرة، وبصفة عامة كل ما يتعلق بالموقع من تطبيقات و تصميمات... يجب أن يتم بنوع من التناسق من حيث الألوان المختارة، الشعار، على أن يكون مبتكراً وبه لمسة إبداع، خارج عن المألوف وما تعودت عليه عين المستخدم بصورة فنية جميلة. 40 Beautifully Designed Mobile Apps With Excellent UI Experience in Mind
  14. برنامج LaTex كما نعلم هو برنامج لتحرير النصوص، ويمتاز بإمكانية دمج العديد من الخاصيات والتقنيات التي تغيب في باقي محررات النصوص، وكحل لمشكلتك، يمكن إدراج خط Alchemy واستعماله بواسطة الشيفرة التالية: \documentclass[12pt, a4paper]{article} \usepackage{fontspec} \begin{document} The \emph{amalgamation} or \emph{conjunction} symbol: \fontspec{Alchemy}\enspace \LARGE p \end{document}لاحظ استعمال: \LARGE pوهي مسؤولة عن إظهار الرمز المعني. مما سينتج عنه النص: المشكل كان مشكل خط فقط. وللمعلومة فأنواع الخطوط كثيرة، وكثيرة جدا، حيث يتخصص كل خط في طريقة كتابة معينة، بالإضافة إلى الخطوط ذات الصبغة التاريخية أو العلمية، لذا إذا صادفتك نفس المشكلة حاول البحث عن خط يَدعم الرموز المراد إدراجها ضمن الوثيقة على LaTeX.
  15. تعتبر البرمجة على بيئة Vb.net من لغات البرمجة السهلة نوعا ما، حيث عمدت مايكروسوفت إلى إمداد المبرمج بمجموعة أدوات تجعله ينشئ تطبيق أو موقع بسرعة وباحترافية متناهية، مظاهية بذلك اقوى لغات البرمجة، حيث أن العديد من الشركات تعتمد في تسييرها على تطبيقات مبرمجة على Vb.net. من التقنيات التي تميز Vb.net توفره على عنصر MsgBox أو الرسالة الظاهرة للمستخدم، وهذا يصب في الجواب على سؤالك، ويمكنك هذا الأخير -MsgBox- من عرض رسالة للمستخدم، يأخذ الكود الخاص بها الشكل التالي: MessageBox.Show("مرحباً بكم") تمثل الخاصية show الامر بعرض الرسالة، مع ضمين الرساة الظاهرة بين رمز "". كما يمكن إظافة زر Yes و No إلى نافذة الرسالة: Dim result1 As DialogResult = MessageBox.Show(" Yes و No رسالة مع زري", _ "Important Question", _ MessageBoxButtons.YesNo)وغالبا ما تستخدم الرسائل لإعلام المستخدم بإتمام من عملية ما،التأكيد قبل القيام بأمر ما -حذف بيانات، إلغاء خاصية. messagebox-show-vbnet MsgBox, fonction (Visual Basic)
  16. هذا مايسمى بـ Subpixel rendering وهي تقنية مستخدمة على مستوى شاشات الكمبيوتر المصنوعة من الكرستال السائل(LCD)، تعتمد هذه التقنية على أن كل بيكسل على LCD هو في الواقع مكون من ثلاث ألوان، الأحمر،الأخضر والأزرق وغيرها من Subpixels لزيادة دقة الصورة. كما هو معروف فالشاشة تتكون من مزيج من الألوان التي تأتي محاذية لبعضها البعض وبشكل متداخل حتى تُعطي أحسن صورة للمتلقي. والمبدأ ببساطة هو جمع العديد من البيكسل التي لا ترى إلا عند التكبير، وذلك من أجل إعطاء وضوح أكثر للصورة . Subpixel rendering
  17. باستعمالك لإطار العمل Bootstrap أو أي نظام شبكي آخر 'system of grid'. جرّب الكود التالي لضبط محاذاة الوسوم div: .span6 { width: 49%; display: inline-block; }حيث أعطينا لـ width قيمة %49 بالنسبة المئوية حتى تُحسب بشكل أوتوماتيكي ومتناسب مع عرض الصف المحتوي للوسم div. الخاصية display :inline-block لإظهار عناصر div على شكل خطي . مثال: .floating-box { display: inline-block; width: 150px; height: 75px; margin: 10px; border: 3px solid #73AD21; }CSS Layout - inline-block
  18. في الكود المتعلق بجملة الاستعلام Insert قمتَ بفتح قوس ونسيت إغلاقه عند نهاية الجملة أي عند الجزئية "(first: وهذا ما سيُحدث خطأ في الكود، باعتبار أن جملة الاستعلام خاطئة وغير كاملة من حيث طريقة الكتابة، ليكون الكود الصحيح هو : $con->prepare("INSERT INTO `myComputers` (`hwid`, `ip`, `pcname`, `username`, `os`, `country`, `first`) VALUES (:hwid, :ip, :pcname, :username, :os, :country, :first)")->execute( array( ':hwid' => $data_array['hwid'], ':ip' => $data_array['ip'], ':pcname' => $data_array['pcname'], ':username' => $data_array['username'], ':os' => $data_array['os'], ':country' => $data_array['country'], ':first' => $data_array['first'] ) );PHP Prepared StatementsIntroduction to PHP PDO
  19. في الكود الخاص بـ Jquery وَجب عليك استعمال الحدث click عِوضَ : $(this).on('click', function() {}كما أن استعمال this هنا لا أجد له دلالة، لعدم ضرورة ذلك، فمن الأفضل استعمال ".account-img" مباشرة، إليك الطريقة الصحيحة لكتابة كود Jquery الخاصة بالضغط على الصورة: $('.account-img').click(function(){ alert($(this).attr("id")); });- في المثال التالي، نبرز كيفية عمل حدث الضغط فوق عنصر عن طريق Jquery: $("p").click(function(){ alert("أكاديمية حسوب ترحب بكم"); });=> بعد الضغط على قطعة النص p سيظهر التنبيه " أكاديمية حسوب ترحب بكم ". وتعتمد هذه التقنية على : $(selector).click() Selector هو id الوسم أو class التي تمكننا من الوصول إلى الوسم المعني.
  20. من خلال تجربة مماثلة على موقع كمسؤول على تعليقات المستخدمين يمكنني القول نعم، لأني كنت أمضي ساعات في قراءة محتوى تعليقاتهم. من الأشياء التي يداوم المستخدمين على كتابتها، بعض الأمور التي قد يروها ناقصة في الموقع، أو الوظائف التي هم بحاجة إليها، والأمر يختلف من موقع لآخر وحسب مجال التخصص، كما نجد تشجيعاتهم وإبداء إعجابهم بالموقع، خاصة إن كان يقدم محتوى جيد يرقى إلى تطلعاتهم ويجدون فيه ضالتهم. من وجهة نظر "واجهة المستخدم"، لا تعتبر هذه الخدمة بالشيء الضروري، رغم ما تقدمه من وجهات نطر المستخدم، وتوطيد العلاقة بين المستخدمين ومدراء الموقع. لكن شخصيا أرى أنها ذات منفعة للموقع بالدرجة الأولى، رغم ما قد نصادفه من رسائل لا ترتقي إلى المستوى المطلوب- يحدث هذا وإن كان بصورة نادرة-، لكن تبقى ذات أهمية في تواصل الموقع مع مستخدميه الأوفياء بصورة أو بأخرى.
  21. تريد إبراز العناصر التي قد تمت إضافتها للمفضلة. إليك هذا المثال من"TweetDeck"، حيث تبرز الصورة عنصرين، أحدهما تمت إضافته إلى المفضلة، بينما الآخر لا يحتوي على الأيقونة الدالة على ذلك. من بين المشاكل التي قد يواجهها المستخدم، هو عدم فهمه لمعنى الأيقونة، لكن أيقونة على شكل قلب أظنها تفي بالغرض، و من الممكن إضافة رسالة نصية تظهر بجانب الأيقونة في البداية كي يعتاد المستخدم على ذلك، ثم أزلها بعد مدة من الزمن. يمكن استعمال أيقونة النجمة الذهبية، كما هو مبين في الصورة التالية:
  22. يفضّل في الواجهات التي تحتوي على أزرار لوظائف تحكمية كالإضافة، الإلغاء، الحذف... أن تكون على نفس مستوى الرؤية بالنسبة للمستخدم النهائي -الذي هو أدمين الموقع في حالتك هذه-، من الواضح أن الزرين "APPROVE" وَ "REJECT" هما لوظيفتان متلازمتان ومن الجيد أن يتلازم موقعهما مع بعضها البعض، في حين أن زر "CANCEL" بعيد شيئاً ما من حيث منطق واجهة المستخدم. أفضل الوضعية A وَ C. أجد أن الوضعية B حيث يظهر"APPROVE" و"REJECT " متباعدين بصورة لا توحي أنهما زران متضادان، حيث إحداهما تنفي وظيفة الأخرى. الوضعية D أجد الزر "CANCEL" بين الزرين الآخرين مما يخلق فرقا بينها، مما قد يربك المستخدم ويضطره إلى السؤال عن مغزى كل منها ووظيفته. حاول أن تجمع بين الأزرار التي لها وظائف متقاربة - متعرضة في الوظيفة-، حتى يستوعب المستخدم أن هذا الزر هو مقابل الآخر، بالإضافة إلى لون كل منها، اختيارك لألوان هنا موفّق، فالأزرق والأحمر متناسبين للموافقة والرفض.
  23. عادةً بل في كثير من الأحيان يلجأ المبرمجون إلى استخدام الصور عوض الأزرار وذلك باستخدام الأداة PictureBox، بغرض تفادي كثير من المشاكل التي قد يقع فيها المبرمج مع الأزرار خاصة من ناحية المظهر، فبعد تصميم التطبيق على برنامج للتصميم كـ photoshop، يجد نفسه أمام مظهر لإطار الزر مما يعكس عدم تناسق مختلف عناصر التطبيق من حيث الجمالية. وكباقي الأدوات على vb.net يوجد حدث OnClick والذي يمكن المبرمج من إدراج الكود عند ضغط المستخدم على الصور، أي نفس وظيفة الزر، وتجدر الإشارة إلى أن إضافة حدث الضغط تتم بالشكال التالي: AddHandler pic.Click, AddressOf pic_Clickثم تأتي مرحلة كتابة رد فعل التطبيق بعد الضغط على الصورة: Private Sub pic_Click(ByVal sender As Object, ByVal e As EventArgs) Msgbox('مرحبا بك، هذه رسالة من طرف أكاديمة حسوب') End Subحيث ستُعرض الرسالة بعد الضغط على الصورة. PictureBox Events
  24. للإجابة على سؤالك أود من الإجابة عن هذين السؤالين، أولهما "هل مستخدم التطبيق على الموبايل في حاجة إلى جميع الوظائف الممثلة على تطبيق سطح المكتب؟"، في حين أن السؤال الثاني هو" هل المستخدم سيشعر بأريحية أثناء استعماله للتطبيق؟". والغرض من طرح السؤالين هو أن الجدول ذو 100صف سيكون بمثابة المهمة الصعبة بالنسبة للمستخدم، حيث أن شاشة الهاتف الذكي -في الغالب- لا تتعدى 9ملم، أي أن تصفح الجدول سيستغرق المرور بالشاشة 9 مرات أو أكثر. أضف إلى ذلك إمكانية وتغير القيم المدرجة في الجدول عن طريق التحديث المباشر، مما سيربك المستخدم لا محالة. نصائح: بالنسبة للجدول أقترح إدراج نظام التصفح Pagination حيث كل صفحة تحتوي على عدد معين من الصفوف، 10 مثلا.تجنب التحديث عبر الجدول مباشرة، أي أدرج زر في جانب كل صف و عند الضغط عليه تفتح نافذة منبثقة بالقيم الموجودة في الصف المعيّن مع إمكانية تغييرها.في تطبيقات الموبايل خاصة، يلعب عامل وضوح المعلومات وعدم كثافتها عاملا مهما، أرجوا ألا تهمله.
  25. يمكن إضافة تأثير blur على السيارة وكذا الإطارات بشكل يوحي أنها ذات سرعة فائقة، وذلك من خلال القائمة : Menu > Filter > Blur > Radial Blu في درس تأثيرات نارية وإيحاء السرعة على سيارة رياضية باستخدام Photoshop أعرض نفس التقنية بإضافة هذا التأثير على سيارة رياضية مع إضافة تأثير اللهب على مستوى العجلات، وأرى أنه من الجيد إلقاء نظرة على الدرس لأن به بعض التقنيات التي من الجيد الإلمام بها، مع العلم أن الدرس باستخدام برنامج photoshop cs6. والفيديو التالي يعزز الفكرة المقترحة في الدرس:
×
×
  • أضف...