משיב מוביל
מחפש פקד ספציפי או במידה ואין לבנות כזה

שאלה
-
היי לכולם,
אני מחפש פקד ספציפי ביותר.
נניח שיש לי צורה של מלבן ואני רוצה לחלק אותו ושכל חלק ממנו יקבל באחוזים גודל מהמלבן הגדול.
לדוגמה יש לי במסך:
[ מלבן ראשי ]
ואני רוצה לגרור קווים (Dividers) שמחלקים את המלבן באופן הבא:
[ 1 | 2 | 3 | 4 ]
אני רוצה שהפקד ישמור לי את כמות החלקים שחילקתי ואת הגודל של כל חלק כדי שאוכל לחשב את אורכם מהמלבן הראשי.
מה הדרך הכי פשוטה ליישם את זה ?
לדעתי פקד מוכן , אבל אם לא אז אשמח לקבל טיפים.
תודה רבה
תשובות
-
1. CANVAS זה בעברית זה הבד עליו ציירים מצייירים. ואכן ב WPF CANVAS הוא האלמנט עליו שמים את האובייקטים של הציורים כמו מלבנים. זה כאילו הבד לציור שלך
http://www.wpftutorial.net/Canvas.html2. במקור אני לא התכוונתי לעשות שימוש במחלקה מוכנה אלא להגדיר מחלקה מאפס. מחלקה של מלבן + מחלקה של אוסף מלבנים כפי שתארתי בקצרה מעל. הבסיס של מחלקה של מלבן זה בסך הכל 2 מאפיינים : רוחב + גובה. אחרי שהבסיס מוכן מתחילים להוסיף את המתודות לפעולות שונות. בכל מקרה מכיוון שאתה עובד עם WPF ויש לך כבר צורות מובנות במחלקה הגרפית הרי שזה יותר נכון לעבוד עם אובייקט מלבן מובנה. עדיין יהיה עלייך לפתח מחלקה של האוסף של כל המלבנים. ואז תוכל להכניס את כל המתודות למחלקה זו.
כל איבר במחלקה של האוסף מלבנים צריך להיות מורכב ממלבן מרכזי + קווים התוחמים אותו (אם בחרת בשיטה של להקיף כל מלבן באובייקט אחר של קו ואת הקו לאפשר לגרור)
* הבעיה שאתה מציג לא טובה כבעיה התחלתית של מי שנמצא בשלבי בסיס של מודל האובייקטים אני חושב. אתה תאלץ לפנות לפורום יותר מדי וזה יגרור שתאבד את התרומה שהתרגול ייתן לך. השיטה של טבלה ממש קלה ליישום גם למפתח בשלבי הלימוד.
אתה מוזמן כמובן להמשיך בשיטה של מלבנים בציור :-) אבל מומלץ שתנסה תמיד לנסח שאלות כמה שיותר ספציות ותנסה להגיע לפתרונות קודם
** חשוב לציין שאני מפתח WEB ואין לי נסיון עם WPF, כך שאולי יש דברים מובנים שאני לא מכיר. לפתח מאפס אני תמיד יכול כמובן :-)
- נערך על-ידי pituachMVP, Moderator יום רביעי 23 נובמבר 2011 07:30
- הוצע כתשובה על-ידי pituachMVP, Moderator יום רביעי 23 נובמבר 2011 07:30
- סומן כתשובה על-ידי Eran Sharvit יום שלישי 22 אוקטובר 2013 10:35
כל התגובות
-
פקד מוכן = מישהו פיתח את הפקד
אם אתה רוצה לפתח אשמח לעזור :-)
מוכן זה אצל השכנים אני תמיד אומר אבל דווקאה בפורומים של מייקרוסופט אין מגבלה כמו בקהילות אחרות שאני לוקח חלק אז אולי מישהו יכין או ימצא לך משהו מוכןבעקרון הדרך הראשונה שקופצת לי לראש היא שימוש פשוט בטבלה אם כל מה שאתה צריך זה מלבן מחולק. אפשרות אחרת תתבסס על מחלקה של מלבן ומחלקה של רשימה של מלבנים שתיגזר ממחלקת list<> למשל או מחלקה כלשהי מתאימה של אוסף. למחלקה זו יהיו מתודות/מאפיינים נוספים כמו מיקום של כל איבר ברשימה ואיבר ראשי (המלבן הראשי בתוכו אתה מגדיר מלבנים אחרים)... או משהו כזה
זה רק בזריקה מהירה וללא אפיון של הנושא
** יש ב JQuery סקריפט שלם למה שאתה רוצה ב JS עבור אפליקציה אינטרנטית. אפשר לשלב את זה לכל טבלה למשל וליצור ממנה בכמה שורות טבלה שניתן לשנות את הגודל של התאים בה על ידי גרירה פשוטה עם העכבר. יש לי אפליקציה שפיתחתי ב JS נקי ללא סביבות פיתוח מוכנות שעושה דבר דומה (האפליקציה היא למעשה מערכת דומה למערכת ה SSMS לניהול שרת ה SQL אבל באפליקציה אינטרנטית והכל שם פועל כמו ה SSMS עם גרירות וכו'... האפליקציה פותחה עבור חברת תוכנה שממשיכה את העבודה עם המערכת הבסיסית שאני העברתי להם)
-
קודם כל וואו! כתבתי את ההודעה כאן כמפלט אחרון לא באמת חשבתי שאני אקבל תשובה ועוד כלכך מפורטת ומושקעת תודה רבה :) הצבעתי לך כמועיל.
עכשיו לנושא הפקד.
חשבתי עליו שוב והגעתי למסקנה שאתה הגעת שבעצם אני צריך ליצור מלבנים בשכבות. כל מלבן מקבל גודל מסויים שאני גורר ומותח נניח מצד שמאל תמיד.
הרעיון הוא שאני אוכל להוסיף מלבנים כראות עיני ללא הגבלה ושפעולת הגרירה תהיה רציפה. (רציפה זתומרת דילוגים של 1 בגרירה). נניח שכל מלבן חדש יווצר בצבע אחר.
כל פעם שאני אלחץ בקצה השמאלי אני אוכל לגרור מלבן חדש ולקבוע את הגודל שלו. ברגע שמלבן מסויים מכסה מלבן אחר אני אמחק את המלבן המוסתר. כמו כן אם אני מצמצם מלבן לגודל 0 הוא יעלם.
השימוש בטבלה פחות קורץ לי כי אני עוד אצטרך להוסיף לזה אפשרות לסמן מלבן ולהזין את הגודל שלו ידנית - בשביל אנשים שכישורי הגרירה שלהם לא בשיא והם צריכים דיוק.
השימוש הוא ב - Winforms ולא כאפליקציית אינטרנט אלא כפקד שמוטמע ב Form של תוכנית מוכנה.
ובגלל ההגבלה שהפקד חייב לרשת מ- Windows.Forms (הגבלה בתוכנה) פקדים מסוג WPF לא יעזרו גם כן.
שוב תודה!
-
תודה על התודה
לא הבנתי מה השאלה שנשארה לך
לא מצאתי שום שאלה בהודעה האחרונה אלא רק תיאור של המצב (תיאור שהיה אמור להגיע בהודעה המקורית)* טבלה הרבה יותר קל לממש ואני עדיין חושב שבאפיון המקוצר הנוכחי שיש לנו הייתי בוחר בדרך זו (ניתן לממש למשל עם אובייקט גריד ב WPF).
* בפיתוח WIN FORM השיטה השנייה שהצגתי יכולה להיות יעילה מאוד בעיקר אם אכן מדובר באלמנטים של Canvas עליו מציירים צורות כמו שמבצעים ב WPF. עתה מה שנשאר לך זה לכתוב את כל המתודות והאירועים השונים שיכולים להיות. את אלו רושמים כמובן בתוך המחלקה של האוסף של המלבנים עליו דיברתי בהודעה מעל.
* שים לב שאתה צריך גרירה של קצה המלבן ולא של המלבן עצמו ולכן או שמוצאים את מיקום העכבר ומוודאים שהוא בקצה המלבן בצורה דינמית או שמסביב למלבן בונים אלמנטים כמו קוו היוצרים את מסגרת המלבן והגרירה נעשית למעשה על אובייקטים אלו... דבר זה זהה במקרה של טבלה, למשל אצלי באפליקציה הוספתי לכל תא בטבלה בצורה דינמית (בעזרת JS לאחר טעינת העמוד) תמונה קטנה ברוחב פיקסל מצד ימין של התא וככה הגרירה נעשית בעצם על התמונה. לפי הגרירה של התמונה עדכנתי את הגודל של התאים בטבלה תוך כדי הגרירה על ידי מציאת מיקום העכבר בכל שינוי של המיקום שלו (האירוע שבחרתי לעבוד איתו הוא שינוי מיקום העכבר)
- נערך על-ידי pituachMVP, Moderator יום רביעי 16 נובמבר 2011 06:34
-
האמת שנשארו לי המון שאלות, יש לי את הרעיון אבל חסר לי את הידע כדי ליישם אותו כי אני די חדש בתחום. למעשה אני חדש כלכך שאפילו לשאול את השאלות הנכונות קשה לי :)
עכשיו יש לי שאלות:
1. מה אלו אלמנטים של Canvas ? במה זה שונה מהמחלקה Graphics ?
2. הבנתי שאני צריך מחלקה של מלבן , מחלקה של מלבן עם Resize ומחלקה של ידית גרירה (ואולי עוד כמה בהמשך)
השאלה היא האם אני צריך לרשת ממלבן ב Graphics ולהוסיף לו תכונות שלי ורק לצייר כל פעם שיש שינוי במסך ?
או שלעשות מלבן בסיסי כי אין שימוש בכל המתודות שמקבלים ממלבן שנורש. ?
תודה
-
1. CANVAS זה בעברית זה הבד עליו ציירים מצייירים. ואכן ב WPF CANVAS הוא האלמנט עליו שמים את האובייקטים של הציורים כמו מלבנים. זה כאילו הבד לציור שלך
http://www.wpftutorial.net/Canvas.html2. במקור אני לא התכוונתי לעשות שימוש במחלקה מוכנה אלא להגדיר מחלקה מאפס. מחלקה של מלבן + מחלקה של אוסף מלבנים כפי שתארתי בקצרה מעל. הבסיס של מחלקה של מלבן זה בסך הכל 2 מאפיינים : רוחב + גובה. אחרי שהבסיס מוכן מתחילים להוסיף את המתודות לפעולות שונות. בכל מקרה מכיוון שאתה עובד עם WPF ויש לך כבר צורות מובנות במחלקה הגרפית הרי שזה יותר נכון לעבוד עם אובייקט מלבן מובנה. עדיין יהיה עלייך לפתח מחלקה של האוסף של כל המלבנים. ואז תוכל להכניס את כל המתודות למחלקה זו.
כל איבר במחלקה של האוסף מלבנים צריך להיות מורכב ממלבן מרכזי + קווים התוחמים אותו (אם בחרת בשיטה של להקיף כל מלבן באובייקט אחר של קו ואת הקו לאפשר לגרור)
* הבעיה שאתה מציג לא טובה כבעיה התחלתית של מי שנמצא בשלבי בסיס של מודל האובייקטים אני חושב. אתה תאלץ לפנות לפורום יותר מדי וזה יגרור שתאבד את התרומה שהתרגול ייתן לך. השיטה של טבלה ממש קלה ליישום גם למפתח בשלבי הלימוד.
אתה מוזמן כמובן להמשיך בשיטה של מלבנים בציור :-) אבל מומלץ שתנסה תמיד לנסח שאלות כמה שיותר ספציות ותנסה להגיע לפתרונות קודם
** חשוב לציין שאני מפתח WEB ואין לי נסיון עם WPF, כך שאולי יש דברים מובנים שאני לא מכיר. לפתח מאפס אני תמיד יכול כמובן :-)
- נערך על-ידי pituachMVP, Moderator יום רביעי 23 נובמבר 2011 07:30
- הוצע כתשובה על-ידי pituachMVP, Moderator יום רביעי 23 נובמבר 2011 07:30
- סומן כתשובה על-ידי Eran Sharvit יום שלישי 22 אוקטובר 2013 10:35