shortcuts on desktop using csharp

4 באוגוסט 2016

בהמשך לפוסט הקודם בו נתתי למשתמש תוכנה שתעתיק קבצים מסויימים בבת אחת, רציתי לייצר קיצור דרך על שולחן העבודה. כזכור לא רציתי לתת ללקוח אוסף של קבצים רק קובץ אחד, לכן חיפשתי דרך ליצור קיצור דרך ללא תלות ב – reference חיצוני. בסוף מצאתי שאני יכול לעבוד עם IShellLink, כל מה שהייתי צריך לעשות היה להגדיר את הקוד הבא:   Code Snippet internal class ShellLink{}internal interface IShellLink{    void GetPath( StringBuilder pszFile, int cchMaxPath, out IntPtr pfd, int fFlags);    void GetIDList(out IntPtr ppidl);    void SetIDList(IntPtr pidl);    void GetDescription( StringBuilder pszName, int cchMaxName);    void SetDescription( string...
אין תגובות

קריאה של Embedded resources

27 ביולי 2016

  לאחרונה רציתי לתת ללקוח פרויקט מסוג Console Application, שבזמן ריצה הוא יעתיק מספר קבצים לתיקייה כלשהי במחשב (סוג של Installer, כאשר לא התחשק לי לכתוב פרויקט מסוג Setup), מצד שני לא ממש התחשק לי לשלוח ללקוח חמש קבצים ולהגיד לו להפעיל אחד מהם (בצורה כזו כבר יכולתי ישר לבקש ממנו להעתיק את הקבצים למקום הרלוונטי) על כן השתמשתי במנגנון של Embedded resources. הוספתי פיזית את הקבצים הרלוונטיים לפרויקט, כאשר במאפיינים שלהם בחרתי שהם יהיו מסוג Embedded resources (במאפיין Build Action). הושבתי אותם בתייקית בשם Matan   המשמעות היא שהקומפילציה של הפרויקט תיצור את קובץ ה – exe...
אין תגובות

Excel – Compile error in hidden module

25 ביולי 2016

קיבלתי מלקוח קובץ עם סיומת xlsm, זהו קובץ  המכיל פקודות מאקרו בשפת VBA (סוג של פיתוח לאקסל). כשפתחתי את הקובץ – על חלק מהמחשבים זה עבד, ובחלקם קיבלתי את ההודעה הבאה: Microsoft Visual Basic for Applications --------------------------- Compile error in hidden module: טופס_ראשי. This error commonly occurs when code is incompatible with the version, platform, or architecture of this application. Click "Help" for information on how to correct this error.     במחשבה לאחור, העובדה שזה עבד על חלק מהמחשבים, רמזה לזה, שהקוד תקין, ובחלק מהמחשבים חסר reference. כדי לבדוק מה קורה ניסיתי לפתוח את הקוד [כדי לראות...
אין תגובות

C# 6 – Table Of Content

7 ביוני 2016

  בעבר כתבתי סידרת פוסטים על מה חדש ב – C# 4.0. לאחרונה התחלתי לכתוב על מה חדש ב – C# 6.0, בקרוב אשלים את החסר ואכתוב על C# 5.0. להלן תוכן העניינים. מה חדש ב – C# 6.0 חלק 1, על nameof מה חדש ב – C# 6.0 חלק 2, על Interpolated Strings. מה חדש ב – C# 6.0 חלק 3, על Null-conditional Operators מה חדש ב – C# 6.0 חלק 4, על Collection Initializers. מה חדש ב – C# 6.0 חלק 5, על Automatic Properties. מה חדש ב – C# 6.0...
אין תגובות

מה חדש ב– C# 6, חלק 7

29 במאי 2016

  בפרק הקודם למדנו על שיפורים בטיפול בשגיאות, הפעם נלמד אודות תוספת למחלקות סטטיות עד היום היה לנו שלושה שימושים במילה using כדי להגדיר namespace שנשתמש בו בקובץ הזה (using System.IO) כדי להגדיר alias עבור מחלקות (using Word = Microsoft.Office.Interop.Word) כדי לעטוף שימוש במשתנה שהמחלקה שלו מממשת IDisposable כך שהקוד נעטף מאחורי הקלעים ב – try finaly, ויש קריאה אוטומטית ל – Dispose.   בגרסה החדשה נוכל להשתמש ב – using כדי להשתמש במחלקות סטטיות, כלומר, במידה ונכתוב using בתחילת הקובץ ל – Console נוכל להפעיל את כל המתודות שלו (WriteLine, ReadLine וכו’) ללא שנצטרך לכתוב...
2 תגובות

מה חדש ב– C# 6, חלק 6

17 במאי 2016

  בפרק הקודם למדנו על שיפורים ב – Automatic properties, הפעם נראה על שיפורים ב – try catch אחד הדברים שלפעמים נעשה בבלוק של try, זה מספר בלוקים של catch כדי שנוכל לטפל בשגיאה המתאימה, לדוגמה: Code Snippet try { string str = File.ReadAllText("the path.txt"); } catch(FileNotFoundException e) { if (e.FileName.EndsWith(".txt")) { //.... } else { //..... } } catch(Exception e) { //... }   אחד השיפורים שהוכנסו לשפה זו היכולת לכתוב when בבדיקה, כך: Code Snippet try { string str = File.ReadAllText("the path.txt"); } catch(FileNotFoundException e) when (e.FileName.EndsWith(".txt")) { //... } catch(FileNotFoundException e) { //... } catch(Exception e) { //... }   שיפור נוסף שהוכנס לשפה, זה היכולת לכתוב await בתוך בלוק של catch Code Snippet private async static Task NewMethod() { try { await Task.Delay(100); } catch (FileNotFoundException e) { await Task.Delay(100); } } בפרק הבא נלמד על שיפורים בשימוש עם using
תגובה אחת

מה חדש ב– C# 6, חלק 5

12 במאי 2016

  בפרק הקודם למדנו על שיפורים במנגנון Collection Initializers, הפעם נלמד על תוספות ב – Automatic Properties. Properties מאפשרים לבצע אינקפסולצייה למשתנים כך שניתן לבצע לוגיקה לפני שליפת או השמת נתונים, כדי לחסוך הרבה קוד שחוזר על עצמו ולכתוב משתנים לעטוף אותם במאפיינים שלא עושים באמת כלום, ניתן לכתוב Automatic Properties. בגרסה החדשה התווספו שני תכונות מעניינות חדשות, האחד הוא השמה עם ערך ראשוני כמו במשתנים, כך: Code Snippet public string Name { get; set; } = "Shlomo"; בזמן קומפילציה, הקוד יעבור ל – ctor של המחלקה, הקומפיילר הוא חכם, אם יש כמה בנאים הוא יכתוב את קוד ההשמה בכולם, במידה וקראנו מאחד לשני הוא...
2 תגובות

Bootstrap – המדריך – פרק 11 – טפסים אופקיים

לתוכן העניינים בפרק הקודם למדנו על עיצוב טפסים רגילים, היום נראה כיצד מעצבים טפסים בהם הטקסט של הפקד נמצא במקביל לפקד (ולא מעליו)   גם הפעם אציג את התוצאה הסופית לפני שנעבור על הקוד, ושוב יהיה לנו: תיבת טקסט להכנסת מייל תיבת סיסמא סימון של “זכור אותי” שני לחצנים (Login, Register)     להלן הקוד המלא: Code Snippet <div class="row">    <div class="col-md-8 well">        <form class="form-horizontal">            <div class="form-group">                <label class="col-sm-3 control-label">User Name</label>                <div class="col-sm-9">                    <input type="text" class="form-control" />                    <span class="help-block">Press user name</span>                </div>            </div>            <div class="form-group">                <label class="col-sm-3 control-label">Password</label>                <div class="col-sm-9">                    <input type="password"...
אין תגובות

WCF and CORS

11 במאי 2016

בעיית ה – Cross domain היא בעיה ידועה ומוכרת אשר חוסמת פניות AJAX מדומיין אחד לדומיין שני ללא הרשאות מפורשות, כאשר מארחים WCF על IIS, ניתן לפתור את הנושא בעזרת הוספת Headers רלוונטיים ב – Web.config, לעומת זאת כאשר מארחים WCF ב – Windows Service לדוגמא, הדברים קצת מסתבכים. לפני הכול נסביר את הבעיה של Cross domain, התשובה שנשלפת מהמותן  לשאלה של “מה הבעייה” היא “בעיית אבטחה”, אבל עם טיפה מחשבה, נבין שלכאורה אין שום בעיה מ – AJAX לפנות לשרת שלנו שיהווה פרוקסי והוא יפנה לשרת המרוחק, ואז אין שום בעייה (הרי כך עובד כל Web Service) אז...
אין תגובות

jQuery ui datepicker directive for angular with typescript

לאחרונה כתבתי מערכת מבוססת אנגולר עם typescript, והייתי צריך להטמיע jquery ui datepicker, כדי לעשות זאת כתבתי directive קטן שיעזור לבצע את העבודה. אני אציג כאן את שני הגרסאות של הקוד, אחד באנגולר רגיל והשני בעטיפה ל – typescript   אנגולר Code Snippet function datePickerUi() {    return {        restrict: 'A',        require: 'ngModel',        link: function (scope, element, attrs, ngModelCtrl) {            element.datepicker({                isRTL: true,                dateFormat: 'dd/mm/yy',                onSelect: function (date) {                    scope.$apply(function () {                        ngModelCtrl.$setViewValue(date);                    });                }            });            ngModelCtrl.$render = function () {                element.datepicker('setDate', ngModelCtrl.$modelValue);            };            element.datepicker('option', $.datepicker.regional);        }    }} החלק הראשון במתודת ה – link, מטפל ביצירת האלמנט ל...
אין תגובות