דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
pcinfogmachP

pcinfogmach

@pcinfogmach
אודות
פוסטים
729
נושאים
189
שיתופים
0
קבוצות
0
עוקבים
3
עוקב אחרי
1

פוסטים

פוסטים אחרונים הגבוה ביותר שנוי במחלוקת

  • שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser
    pcinfogmachP pcinfogmach

    @dovid כתב בשלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser:

    אתה צריך להקים פשוט שרת אינטרנט

    אני לא בטוח מה כוונתך - התוסף בנוי בשביל אברכים שרוב הזמן אין להם חיבור לאינטרנט.

    @dovid כתב בשלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser:

    אמאלה, באמת חשבת לשמור כל הזמן לקובץ מקומי, רק בשביל להרויח את הback+forward?

    נשמע שיש לך רעיון אחר איך לעשות back+forward??? או שלא הבנתי נכון

    תכנות

  • שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser
    pcinfogmachP pcinfogmach

    @dovid
    אולי זה יהיה שימושי
    https://codereview.stackexchange.com/questions/126540/extended-webbrowser-control
    אבל זה מעשבר לרמה שלי אין לי מושג איך להשתמש עם זה

    תכנות

  • שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser
    pcinfogmachP pcinfogmach

    @dovid
    תודה על ההיענות

    צור חלונית צד בvsto
    הוסף פקד webbrowser
    ועוד כפתור
    הזן קוד זה עבור הכפתור

        private void button1_Click(object sender, EventArgs e)
        {
            // Generate a temporary file name
            string tempHtmlFile = Path.GetTempFileName() + ".html";
    
            // Create and write the HTML content to the temporary file
            File.WriteAllText(tempHtmlFile, @"
    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv='X-UA-Compatible' content='IE=10'>
        <script>
            function showMessage() {
                alert('Button clicked!');
            }
        </script>
    </head>
    <body>
        <button onclick='showMessage()'>Click Me</button>
    </body>
    </html>
    ");
    
            // Load the temporary HTML file into the WebBrowser control
            webBrowser1.Navigate(tempHtmlFile);
        }
    
    }
    

    וכך זה נראה
    95e0c075-1052-49da-8670-025c7828b8e5-image.png

    תכנות

  • שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser
    pcinfogmachP pcinfogmach

    @dovid

    מסתבר שטעיתי הקוד שהבאתי לא עשה כלום - הסיבה שלא היה את הבעיה כי במקום לטעון מסמך html עשיתי הזרקה של טקסט לתוך עמוד about:blank

    ניסיתי את הקוד שלך וגם לא עזר - אז עכשיו שוב אני תקוע.

    (ולעשות כל פעם הזרקה של טקסט במקום טעינת עמוד זה קצת בעייתי מכיון שאני צריך את הפונקציונליות של תנועה קדימה ואחורה בדפים שהמשתמש פתח).

    תכנות

  • שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser
    pcinfogmachP pcinfogmach

    @dovid
    ממש תודה! פשוט אין מילים

    @dovid כתב בשלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser:

    בWinForms יש לזה פתרון, אבל סביר שהוא לא עובד בVSTO (אולי כן, תבדוק)

    לבינתיים הקוד הזה עשה את העבודה וגם אין צורך לשחק ברגסטרי

    <meta http-equiv='X-UA-Compatible' content='IE=10'>
    

    ושוב תודה

    תכנות

  • שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser
    pcinfogmachP pcinfogmach

    @dovid כתב בשלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser:

    אני חושב שהכי טוב זה לכתוב את הקוד בJS, ולשים בדף פונקציית find שעושה את העבודה

    יש בעיה עם כל קוד JS כאשר משתמשים עם פקד WebBrowser בC# מכיון שהוא בעצם בנוי על אינטרנט אקספלורר - אז מה שקורה שהוא חוסם כל קוד jS (זוכרים את הימים ההם של הודעות ACTIVEX ?)
    הייתי משתמש עם פקדים יותר מתקדמים אבל דא עקא בVSTO למיטב הבנתי הם לא זמינים.

    תכנות

  • שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser
    pcinfogmachP pcinfogmach

    @dovid
    לא זוכר כרגע מאחד מהפורומים כמו stack או משהו כזה אבל הייתי צריך לשפץ אותו כך שזה קוד קצת בלי מקור.

    תכנות

  • שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser
    pcinfogmachP pcinfogmach

    שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser

    אז יש לי את הקוד הזה:

    public void searchNext(string searchText)
    {
        if (!string.IsNullOrEmpty(searchText))
        {
    
            // Ensure the webBrowser1 control is not null and has a valid document loaded.
            if (webBrowser1.Document != null)
            {
                IHTMLDocument2 doc = webBrowser1.Document.DomDocument as IHTMLDocument2;
    
                if (doc != null)
                {
                    IHTMLSelectionObject sel = (IHTMLSelectionObject)doc.selection;
                    IHTMLTxtRange rng = (IHTMLTxtRange)sel.createRange();
                    rng.collapse(false); // collapse the current selection so we start from the end of the previous range
    
                    if (rng.findText(searchText, 1000000000, 0))
                    {
                        rng.select();
                    }
                    else
                    {
    
                        if (webBrowser1.Document != null)
                        {
                            IHTMLDocument2 myDoc = webBrowser1.Document.DomDocument as IHTMLDocument2;
                            if (doc != null)
                            {
                                IHTMLBodyElement body = myDoc.body as IHTMLBodyElement;
                                if (body != null)
                                {
                                    IHTMLTxtRange docRange = body.createTextRange();
                                    docRange.collapse(true);
    
                                    if (docRange.findText(searchText, 1000000000, 0))
                                    {
                                        docRange.select();
                                    }
                                }
                            }
                        }
    
    
                    }
                }
            }
            else
            {
                // Handle the case when the webBrowser1.Document.DomDocument cannot be cast to IHTMLDocument2.
                MessageBox.Show("Could not access the document.");
            }
        }
       
    }
    

    השאלה היא - איך אני עושה שיחפש רק בכותרות ולא בגוף הטקסט

    תכנות

  • שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית
    pcinfogmachP pcinfogmach

    @dovid
    מצאתי פיתרון!

    Globals.ThisAddIn.Application.WindowDeactivate += Application_WindowDeactivate;
    
     private void Application_WindowDeactivate(Document Doc, Window Wn)
     {
         if (taskPane != null && taskPane.Visible) { windowSnap = true; }
     }
    

    זה קולט את המצב של החלונית צד בעת פתיחת מסמך חדש.


    אבל מצאתי גם בעיה אחרת
    כאשר סוגרים מסמך ללא שמירה החלונית נעלמת עד המעבר הבא בין מסמכים.
    לבינתיים רק מצאתי לזה אילתור מצחיק ובלתי מומלץ מסיבות פשוטות

     Globals.ThisAddIn.Application.DocumentBeforeClose += Application_DocumentBeforeClose;
    
    private void Application_DocumentBeforeClose(Document Doc, ref bool Cancel)
    {
        Globals.ThisAddIn.Application.ActiveWindow.WindowState = WdWindowState.wdWindowStateMinimize;
    }
    

    מה שיוצר מצב שהחלונית הנסגרת איננה החלונית האקטיבית

    תכנות

  • שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית
    pcinfogmachP pcinfogmach

    @dovid כתב בשאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית:

    בתנאי שאתה לא לוחץ על מסמך חדש, שאז אתה לא חוזר ואז זה לא נהיה visible...

    המעניין הוא שזה רק קורה כשפותחים מסמך חדש לגמרי אבל לא כאשר פותחים מסמך שמור.
    למעשה אולי אפשר לעשות שהוא יבדוק מה המצב של החלונית צד במסמך הקודם.

    תכנות

  • שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית
    pcinfogmachP pcinfogmach

    @dovid
    א. בדקתי והוא עוזר
    ב. הוא עוזר בגלל שברגע שאתה סוגר את "קובץ" ממילא שוב יש טריגר של visiblechanged והפעם הוא נהיה visible כך שהתנאי כפול מוודא שהbool חוזר לקדמותו בכל מצב שכזה.

    נ.ב. החכמתני

    תכנות

  • שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית
    pcinfogmachP pcinfogmach

    @dovid כתב בשאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית:

    סליחה, כרטסת "קובץ" שמכסה את כל הדף.
    שים נקודת עצירה בשורה 92, ולחץ על "קובץ".

    צודק! אבל הפתרון הוא פשוט על ידי הגדרת תנאי כפול.

    if (!taskPane.Visible) { windowSnap = false; } else {  windowSnap = true; }
    
    תכנות

  • שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית
    pcinfogmachP pcinfogmach

    @dovid כתב בשאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית:

    אמת, אבל הVisibleChanged מתעורר על שטויות, למשל פתיחת כרטסת הבית הופכת אותו ללא נראה.

    ??? לא קרה אצלי
    הנה הקוד שלי - לא כולל ההצעה של @YAKOV2024 לבינתיים
    (הקוד הוא עבור xml ribbon

    using Microsoft.Office.Interop.Word;
    using Microsoft.Office.Tools.Ribbon;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Runtime.InteropServices;
    using System.Text;
    using Word = Microsoft.Office.Interop.Word;
    using Office = Microsoft.Office.Core;
    using Microsoft.Office.Core;
    using System.Windows.Forms;
    
    namespace ToratEmetInWord_2._0
    {
        [ComVisible(true)]
        public class Ribbon : Office.IRibbonExtensibility
        {
            private Office.IRibbonUI ribbon;
            Microsoft.Office.Tools.CustomTaskPane taskPane;
            private Word.Document lastDoc;
            private UserControlContainer container;
            private UserControl1 ToratEmetTaskPane = new UserControl1();
            private bool windowSnap;
    
            public Ribbon()
            {
            }
    
            #region IRibbonExtensibility Members
    
            public string GetCustomUI(string ribbonID)
            {
                return GetResourceText("ToratEmetInWord_2._0.Ribbon.xml");
            }
    
            #endregion
    
            #region Ribbon Callbacks
            //Create callback methods here. For more information about adding callback methods, visit https://go.microsoft.com/fwlink/?LinkID=271226
    
            public void Ribbon_Load(Office.IRibbonUI ribbonUI)
            {
                this.ribbon = ribbonUI;
                Globals.ThisAddIn.Application.DocumentChange += Application_DocumentChange;
            }
    
            private void Application_DocumentChange()
            {
                if (Properties.Settings.Default.snapWithWindow == true && windowSnap ==true)
                {
                   loadPanel();
                }
            }
    
            public System.Drawing.Image GetImage(Office.IRibbonControl control)
            {
               System.Drawing.Bitmap image = Properties.Resources.תורת_אמת2;
                return image;
            }
    
    
            public void toratEmetButton_Click(IRibbonControl control)
            {
                windowSnap = true;
                loadPanel();
            }
    
    
    
            private void loadPanel()
            {
                if (Globals.ThisAddIn.Application.Documents.Count == 0 || lastDoc == Globals.ThisAddIn.Application.ActiveDocument)
                    return;
    
                lastDoc = Globals.ThisAddIn.Application.ActiveDocument;
                if (taskPane != null)
                {
                    container.Controls.Remove(ToratEmetTaskPane);
                    Globals.ThisAddIn.CustomTaskPanes.Remove(taskPane);
                }
                container = new UserControlContainer(ToratEmetTaskPane);
                taskPane = Globals.ThisAddIn.CustomTaskPanes.Add(container, "תורת אמת");
                taskPane.Visible = true;
                taskPane.Width = 450;
                taskPane.VisibleChanged += TaskPane_VisibleChanged;
            }
    
            private void TaskPane_VisibleChanged(object sender, EventArgs e)
            {
                if (!taskPane.Visible) { windowSnap = false; }       
            }
    
            #endregion
    
            #region Helpers
    
            private static string GetResourceText(string resourceName)
            {
                Assembly asm = Assembly.GetExecutingAssembly();
                string[] resourceNames = asm.GetManifestResourceNames();
                for (int i = 0; i < resourceNames.Length; ++i)
                {
                    if (string.Compare(resourceName, resourceNames[i], StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        using (StreamReader resourceReader = new StreamReader(asm.GetManifestResourceStream(resourceNames[i])))
                        {
                            if (resourceReader != null)
                            {
                                return resourceReader.ReadToEnd();
                            }
                        }
                    }
                }
                return null;
            }
    
            #endregion
        }
    
        public class UserControlContainer : UserControl
        {
            public UserControlContainer(UserControl1 control)
            {
                Controls.Add(control);
                control.Dock = DockStyle.Fill;
            }
        }
    
    }
    
    תכנות

  • האם חסר לי פה ספר מהרשימה? (רשימה של התנ"ך) - תודה מראש.
    pcinfogmachP pcinfogmach

    "בראשית", "שמות", "ויקרא", "במדבר", "דברים",
    "יהושע", "שופטים", "שמואל", "מלכים", "ישעיה", "ירמיה", "יחזקאל", "הושע", "יואל", "עמוס", "עובדיה", "יונה", "מיכה", "נחום", "חבקוק", "צפניה", "חגי", "זכריה", "מלאכי",
    "תהילים", "איוב", "משלי", "רות", "שיר השירים", "קהלת", "איכה", "אסתר", "דניאל", "עזרא", "נחמיה", "דברי הימים"

    גומלין - כללי

  • שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית
    pcinfogmachP pcinfogmach

    @dovid
    תתקן אותי אם אני טועה
    לכאורה אפשר לעשות פשוט שכאשר מסמך מסויים הוא נהיה אקטיבי אז זה מעורר משתנה ואז כאשר יש את הטריגר של visiblechanged אז הוא רושם מהו המסמך ומה היה המצב של visiblechanged (כל זה הבנתי מדבריו של @YAKOV2024 )

    תכנות

  • שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית
    pcinfogmachP pcinfogmach

    אני רוצה לסכם היכן אנחנו אוחזים:
    בעצם יש לנו קוד נפלא של @dovid שמעביר את החלונית צד מממסמך למסמך בצורה נקייה וטובה.
    אפשר להגדיר bool שיקבל ערך שקר בעת לחיצה על לחצן הסגירה של חלונית הצד על ידי taskPane.VisibleChanged += TaskPane_VisibleChanged;
    ומאידך יקבל ערך אמת על ידי לחיצה על כפתור הפתיחה של החלונית צד.
    אפשר גם להוסיף עוד bool ב settings של התוכנה שיתן למשתמש אפשרות לבחור אם החלונית צד תקפוץ ממסמך למסמך או לא.
    ויש לנו את ההצעה של @YAKOV2024 שטוען שאולי אפשר להשתמש עם רשימה שרושמת את המסמכים הפתוחים ובכך נוכל להגדיר שרק במסמך המסויים בו נסגר החלונית צד שמה לא יצוץ שוב אבל יישאר בכל שאר המסמכים.

    תכנות

  • שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית
    pcinfogmachP pcinfogmach

    @dovid
    עוד לא ישבתי על זה לעומק אבל כמדומני שהתגובה שלך היא לשיטתך.
    כלומר @YAKOV2024 מציע שיטת עבודה אחרת לגמרי ממה שגיבשנו עד כה

    תכנות

  • שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית
    pcinfogmachP pcinfogmach

    @dovid כתב בשאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית:

    האזנה לסגירה אתה יכול לעשות עם האירוע taskPane.VisibleChanged שמה בתוכו אתה יכול לבדוק את taskPane.Visible.

    מה עם הבעיות הנ"ל?
    https://tchumim.com/post/157637

    תכנות

  • שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית
    pcinfogmachP pcinfogmach

    @dovid כתב בשאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית:

    לא היית צריך להתנצל, ולא הבנת אותי.
    מתי אתה רוצה שייפתח התוסף פעם ראשונה, בעת_________?

    בעת לחיצה על כפתור בסרגל הכלים (סרגל visual לא סרגל xml)

    הערה: אם מתכנתים סרגל visual או שמתשמשים עם לשונית מובנית ואש אפשר להשתמש עם cotrolid של office אם רצונך ליצור לשונית חדשה אז צריך להגדיר כ custom

    תכנות

  • שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית
    pcinfogmachP pcinfogmach

    @dovid כתב בשאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית:

    אבל כל הסיפור הזה זה השתלשלות בלתי נסבלת מנושא אחר. כי אין פה שום אזכור בנושא מתי אתה רוצה להציג את החלונית, והיה במשמע שאתה תמיד רוצה.

    סליחה שלא כתבתי בהתחלה מספיק ברור.
    הרעיון שלי היה לעשות שהחלונית תשאר סטטית בכל המסמכים הפתוחים דהיינו או פתוחה או סגורה.
    כי המצב המובנה של וורד שהוא רק פותח חלונית במסמך הנוכחי מאוד מעצבן בתוסף כמו שלי.
    אז רציתי לדמות כאילו התוסף פתוח או סגור באותה רמה בכל המסמכים הפתוחים. ושאם כבר פתוח במסמך אחד אז גם ייפתח אוטומטית במסמכים חדשים.
    מקווה שכתבתי מספיק ברור.

    לגבי הטריגר הוא אמור היות הכפתור סגירה רק שהסתכתי עם זה ועם הbool כנ"ל
    ושוב תודה

    תכנות
  • 1 / 1
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום