Page 1 of 1

[request] MFC+CEdit+TAB_KEY pressed

Posted: 01 Apr 2012, 16:57
by rilley
Buna,

Referitor la acest topic: http://www.codexpert.ro/forum/viewtopic.php?f=30&t=1816


Am reusit sa integrez clasa derivata, si am reusit sa primesc apel la apasarea tastei tab

void CDEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags){
CprobDlg *pdlg = (CprobDlg *)theApp.m_pMainWnd; // legatura inapoi
switch(nChar){
case VK_TAB:
//(CDialog *)GetParentOwner()->;
pdlg->mEditList.SetFocus();
pdlg->mEditList.PostMessageA(13,13,13);
//pdlg->mEditList.SetWindowTextA("uu");
break;
default:
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
}


Cum as putea sa reusesc cand apas tasta TAB, sa trimita un TAB spre textul care exista, adica sa fie acel spatiu oferit de TAB


Multumesc

Re: [request] MFC+CEdit+TAB_KEY pressed

Posted: 01 Apr 2012, 19:18
by Viorel
Încearcă asta:

Code: Select all


case VK_TAB:
    ReplaceSel(_T("\t"), TRUE);
    break;

Pentru a trata şi tasta <Enter>, e suficientă setarea proprietăţii „Want Return” în editorul de resurse.

Re: [request] MFC+CEdit+TAB_KEY pressed

Posted: 01 Apr 2012, 20:28
by Ovidiu Cucu
Tab-urile sunt suportate numai in edit-urile multi-line (si pentru astea nu trebuie sa faci toate acele giumuslucuri pe OnChar).
In cele single-line, daca inserezi un '\t' iti va afisa doar un patratel/carcalac la fel ca pentru alte caractere neprintabile.
Pentru lamurire, vezi CEdit::SetTabStops.

Re: [request] MFC+CEdit+TAB_KEY pressed

Posted: 01 Apr 2012, 22:28
by rilley
Am reusit asa:

void CDEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags){

CprobDlg *pdlg = (CprobDlg *)theApp.m_pMainWnd; // legatura inapoi
char sztext[5] ;



switch(nChar){
case VK_TAB:
pdlg->mEditList.SetFocus();
sztext[0] = '\t';
sztext[1] = '\0';
pdlg->mEditList.SendMessage(EM_SETSEL , -1,-1 ) ;
pdlg->mEditList.SendMessage(EM_REPLACESEL,true,(LPARAM)&sztext);
break;

case VK_RETURN:
pdlg->mEditList.SetFocus();
sztext[0] = '\n';
sztext[1] = '\0';
pdlg->mEditList.SendMessage(EM_SETSEL , -1,-1 ) ;
pdlg->mEditList.SendMessage(EM_REPLACESEL,true,(LPARAM)&sztext);
break;


default:
CEdit::OnChar(nChar, nRepCnt, nFlags);
}


}

dar enter nu functioneaza cum ar trebui!!!

Re: [request] MFC+CEdit+TAB_KEY pressed

Posted: 02 Apr 2012, 19:33
by Ovidiu Cucu
Ce rost are "legatura inapoi"? "this" nu e OK?

In fine, sa incerc s-o lamuresc.
NU are sens sa inserezi tu '\t', '\r', '\n' pe handlerul lui WM_CHAR, intr-un control edit.

Cum am zis mai devreme...
  1. daca editul este single-line atunci iti va afisa un simbol reprezentand "caracter neprintabil".
  2. daca edit-ul este multi-line (are stilul ES_MULTILINE), atunci este suficient sa intoarca DLGC_WANTALLKEYS ca raspuns la mesajul WM_GETDLGCODE; mai departe se ocupa controlul intern, sa insereze TAB si respectiv sa treaca la linie noua.
Astea fiind zise, cineva ar putea intreba ce rost mai are tip-ul de aici: http://www.codexpert.ro/forum/viewtopic.php?f=30&t=1816 ?
In unele cazuri are, de exemplu daca am un "in-place edit" folosit pentru editarea unui grid sau unei liste stil report, ca sa "prind" TAB, ENTER si sageti pentru navigare intre celule.