ABA


"שאלה למומחי C++ וMFC... שינוי כיוון טקסט של CEdit."
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10252 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10252
Dotan  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.10.03
2849 הודעות, 2 פידבק
   23:35   03.02.11   
אל הפורום  
  שאלה למומחי C++ וMFC... שינוי כיוון טקסט של CEdit.  
 
   ערכתי לאחרונה בתאריך 03.02.11 בשעה 23:58 בברכה, Dotan
 
שלום לכולם

במהלך היומיים האחרונים שברתי את הראש בניסיון לפתור משהו, ולא הצלחתי אפילו להתקרב לפתרון :/

יש לי פקד CEdit רגיל, שהוגדר בDesinger להגדרה של ES_RIGHT (או WS_EX_RIGHT, זה לא משנה כ"כ) ככה שהוא מיושר לימין והטקסט נכתב מימין לשמאל.

במהלך ריצת התכנית אני מעוניין לשנות את כיוון הכתיבה לשמאל, כלומר שינוי של הStyle ל-ES_LEFT (או WS_EX_LEFT) - זה לא משפיע על כלום והפקד לא משתנה.
ניסיתי עם SetWindowLong / ModifySyle ואפילו לשלוח הודעה לפקד עם SendMessage.
בסופו של דבר אחרי קריאה ארוכה מצאתי בMSDN רשומה על זה - לא ניתן לשנות את הSTYLE הזה בזמן ריצה!

אני מחפש פתרון יצירתי לבעיה הזו, עלו 2 פתרונות אצלי:
1. למחוק את הפקד ולצייר אותו מחדש עם הגדרה של ES_LEFT - זה יפעל אבל לא בא בחשבון כי זה בעייתי בתכנית שלי.
2. לשלוח הודעות של Ctrl+Shift ובכך לשנות את כיון הכתיבה.
3. להוסיף מאפיין של ES_MULTILINE, ואז ניתן לשנות את הכיוון ע"י עריכה של הSTYLE, אבל אני צריך CEdit שהוא רק שורה אחת, לא רוצה MultiLine - ולא ניתן לבטל MULTILINE בזמן ריצה!


הפתרון הראשון יורד מהפרק והפתרון השני הוא האופציה האחרונה שלי לגמרי - זה ממש פתרון לא נחמד :/

יש למישהו אולי רעיון / הברקות / פתרונות?

תודה רבה .


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  פתרון זמני: Dotan  04.02.11 00:11 1
     זה די יצירתי, אבל לפי דעתי Net_Boy  04.02.11 01:13 2
         כן מסכים עם זה... כשאין ברירה אין ברירה חח Dotan  04.02.11 15:49 3
             למה לא למחוק את הפקד ולצייר אותו מחדש? akoka2 06.02.11 19:14 4

       
Dotan  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.10.03
2849 הודעות, 2 פידבק
   00:11   04.02.11   
אל הפורום  
  1. פתרון זמני:  
בתגובה להודעה מספר 0
 
   ה-CEdit מוגדר כ-ES_MULTILINE ו-ES_RIGHT.

שינוי הכיוון:



CEdit* pEdit = reinterpret_cast<CEdit*>(GetDlgItem(IDC_EDIT1));
pEdit->ModifyStyle(ES_RIGHT, ES_LEFT);
pEdit->Invalidate();
pEdit->UpdateWindow();

וכדי למנוע אפשרות של MULTILINE באמת, אני דורס את הלחיצה על ENTER ואז לא ניתן לרדת שורה והוא לא מתפקד כ-MULTILINE באמת:



BOOL CaligntestDlg::PreTranslateMessage(MSG *pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
CEdit* pEdit = reinterpret_cast<CEdit*>(CWnd::FromHandle(pMsg->hwnd));

if (pEdit->GetDlgCtrlID() == IDC_EDIT1 && pMsg->wParam == VK_RETURN)
{
return TRUE;
}
}

return FALSE;
}


אם יש למישהו רעיון טוב יותר הוא מוזמן לשתף


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   01:13   04.02.11   
אל הפורום  
  2. זה די יצירתי, אבל לפי דעתי  
בתגובה להודעה מספר 1
 
   אם תעתיק טקסט ממקום ראשון (טקסט עם כמה שורות)
ותדביק אותו בפקד שלך אתה תקבל יכולות של MULTI LINE

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dotan  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.10.03
2849 הודעות, 2 פידבק
   15:49   04.02.11   
אל הפורום  
  3. כן מסכים עם זה... כשאין ברירה אין ברירה חח  
בתגובה להודעה מספר 2
 
   אני אבדוק, אני חושב שיש דרך להגביל את השורות, ואז אני אגביל לשורה אחת ואולי זה יפתור את זה לגמרי :}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka2

   19:14   06.02.11   
אל הפורום  
  4. למה לא למחוק את הפקד ולצייר אותו מחדש?  
בתגובה להודעה מספר 3
 
   אם יש איזה תוכן שאתה רוצה לשמור עליו, פשוט תעתיק אותו לפקד החדש רק עם כיוון חדש:|


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net