המלצה | פרוייקט כלי קודש לוורד - ארגז כלים לעורך התורני
-
בהגדרות הדפסה, אין אפשרות להשתמש בחיצים של הגדלת מספר העותקים.
אתה מתכווין בpdf?
אני הצלחתי...
תשלח לי קובץ -
@pcinfogmach
סוגיא סבוכה, וכפי שכתבתי, בוורד זה באמת יותר מתאים כמו שעשית, כך שאין ברירה, אלא להשאיר לנו עבודה לשאול ולענות...
אולי מדריך קצר כמו שביקשו בגיטהב, היום אנשים לא קוראים הגדרות וכדו', כך שאם תתן לAI למשל לעשות מדריך על ההגדרות, לדעתי זה יספק את רוב השואלים! -
@pcinfogmach
סוגיא סבוכה, וכפי שכתבתי, בוורד זה באמת יותר מתאים כמו שעשית, כך שאין ברירה, אלא להשאיר לנו עבודה לשאול ולענות...
אולי מדריך קצר כמו שביקשו בגיטהב, היום אנשים לא קוראים הגדרות וכדו', כך שאם תתן לAI למשל לעשות מדריך על ההגדרות, לדעתי זה יספק את רוב השואלים! -
@צדיק-וטוב-לו-0
אכתי אינני מצליח לשחזר את הבעיה -
למעבר מחלונית תוצאות חיפוש, לחלונית פתיחת התוצאות, לא נפתח טאב נפרד וממילא בשביל לחזור חזרה חלונית פתיחת תוצאות [לאחר פתיחת תוצאת חיפוש] צריך להשתמש בחיצים, כמדומה שכדאי שיהיה טאב נפרד ואבסולוטי לחולנית תוצאות החיפוש.
כדי לפתוח תוצאה בטאב נפרד לוחצים על cntrl בעת לחיצה על התוצאה
כדי לפתוח תוצאה בטאב נפרד לוחצים על cntrl בעת לחיצה על התוצאה
לא כדאי שזה יהיה כבררת מחדל?
[כמדו' שרוב הלומדים לא בקיאים בפונקציות המקשים המשוכללות]יש"כ גדול.
-
כדי לפתוח תוצאה בטאב נפרד לוחצים על cntrl בעת לחיצה על התוצאה
לא כדאי שזה יהיה כבררת מחדל?
[כמדו' שרוב הלומדים לא בקיאים בפונקציות המקשים המשוכללות]יש"כ גדול.
לא כדאי שזה יהיה כבררת מחדל?
לא
ככה זה יותר נכון ואני לא רואה סיבה לייצר משהו מעוות שמכשיל חצי מפונקציונליות המשוכללת של התוכנה רק בגלל העצלות של אנשים
זה מופיע בטולטיפ וזה די והותר
מי שאפילו זה לא מסוגל לעשות לקרוא טולטיפ קצר ושימושי מגיע לו את העונש הזה שלא ידע
עוד מעט יבקשו ממני לייצר תוכנה שלא מציגה את הטקסט אלא מקרינה אותו ישיריות לתוך המוח....הבהרה: אולי כתבתי חריף מדאי הכל נאמר מתוך מילתא דבדיחותא בלבד
-
לא כדאי שזה יהיה כבררת מחדל?
לא
ככה זה יותר נכון ואני לא רואה סיבה לייצר משהו מעוות שמכשיל חצי מפונקציונליות המשוכללת של התוכנה רק בגלל העצלות של אנשים
זה מופיע בטולטיפ וזה די והותר
מי שאפילו זה לא מסוגל לעשות לקרוא טולטיפ קצר ושימושי מגיע לו את העונש הזה שלא ידע
עוד מעט יבקשו ממני לייצר תוכנה שלא מציגה את הטקסט אלא מקרינה אותו ישיריות לתוך המוח....הבהרה: אולי כתבתי חריף מדאי הכל נאמר מתוך מילתא דבדיחותא בלבד
-
עוד מעט יבקשו ממני לייצר תוכנה שלא מציגה את הטקסט אלא מקרינה אותו ישיריות לתוך המוח....
תוכל, בבקשה?
אני ממש אשמח! -
עוד מעט יבקשו ממני לייצר תוכנה שלא מציגה את הטקסט אלא מקרינה אותו ישיריות לתוך המוח....
תוכל, בבקשה?
אני ממש אשמח! -
@י.-פל.
אתה בטוח שאתה רוצה לראות את הדף חסימה של נטפרי פתאום מופיעה לך במוח? -
אתה בטוח שאתה רוצה לראות את הדף חסימה של נטפרי פתאום מופיעה לך במוח?
הלוואי שהיתה אפשרות כזו!
@יעב-ץ יש בהחלט! התקנה מורכבת למדי אבל אלול זה זמן מתאים.
ובזאת סיימנו להספים להרב @pcinfogmach שליט"א את האשכול
הבעיה עם זה שזה כל הזמן דורש עדכונים... ופתאום עדכון אחד יכול להקריס את המערכת
זה פרויקט שלא נגמר בחיים. פשוטו כמשמעו -
אתה בטוח שאתה רוצה לראות את הדף חסימה של נטפרי פתאום מופיעה לך במוח?
הלוואי שהיתה אפשרות כזו!
@יעב-ץ יש.
שמעת פעם על ר' מתיא בן החרש?
או על דברי הגאונים בטעם שרב ששת ורב יוסף היו סגי נהור. -
@יעב-ץ יש.
שמעת פעם על ר' מתיא בן החרש?
או על דברי הגאונים בטעם שרב ששת ורב יוסף היו סגי נהור.@צדיק-וטוב-לו-0
זה לא המוח. -
נמצאה שגיאה ב- XML של ממשק משתמש מותאם אישית של "כלי קודש":
שורה: 154
עמודה: 49
קוד שגיאה 0x80004005
מזהה פקד לא ידוע של ContextMenuListsNumbering :Office -
אני ב904 עם המסד המעודכן של אוצריא,
כל פתיחה זה מאנדקס את החיפוש מחדש, קרה לעוד מישהו? -
אני ב904 עם המסד המעודכן של אוצריא,
כל פתיחה זה מאנדקס את החיפוש מחדש, קרה לעוד מישהו?@חד-בדרא-השני
כן זה באג
מקווה שייפתר בגרסה הבאה -
נמצאה שגיאה ב- XML של ממשק משתמש מותאם אישית של "כלי קודש":
שורה: 154
עמודה: 49
קוד שגיאה 0x80004005
מזהה פקד לא ידוע של ContextMenuListsNumbering :Officeנמצאה שגיאה ב- XML של ממשק משתמש מותאם אישית של "כלי קודש":
שורה: 154
עמודה: 49
קוד שגיאה 0x80004005
מזהה פקד לא ידוע של ContextMenuListsNumbering :Officeאיזה גרסה אופיס?
-
לגבי קיצור מקשים מוורד לכלי קודש בוורד, נפל ברעיוני, שאולי על ידי URL זה כן יעבוד.
כגון שעשו באוצריא / זית וכדו':URL = "zayit://search/" & SearchText@pcinfogmach מסקרנות שאלתי את GPT, ומעניין אותי האם הוא מבלבל תשכל, או שהוא מדבר לעניין:
כן. ועכשיו, אחרי שבדקתי את הקוד של הפרויקט, יש דרך טובה לעשות את זה, ואפילו הייתי ממליץ עליה יותר מאשר ליצור
vesto://.התוסף הוא VSTO Add-in אמיתי ל-Word, עם
ThisAddIn.cs, Ribbon XML ומנהל Task Panes. כלומר, אנחנו יכולים להוסיף לו נקודת כניסה חיצונית שתאפשר למאקרו VBA להפעיל פעולה ספציפית.מה שאתה רוצה לעשות
המטרה שלך היא למעשה:
קיצור מקשים של Word → מאקרו VBA → הפעלת פקודה של VESTO
לדוגמה:
Ctrl+Alt+V ↓ SearchInVesto() ↓ VESTO מקבל את הטקסט המסומן ↓ נפתח/מופעל כלי החיפוש של VESTOוזה בהחלט אפשרי.
יש שתי דרכים
1. URI Protocol —
vesto://אפשר להוסיף ל-VESTO פרוטוקול Windows משל עצמו, למשל:
vesto://search/שלוםואז המאקרו שלך יהיה כמעט זהה ל־
SearchInZayit:Sub SearchInVesto() Dim SearchText As String Dim URL As String SearchText = Selection.Range.Text SearchText = Replace(SearchText, " ", "%20") URL = "vesto://search/" & SearchText CreateObject("WScript.Shell").Run URL End Subאבל כאן יש חיסרון: צריך להעביר את הבקשה דרך Windows ולהכניס מנגנון URI לתוסף.
2. דרך שאני חושב שעדיפה במקרה שלך — API קטן בין VBA ל-VESTO
מכיוון ש-VESTO כבר רץ בתוך Word, אפשר להוסיף לו פקודה שניתנת לקריאה מבחוץ, למשל דרך:
WM_COPYDATA- Named Pipe
- COM
- או אפילו מנגנון פשוט יותר.
ואז המאקרו יכול לומר:
"VESTO, קח את הטקסט הזה ובצע את הפקודה X."
זה מאפשר בעתיד לא רק חיפוש, אלא למשל:
VESTO.Search("טקסט") VESTO.OpenKitveiHakodesh() VESTO.OpenRegex() VESTO.Format()וכדומה.
ויש עוד אפשרות מעניינת במיוחד
מכיוון שהתוסף כבר משתמש ב־Ribbon XML ומחלק את הפעולות לכפתורים, ייתכן שאפשר לא להוסיף שום תקשורת חיצונית בכלל.
אפשר להוסיף ל-VESTO Ribbon command ייעודי, ואז לבדוק האם Word יכול להפעיל אותו באמצעות:
Application.CommandBars.ExecuteMso "שם-הפקודה"אם זה יעבוד, זה יהיה הפתרון הכי נקי:
Sub VestoSearch() Application.CommandBars.ExecuteMso "VestoSearch" End Subואז אתה נותן למאקרו קיצור מקשים דרך Word, בדיוק כפי שרצית.
לכן הייתי בודק קודם את האפשרות השלישית, ורק אם היא לא מתאימה — בונה
vesto://.היות שיש לנו את קוד המקור של VESTO, אני יכול לבדוק את
KeliKodeshRibbon.csואתKeliKodeshRibbon.xmlולראות איך הפקודות של התוסף מוגדרות כרגע, ואז לומר לך אם אפשר להפעיל אותן ישירות מ-VBA ואם לא — מה השינוי הקטן ביותר בקוד שייתן לך את היכולת הזאת.כן. בדקתי את המבנה האמיתי של VESTO בקוד, ויש כאן חדשות טובות: לא צריך להוסיף
vesto://בכלל.במקרה הזה הייתי עושה מנגנון פשוט ונקי יותר:
קיצור מקשים של Word → מאקרו VBA → פקודת VSTO חשופה → VESTO מפעיל את החיפוש.
כבר עכשיו ב־VESTO יש
contextMenu_Click, והוא יודע לקחת את הטקסט המסומן מתוך Word ולהעביר אותו ל־AppViewer.SearchFromHost(text, target).הייתי מרחיב בדיוק את המנגנון הזה.
1. שינוי ב־
KeliKodeshRibbon.csבתוך המחלקה
KeliKodeshRibbon, הוסף את הפונקציה הבאה:/// <summary> /// נקודת כניסה להפעלת חיפוש בכתבי הקודש מתוך VBA/Automation. /// לוקח את הטקסט המסומן כרגע ב-Word ומפעיל חיפוש FTS. /// </summary> public void SearchKitveiHakodeshFromVba() { try { string text = Globals.ThisAddIn.Application.Selection?.Text; if (string.IsNullOrWhiteSpace(text)) return; var appViewer = ShowKitveiHakodesh(); appViewer?.SearchFromHost(text, "fts"); } catch (Exception ex) { MessageBox.Show( ex.Message, "חיפוש בכתבי הקודש", MessageBoxButtons.OK, MessageBoxIcon.Error); } }זה למעשה ממחזר את המנגנון שכבר קיים בתוסף:
string text = Globals.ThisAddIn.Application.Selection?.Text; ... var appViewer = ShowKitveiHakodesh(); appViewer?.SearchFromHost(text, target);
2. אבל יש נקודה חשובה
VBA לא יכול פשוט לעשות:
KeliKodeshRibbon.SearchKitveiHakodeshFromVbaכי אובייקט ה־Ribbon אינו חשוף ל־VBA בצורה כזאת באופן אוטומטי.
לכן אני ממליץ לעשות COM Automation קטן.
ב־VSTO יש לנו כבר
ThisAddIn.cs, שהוא נקודת הכניסה של התוסף.במקום לחשוף את ה־Ribbon עצמו, נחשוף אובייקט קטן בשם למשל:
KleiKodeshApiעם פעולה:
SearchKitveiHakodesh()ואז VBA יוכל לדבר איתו.
3. ה־API
צור קובץ חדש:
KleiKodeshVsto/Automation/KleiKodeshApi.csעם:
using System; using System.Runtime.InteropServices; namespace KleiKodesh.Automation { [ComVisible(true)] [Guid("7D7E6F3B-8B7C-4D89-9E72-1A3C4F8B52A1")] [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface IKleiKodeshApi { void SearchKitveiHakodesh(); } [ComVisible(true)] [Guid("A3B8D6F1-2E44-4A7D-9C91-6B2E8F4D1735")] [ClassInterface(ClassInterfaceType.None)] public class KleiKodeshApi : IKleiKodeshApi { public void SearchKitveiHakodesh() { Globals.ThisAddIn.SearchKitveiHakodesh(); } } }ואז ב־
ThisAddIn.csנוסיף:public void SearchKitveiHakodesh() { try { string text = Application.Selection?.Text; if (string.IsNullOrWhiteSpace(text)) return; var appViewer = Ribbon?.ShowKitveiHakodeshForAutomation(); appViewer?.SearchFromHost(text, "fts"); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show( ex.Message, "חיפוש בכתבי הקודש", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); } }אבל כאן הייתי עושה שינוי קטן נוסף בארכיטקטורה, כדי לא להפוך את
Ribbonלתלות של ה־API.כלומר, עדיף שהפעולה עצמה תהיה ב־
ThisAddIn, ותשתמש ישירות ב־TaskPaneManager.
4. הגרסה שאני ממליץ עליה בפועל
ב־
ThisAddIn.cs:public void SearchKitveiHakodesh() { try { string text = Application.Selection?.Text; if (string.IsNullOrWhiteSpace(text)) return; var pane = TaskPaneManager.Show( () => new KitveiHakodeshLib.AppViewer { ShowPopOutButton = true }, "כתבי הקודש", 610, popOutBehavior: true); var appViewer = pane?.Control as KitveiHakodeshLib.AppViewer; appViewer?.SearchFromHost(text, "fts"); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show( ex.Message, "חיפוש בכתבי הקודש", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); } }זה משתמש באותו
TaskPaneManager.Showשבו התוסף משתמש כבר עכשיו כדי ליצור/למחזר את חלונית כתבי הקודש.
5. ה־VBA
ואז המאקרו יכול להיות:
Sub SearchInVesto() Dim Vesto As Object Set Vesto = CreateObject("KleiKodesh.Automation.KleiKodeshApi") Vesto.SearchKitveiHakodesh End Subואז:
סמן טקסט → קיצור מקשים → המאקרו → VESTO → חיפוש.
אבל יש לי הצעה אפילו טובה יותר
מכיוון שהמטרה שלך היא קיצור מקשים, הייתי בונה את ה־API מראש בצורה שתאפשר לך כמה פקודות:
public interface IKleiKodeshApi { void SearchKitveiHakodesh(); void SearchCatalog(); void OpenKitveiHakodesh(); }ואז ב־VBA:
Sub VestoSearch() Dim Vesto As Object Set Vesto = CreateObject("KleiKodesh.Automation.KleiKodeshApi") Vesto.SearchKitveiHakodesh End Subובהמשך:
Sub VestoCatalogSearch() Dim Vesto As Object Set Vesto = CreateObject("KleiKodesh.Automation.KleiKodeshApi") Vesto.SearchCatalog End Subכך תוכל להקצות קיצור מקשים נפרד לכל פעולה של VESTO, למרות ש-Word עצמו לא מאפשר לך להגדיר קיצור ישירות לכפתורי התוסף.
דבר אחד חשוב לפני שאתה משנה את הקוד
ה־
CreateObject("KleiKodesh.Automation.KleiKodeshApi")דורש שה־COM class יירשם ב־Windows. ב־VSTO זה לא תמיד קורה אוטומטית רק בגלל[ComVisible(true)].לכן לא הייתי מכניס עדיין את קוד ה־COM הזה לפרויקט ומקמפל. כדאי קודם לבדוק את
ThisAddIn.csואת קובץ הפרויקט.csproj, ובעיקר איך המתקין של KleiKodesh מתקין ורושם את ה־VSTO. המתקין נמצא בפרויקטBuild/Installer, וה־README מאשר שזה המנגנון שמתקין את תוסף ה־VSTO. -
כבוד הרב @pcinfogmach, היום בסד"א השתמשתי בתוסף שלך, אחרי תקופה ארוכה שלא השתמשתי בו, בינה"ז ושות'.
ומה מאוד השתוממתי עד מאוד, לראותו בפנים חדשות (גירסה 9.0.4) התוסף הקטן והנוח שלך, הפך למשהו מדהים! תוכנה בפנ"ע ממש, עם מלא אפשרויות, נוחות שימוש גדולה, ממשק נוח עד מאוד! ועוד ועוד ועוד!!!
יש לך טעם טוב בעיצוב ובהנגשה של דברים, זה מדהים הדבר הזה!
ראיתי גם שהוספת חיפוש בקבצי המחשב - הוא עובד בצורה מהירה ממש, על איזה מנוע זה יושב?(הייתי מוסיף בקובץ התקנה - שיריץ סקריפט שיפעיל את אפשרות החיפוש במחשבי ווידנוס - מכיון שיש משתמשים רבים שלא יבינו את משמעות הודעת השגיאה בחיפוש - במחשבים בהם לא מופעל שירות החיפוש הלז)
ועוד משהו... ראיתי שעדיין לא נכנס האפשרות להצמיד תיקיות אישיות לדף הבית של התוסף, זה יתווסף מתי שהוא?
התקנתי את זה לחבר שקנה מחשב חדש, אין לו יד ורגל במחשבים, והוא ממש נהנה מזה, הוא אמר לי, אני פותח רמב"ן וזה נראה כמו רמב"ן (תצוגה צרה במסך...) זה נוח ללמוד, להעתיק, לחפש וכו'.
חיילך לאורייתא!
-
לגבי קיצור מקשים מוורד לכלי קודש בוורד, נפל ברעיוני, שאולי על ידי URL זה כן יעבוד.
כגון שעשו באוצריא / זית וכדו':URL = "zayit://search/" & SearchText@pcinfogmach מסקרנות שאלתי את GPT, ומעניין אותי האם הוא מבלבל תשכל, או שהוא מדבר לעניין:
כן. ועכשיו, אחרי שבדקתי את הקוד של הפרויקט, יש דרך טובה לעשות את זה, ואפילו הייתי ממליץ עליה יותר מאשר ליצור
vesto://.התוסף הוא VSTO Add-in אמיתי ל-Word, עם
ThisAddIn.cs, Ribbon XML ומנהל Task Panes. כלומר, אנחנו יכולים להוסיף לו נקודת כניסה חיצונית שתאפשר למאקרו VBA להפעיל פעולה ספציפית.מה שאתה רוצה לעשות
המטרה שלך היא למעשה:
קיצור מקשים של Word → מאקרו VBA → הפעלת פקודה של VESTO
לדוגמה:
Ctrl+Alt+V ↓ SearchInVesto() ↓ VESTO מקבל את הטקסט המסומן ↓ נפתח/מופעל כלי החיפוש של VESTOוזה בהחלט אפשרי.
יש שתי דרכים
1. URI Protocol —
vesto://אפשר להוסיף ל-VESTO פרוטוקול Windows משל עצמו, למשל:
vesto://search/שלוםואז המאקרו שלך יהיה כמעט זהה ל־
SearchInZayit:Sub SearchInVesto() Dim SearchText As String Dim URL As String SearchText = Selection.Range.Text SearchText = Replace(SearchText, " ", "%20") URL = "vesto://search/" & SearchText CreateObject("WScript.Shell").Run URL End Subאבל כאן יש חיסרון: צריך להעביר את הבקשה דרך Windows ולהכניס מנגנון URI לתוסף.
2. דרך שאני חושב שעדיפה במקרה שלך — API קטן בין VBA ל-VESTO
מכיוון ש-VESTO כבר רץ בתוך Word, אפשר להוסיף לו פקודה שניתנת לקריאה מבחוץ, למשל דרך:
WM_COPYDATA- Named Pipe
- COM
- או אפילו מנגנון פשוט יותר.
ואז המאקרו יכול לומר:
"VESTO, קח את הטקסט הזה ובצע את הפקודה X."
זה מאפשר בעתיד לא רק חיפוש, אלא למשל:
VESTO.Search("טקסט") VESTO.OpenKitveiHakodesh() VESTO.OpenRegex() VESTO.Format()וכדומה.
ויש עוד אפשרות מעניינת במיוחד
מכיוון שהתוסף כבר משתמש ב־Ribbon XML ומחלק את הפעולות לכפתורים, ייתכן שאפשר לא להוסיף שום תקשורת חיצונית בכלל.
אפשר להוסיף ל-VESTO Ribbon command ייעודי, ואז לבדוק האם Word יכול להפעיל אותו באמצעות:
Application.CommandBars.ExecuteMso "שם-הפקודה"אם זה יעבוד, זה יהיה הפתרון הכי נקי:
Sub VestoSearch() Application.CommandBars.ExecuteMso "VestoSearch" End Subואז אתה נותן למאקרו קיצור מקשים דרך Word, בדיוק כפי שרצית.
לכן הייתי בודק קודם את האפשרות השלישית, ורק אם היא לא מתאימה — בונה
vesto://.היות שיש לנו את קוד המקור של VESTO, אני יכול לבדוק את
KeliKodeshRibbon.csואתKeliKodeshRibbon.xmlולראות איך הפקודות של התוסף מוגדרות כרגע, ואז לומר לך אם אפשר להפעיל אותן ישירות מ-VBA ואם לא — מה השינוי הקטן ביותר בקוד שייתן לך את היכולת הזאת.כן. בדקתי את המבנה האמיתי של VESTO בקוד, ויש כאן חדשות טובות: לא צריך להוסיף
vesto://בכלל.במקרה הזה הייתי עושה מנגנון פשוט ונקי יותר:
קיצור מקשים של Word → מאקרו VBA → פקודת VSTO חשופה → VESTO מפעיל את החיפוש.
כבר עכשיו ב־VESTO יש
contextMenu_Click, והוא יודע לקחת את הטקסט המסומן מתוך Word ולהעביר אותו ל־AppViewer.SearchFromHost(text, target).הייתי מרחיב בדיוק את המנגנון הזה.
1. שינוי ב־
KeliKodeshRibbon.csבתוך המחלקה
KeliKodeshRibbon, הוסף את הפונקציה הבאה:/// <summary> /// נקודת כניסה להפעלת חיפוש בכתבי הקודש מתוך VBA/Automation. /// לוקח את הטקסט המסומן כרגע ב-Word ומפעיל חיפוש FTS. /// </summary> public void SearchKitveiHakodeshFromVba() { try { string text = Globals.ThisAddIn.Application.Selection?.Text; if (string.IsNullOrWhiteSpace(text)) return; var appViewer = ShowKitveiHakodesh(); appViewer?.SearchFromHost(text, "fts"); } catch (Exception ex) { MessageBox.Show( ex.Message, "חיפוש בכתבי הקודש", MessageBoxButtons.OK, MessageBoxIcon.Error); } }זה למעשה ממחזר את המנגנון שכבר קיים בתוסף:
string text = Globals.ThisAddIn.Application.Selection?.Text; ... var appViewer = ShowKitveiHakodesh(); appViewer?.SearchFromHost(text, target);
2. אבל יש נקודה חשובה
VBA לא יכול פשוט לעשות:
KeliKodeshRibbon.SearchKitveiHakodeshFromVbaכי אובייקט ה־Ribbon אינו חשוף ל־VBA בצורה כזאת באופן אוטומטי.
לכן אני ממליץ לעשות COM Automation קטן.
ב־VSTO יש לנו כבר
ThisAddIn.cs, שהוא נקודת הכניסה של התוסף.במקום לחשוף את ה־Ribbon עצמו, נחשוף אובייקט קטן בשם למשל:
KleiKodeshApiעם פעולה:
SearchKitveiHakodesh()ואז VBA יוכל לדבר איתו.
3. ה־API
צור קובץ חדש:
KleiKodeshVsto/Automation/KleiKodeshApi.csעם:
using System; using System.Runtime.InteropServices; namespace KleiKodesh.Automation { [ComVisible(true)] [Guid("7D7E6F3B-8B7C-4D89-9E72-1A3C4F8B52A1")] [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface IKleiKodeshApi { void SearchKitveiHakodesh(); } [ComVisible(true)] [Guid("A3B8D6F1-2E44-4A7D-9C91-6B2E8F4D1735")] [ClassInterface(ClassInterfaceType.None)] public class KleiKodeshApi : IKleiKodeshApi { public void SearchKitveiHakodesh() { Globals.ThisAddIn.SearchKitveiHakodesh(); } } }ואז ב־
ThisAddIn.csנוסיף:public void SearchKitveiHakodesh() { try { string text = Application.Selection?.Text; if (string.IsNullOrWhiteSpace(text)) return; var appViewer = Ribbon?.ShowKitveiHakodeshForAutomation(); appViewer?.SearchFromHost(text, "fts"); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show( ex.Message, "חיפוש בכתבי הקודש", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); } }אבל כאן הייתי עושה שינוי קטן נוסף בארכיטקטורה, כדי לא להפוך את
Ribbonלתלות של ה־API.כלומר, עדיף שהפעולה עצמה תהיה ב־
ThisAddIn, ותשתמש ישירות ב־TaskPaneManager.
4. הגרסה שאני ממליץ עליה בפועל
ב־
ThisAddIn.cs:public void SearchKitveiHakodesh() { try { string text = Application.Selection?.Text; if (string.IsNullOrWhiteSpace(text)) return; var pane = TaskPaneManager.Show( () => new KitveiHakodeshLib.AppViewer { ShowPopOutButton = true }, "כתבי הקודש", 610, popOutBehavior: true); var appViewer = pane?.Control as KitveiHakodeshLib.AppViewer; appViewer?.SearchFromHost(text, "fts"); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show( ex.Message, "חיפוש בכתבי הקודש", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); } }זה משתמש באותו
TaskPaneManager.Showשבו התוסף משתמש כבר עכשיו כדי ליצור/למחזר את חלונית כתבי הקודש.
5. ה־VBA
ואז המאקרו יכול להיות:
Sub SearchInVesto() Dim Vesto As Object Set Vesto = CreateObject("KleiKodesh.Automation.KleiKodeshApi") Vesto.SearchKitveiHakodesh End Subואז:
סמן טקסט → קיצור מקשים → המאקרו → VESTO → חיפוש.
אבל יש לי הצעה אפילו טובה יותר
מכיוון שהמטרה שלך היא קיצור מקשים, הייתי בונה את ה־API מראש בצורה שתאפשר לך כמה פקודות:
public interface IKleiKodeshApi { void SearchKitveiHakodesh(); void SearchCatalog(); void OpenKitveiHakodesh(); }ואז ב־VBA:
Sub VestoSearch() Dim Vesto As Object Set Vesto = CreateObject("KleiKodesh.Automation.KleiKodeshApi") Vesto.SearchKitveiHakodesh End Subובהמשך:
Sub VestoCatalogSearch() Dim Vesto As Object Set Vesto = CreateObject("KleiKodesh.Automation.KleiKodeshApi") Vesto.SearchCatalog End Subכך תוכל להקצות קיצור מקשים נפרד לכל פעולה של VESTO, למרות ש-Word עצמו לא מאפשר לך להגדיר קיצור ישירות לכפתורי התוסף.
דבר אחד חשוב לפני שאתה משנה את הקוד
ה־
CreateObject("KleiKodesh.Automation.KleiKodeshApi")דורש שה־COM class יירשם ב־Windows. ב־VSTO זה לא תמיד קורה אוטומטית רק בגלל[ComVisible(true)].לכן לא הייתי מכניס עדיין את קוד ה־COM הזה לפרויקט ומקמפל. כדאי קודם לבדוק את
ThisAddIn.csואת קובץ הפרויקט.csproj, ובעיקר איך המתקין של KleiKodesh מתקין ורושם את ה־VSTO. המתקין נמצא בפרויקטBuild/Installer, וה־README מאשר שזה המנגנון שמתקין את תוסף ה־VSTO.
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות
