כיצד להשוות ערך range.Font.Color לצבע הקסדצימלי ב-VSTO?
-
מישהו יודע איך להשוות את הערך של range.Font.Color ב-VSTO לערך צבע הקסדצימלי?
למרות כל הניסיונות שלי, לא הצלחתי לעשות זאת בהצלחה.
אני מנסה להמיר את ערך ההקס שאני מקבל מה-XML של המסמך ב-Word לערך שמתאים לזה שאני מקבל מהפקודה:
range.Font.Color
אשמח לעזרה או כיוון לפתרון. -
פוסט זה נמחק!
-
זה מה שניסיתי:
bool MatchColor(string hexColor, int decimalColor) { string toHex = decimalColor.ToString("X6"); string adjustedHex = toHex.Substring(4, 2) + toHex.Substring(2, 2) + toHex.Substring(0, 2); return hexColor == adjustedHex ; }
הממצאים:
hexColor "#ED7D31" string decimalColor -721354753 int toHex "D500FFFF" string adjustedHex "FF00D5" string
-
פוסט זה נמחק!
-
@pcinfogmach כאשר המספר הוא חיובי אז זה כמו ש @dovid כתב,
כאשר המספר הוא שלילי זה מייצג צבע מתוך ערכת הנושא
עיין כאן הסבר מלא עם דוגמאות קוד
https://www.wordarticles.com/Articles/Colours/2007.php -
-
@yossiz
וואו! תודה רבה.
להלן תקציר תוכן הכתבה:
(אפשר לעשות דוקטורט בוורד רק מהנושא הזה)
בכתבה מוצג קוד לחישוב דינאמי של הערכים השונים של גווני ערכת הנושא (בערכים דצימליים המומרים ל-hex מיוחד לוורד).
בנוסף, מופיע קוד לקבלת ערכי ה-hex הקלאסיים של צבעי ערכת הנושאהעיקרון של הקודים הללו מוסבר בתת-כתבה, והוא קצר וברור.
כמו כן, מוצג קוד המדמה את הגוונים ב-hex באמצעות HSL. מדובר בקוד מעט מורכב, ולא בהכרח חיוני — שכן בדיאלוג של Word יש רק ערכים סטטיים מסוימים. הדרך היחידה לייצר גוונים אחרים היא באמצעות הקוד שבכתבה, שרוב המשתמשים כלל אינם מכירים או מתעניינים בו.
כמו"כ אין קוד המחשב כיצד הדיאלוג ב-Word מפיק את הגוונים ועבור אלו צבעים. למעשה, קיימים שלושה סוגי חישוב גוונים בדיאלוג: רקע, טקסט והדגשה. ואפשר לעשות זאת בצורה סטטית. -
@pcinfogmach כתב בכיצד להשוות ערך range.Font.Color לצבע הקסדצימלי ב-VSTO?:
בכתבה מוצג קוד לחישוב דינאמי של הערכים השונים של גווני ערכת הנושא (בערכים דצימליים המומרים ל-hex מיוחד לוורד).
מצו"ב הקוד מתורגם ל-C# בדגש דווקא על בהירות והבנה (במחיר זניח של יעילות).
using System; using Microsoft.Office.Interop.Word; public class ThemeColorsHelperBase { // Color code components private readonly string _hexPrefix = "0x"; // Prefix used for hexadecimal strings private readonly string _themeColorFlag = "D"; // Identifier for theme color private readonly string _zeroByte = "00"; // Unused byte in the color code private readonly string _maxValue = "FF"; // Used when no tint/shade is applied /// <summary> /// Generates an int representation of a theme color with its tint or shade. /// </summary> /// <param name="themeColorIndex">Theme color index (e.g., Accent1, Text1)</param> /// <param name="tintAndShade">accepts percantage double (0.50, 0.25 etc.); positive (tint/lighten) or negative (shade/darken).</param> /// <returns></returns> public long GetThemeColor(WdThemeColorIndex themeColorIndex, double brightness) { string hex = GenerateThemeColorHex(themeColorIndex, brightness); return Convert.ToInt64(hex, 16); } private string GenerateThemeColorHex(WdThemeColorIndex themeColorIndex, double brightness) { string themeColorHex = ((int)themeColorIndex).ToString("X"); string tintHex = brightness >= 0 ? ((int)((1 - brightness) * 0xFF)).ToString("X2") : _maxValue; string shadeHex = brightness < 0 ? ((int)((1 + brightness) * 0xFF)).ToString("X2") : _maxValue; string fullHex = _hexPrefix + _themeColorFlag + themeColorHex + _zeroByte + tintHex + shadeHex; return fullHex; } }