שאלה קצת של מתחילים ...

gilad_no

New member
שאלה קצת של מתחילים ...

נניח שיצרתי דיאלוג (MFC,API - לא משנה איך). הדיאלוג מכיל רק פקד אחד - RICHEDIT. בתוך הודעת WM_INITDIALOG אני טוען לפקד את הטקסט הראשוני (הפקד הוא READONLY). הבעיה היא ברגע שאני מפעיל את הדיאלוג: חלונות אוטומטית מסמנת את כל הטקסט ועושה INVERT לצבעים (וזה יוצא מאוד מכוער). ניסיתי להגדיר שאין שום טקסט מסומן, ניסיתי להוסיף ES_NOHIDESEL להגדרות הפקד, אבל שום דבר לא עזר. יש למישהו רעיון???
 
הממממ

אולי להגדיר את הפקד כ-NO TAB ? או אולי להעביר את הפוקוס לפקד אחר ב-INITDIALOG?
 

gilad_no

New member
רגע, עוד לא נפתרה הבעיה!

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

לא להילחץ
קודם כל, באיזה מהם "צדקתי"? זאת היתה בעיה של NO TAB או של פוקוס? עוד רעיון: אולי תנסה להעביר את הפוקוס ל-DIALOG או שתנסה לשלוח EM_SETSEL לפקד, כאשר אתה wParam=-1.
 

voguemaster

New member
מעניין

חשבתי שיש מנגנון ב-MFC בשביל הדברים האלה, כמו אולי לקרוא למתודה כלשהי כמו setSelection (ולהעביר לה 0 או משו..). מעניין שאפילו ב-MFC צריך להכיר היטב הודעות..
 
האמת היא

שיש מתודת SETSEL ב-RICHEDITCTRL, אבל מנסיוני המר עם הפקד הזה, לפעמים עדיף לשלוח הודעה בעזרת POSTMESSAGE, מאשר לקרוא למתודה הנ"ל, אשר מיושמת באמצעות SENDMESSAGE. וזאת בגלל שאיתחול של RICHEDIT נעשה באופן קצת שונה מרוב הפקדים, ואולי יש עוד הודעות ב-MESSAGE QUEUE, אשר חייבות להתבצע לפני SETSEL.
 
אוקיי בדקתי

ואכן קריאה ל:
m_ctl.PostMessage(EM_SETSEL,-1,0);​
פועלת, ואילו קריאה ל:
m_ctl.SetSel(-1,0);​
לא עובדת. "אמרתי לכם!"
 

gilad_no

New member
לגבי הראשון,

זאת הייתה בעיה של TAB. לגבי השני, לא עוזר. ניסיתי גם לשחק עם הSELECTION, אבל לא נפתרה הבעיה.
 
למעלה