[win 32] DLL - Problème de coloration d'une sélection seule dans un RichEdit [Résolu]

Signaler
Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
-
Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
-
Bonsoir à tous,


J'ai une petite question désespérée, avant d'aller dormir.

Je code une DLL qui est censée faire un hook sur un éditeur de script
(mIRC) et colorer le RichEdit. Tout se passe bien, or lorsque je colore
tout le texte (SCF_ALL) c'est okay, mais quand je ne colore qu'une
sélection (SCF_SELECTION), le SendMessage(); me retourne 0.

Je ne peux pas donner tout le code de la DLL, mais voici la fonction
qui parcourt toutes les lignes du RichEdit, et colore une ligne en
rouge si le mot "alias" est contenu, sinon en bleu :

void Color_All() {

    //Masquage des sélections

    SendMessage(edit,EM_HIDESELECTION,1,0);

    //Début

    CHARRANGE select,curSelect;

    CHARFORMAT cFormat;

    ZeroMemory(&cFormat,sizeof(CHARFORMAT));

    cFormat.cbSize=sizeof(CHARFORMAT);

    cFormat.dwMask=CFM_COLOR|CFM_BOLD;

    cFormat.dwEffects=0;//CFE_BOLD;

    //Récupération de la sélection

    SendMessage(edit,EM_EXGETSEL,0,(LPARAM)&curSelect);

    //Boucle ligne par ligne

    int lines=SendMessage(edit,EM_GETLINECOUNT,0,0);

    for(int line=0;line < lines;line++) {

        //Récupération du texte de la ligne

        int place=SendMessage(edit,EM_LINEINDEX,line,0);

        char buffa[9999]="9999";

        SendMessage(edit,EM_GETLINE,line,(LPARAM)buffa);

        select.cpMin=place;

        place+=strlen(buffa);

        select.cpMax=place;

        SendMessage(edit,EM_EXSETSEL,0,(LPARAM)&select);

        //Alias

        if (strstr(buffa,"alias") != NULL) cFormat.crTextColor=RGB(255,0,0);

        //Autre

        else cFormat.crTextColor=RGB(100,100,250);

        SendMessage(edit,EM_SETCHARFORMAT,SCF_ALL,(LPARAM)&cFormat);

    }

    //Remise en place de la sélection courante

    SendMessage(edit,EM_EXSETSEL,0,(LPARAM)&curSelect);

    //Réaffichage des sélections

    SendMessage(edit,EM_HIDESELECTION,0,0);

}


C'est le SendMessage(); en rouge qui pose problème, il fonctionne bien avec SCF_ALL mais pas avec SCF_SELECTION.

Je note que chaque ligne est bien sélectionnée, et ce morceau de code fonctionne très bien dans mes autres programmes.

Mon code étant donc (selon moi) correct, je me suis dit que peut-être
le RichEdit avait été paramétré avec une option incompatible avec ce
que j'essaye de faire.

Je voulais simplement avoir vos idées concernant ce problème, moi ayant mal au crane

Merci d'avance.

Cordialement, uaip.

1 réponse

Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
1
Trouvé.

Cordialement, uaip.