@dovid
שאלה: כמה משאבים זה לוקח לעשות שרת מקומי כמו שתיארת?
pcinfogmach
-
שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser -
שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser@dovid כתב בשלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser:
אתה צריך להקים פשוט שרת אינטרנט
אני לא בטוח מה כוונתך - התוסף בנוי בשביל אברכים שרוב הזמן אין להם חיבור לאינטרנט.
@dovid כתב בשלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser:
אמאלה, באמת חשבת לשמור כל הזמן לקובץ מקומי, רק בשביל להרויח את הback+forward?
נשמע שיש לך רעיון אחר איך לעשות back+forward??? או שלא הבנתי נכון
-
שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser@dovid
אולי זה יהיה שימושי
https://codereview.stackexchange.com/questions/126540/extended-webbrowser-control
אבל זה מעשבר לרמה שלי אין לי מושג איך להשתמש עם זה -
שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser@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); } }וכך זה נראה

-
שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowserמסתבר שטעיתי הקוד שהבאתי לא עשה כלום - הסיבה שלא היה את הבעיה כי במקום לטעון מסמך html עשיתי הזרקה של טקסט לתוך עמוד about:blank
ניסיתי את הקוד שלך וגם לא עזר - אז עכשיו שוב אני תקוע.
(ולעשות כל פעם הזרקה של טקסט במקום טעינת עמוד זה קצת בעייתי מכיון שאני צריך את הפונקציונליות של תנועה קדימה ואחורה בדפים שהמשתמש פתח).
-
שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser@dovid
ממש תודה! פשוט אין מילים@dovid כתב בשלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser:
בWinForms יש לזה פתרון, אבל סביר שהוא לא עובד בVSTO (אולי כן, תבדוק)
לבינתיים הקוד הזה עשה את העבודה וגם אין צורך לשחק ברגסטרי
<meta http-equiv='X-UA-Compatible' content='IE=10'>ושוב תודה
-
שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser@dovid כתב בשלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser:
אני חושב שהכי טוב זה לכתוב את הקוד בJS, ולשים בדף פונקציית find שעושה את העבודה
יש בעיה עם כל קוד JS כאשר משתמשים עם פקד WebBrowser בC# מכיון שהוא בעצם בנוי על אינטרנט אקספלורר - אז מה שקורה שהוא חוסם כל קוד jS (זוכרים את הימים ההם של הודעות ACTIVEX ?)
הייתי משתמש עם פקדים יותר מתקדמים אבל דא עקא בVSTO למיטב הבנתי הם לא זמינים. -
שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowser@dovid
לא זוכר כרגע מאחד מהפורומים כמו stack או משהו כזה אבל הייתי צריך לשפץ אותו כך שזה קוד קצת בלי מקור. -
שלאה בקוד C#: איך לעשות חיפוש בתוך מסמך html שהוא פתוח בwebbrowserשלאה בקוד 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 יישאר תמיד בחלונית האקטיבית@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 יישאר תמיד בחלונית האקטיבית@dovid כתב בשאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית:
בתנאי שאתה לא לוחץ על מסמך חדש, שאז אתה לא חוזר ואז זה לא נהיה visible...
המעניין הוא שזה רק קורה כשפותחים מסמך חדש לגמרי אבל לא כאשר פותחים מסמך שמור.
למעשה אולי אפשר לעשות שהוא יבדוק מה המצב של החלונית צד במסמך הקודם. -
שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית@dovid
א. בדקתי והוא עוזר
ב. הוא עוזר בגלל שברגע שאתה סוגר את "קובץ" ממילא שוב יש טריגר של visiblechanged והפעם הוא נהיה visible כך שהתנאי כפול מוודא שהbool חוזר לקדמותו בכל מצב שכזה.נ.ב. החכמתני
-
שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית@dovid כתב בשאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית:
סליחה, כרטסת "קובץ" שמכסה את כל הדף.
שים נקודת עצירה בשורה 92, ולחץ על "קובץ".צודק! אבל הפתרון הוא פשוט על ידי הגדרת תנאי כפול.
if (!taskPane.Visible) { windowSnap = false; } else { windowSnap = true; } -
שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית@dovid כתב בשאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית:
אמת, אבל הVisibleChanged מתעורר על שטויות, למשל פתיחת כרטסת הבית הופכת אותו ללא נראה.
??? לא קרה אצלי
הנה הקוד שלי - לא כולל ההצעה של @YAKOV2024 לבינתיים
(הקוד הוא עבור xml ribbonusing 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; } } } -
האם חסר לי פה ספר מהרשימה? (רשימה של התנ"ך) - תודה מראש."בראשית", "שמות", "ויקרא", "במדבר", "דברים",
"יהושע", "שופטים", "שמואל", "מלכים", "ישעיה", "ירמיה", "יחזקאל", "הושע", "יואל", "עמוס", "עובדיה", "יונה", "מיכה", "נחום", "חבקוק", "צפניה", "חגי", "זכריה", "מלאכי",
"תהילים", "איוב", "משלי", "רות", "שיר השירים", "קהלת", "איכה", "אסתר", "דניאל", "עזרא", "נחמיה", "דברי הימים" -
שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית@dovid
תתקן אותי אם אני טועה
לכאורה אפשר לעשות פשוט שכאשר מסמך מסויים הוא נהיה אקטיבי אז זה מעורר משתנה ואז כאשר יש את הטריגר של visiblechanged אז הוא רושם מהו המסמך ומה היה המצב של visiblechanged (כל זה הבנתי מדבריו של @YAKOV2024 ) -
שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיביתאני רוצה לסכם היכן אנחנו אוחזים:
בעצם יש לנו קוד נפלא של @dovid שמעביר את החלונית צד מממסמך למסמך בצורה נקייה וטובה.
אפשר להגדיר bool שיקבל ערך שקר בעת לחיצה על לחצן הסגירה של חלונית הצד על ידי taskPane.VisibleChanged += TaskPane_VisibleChanged;
ומאידך יקבל ערך אמת על ידי לחיצה על כפתור הפתיחה של החלונית צד.
אפשר גם להוסיף עוד bool ב settings של התוכנה שיתן למשתמש אפשרות לבחור אם החלונית צד תקפוץ ממסמך למסמך או לא.
ויש לנו את ההצעה של @YAKOV2024 שטוען שאולי אפשר להשתמש עם רשימה שרושמת את המסמכים הפתוחים ובכך נוכל להגדיר שרק במסמך המסויים בו נסגר החלונית צד שמה לא יצוץ שוב אבל יישאר בכל שאר המסמכים. -
שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית@dovid
עוד לא ישבתי על זה לעומק אבל כמדומני שהתגובה שלך היא לשיטתך.
כלומר @YAKOV2024 מציע שיטת עבודה אחרת לגמרי ממה שגיבשנו עד כה -
שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית@dovid כתב בשאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית:
האזנה לסגירה אתה יכול לעשות עם האירוע taskPane.VisibleChanged שמה בתוכו אתה יכול לבדוק את taskPane.Visible.
מה עם הבעיות הנ"ל?
https://tchumim.com/post/157637 -
שאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית@dovid כתב בשאלה: איך עושים בתוסף vsto לוורד שtaskpane יישאר תמיד בחלונית האקטיבית:
לא היית צריך להתנצל, ולא הבנת אותי.
מתי אתה רוצה שייפתח התוסף פעם ראשונה, בעת_________?בעת לחיצה על כפתור בסרגל הכלים (סרגל visual לא סרגל xml)
הערה: אם מתכנתים סרגל visual או שמתשמשים עם לשונית מובנית ואש אפשר להשתמש עם cotrolid של office אם רצונך ליצור לשונית חדשה אז צריך להגדיר כ custom