IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

TRichEdit property SpellChecking Delphi 11


Sujet :

Composants VCL Delphi

  1. #1
    Membre actif Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 313
    Points : 273
    Points
    273
    Par défaut TRichEdit property SpellChecking Delphi 11
    Bonjour à tous,

    https://docwiki.embarcadero.com/Libr....SpellChecking

    Es t’il possible d'afficher toute les fautes orthographe du TRichEdit.

    Le problème est que lorsque l'option SpellChecking est activée, elle ne met pas à jour automatiquement le RichEdit, il n'affiche donc pas toute les fautes orthographe.

    En revanche, il se déclenche bien lors de la saisie de texte.

    Nom : Capture.PNG
Affichages : 297
Taille : 17,4 Ko

    Cela fonctionne aussi lors d'un Ctrl+C & Ctrl+V, il affiche toute les fautes orthographe.

    J'ai testé la méthode Repaint() en vain sans succès.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.CkSpellCheckingClick(Sender: TObject);
    begin
      if CkSpellChecking.Checked then
        RichEdit.SpellChecking := True
      else
        RichEdit.SpellChecking := False;
     
      RichEdit.Repaint;
    end;
    J'ai cherché dans l'unité Vcl.ComCtrls ou ce trouve la (property SpellChecking) qui elle renvoi vers cette procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    procedure TCustomRichEdit.SetSpellChecking(Value: Boolean);
    begin
      if FSpellChecking <> Value then
      begin
        FSpellChecking := Value;
        if FSpellChecking then
          DoEnableSpellChecking
        else
          RecreateWnd;
      end;
    end;
     
    procedure TCustomRichEdit.DoEnableSpellChecking;
    begin
      if HandleAllocated then
      begin
        // Ref: https://docs.microsoft.com/en-us/archive/blogs/murrays/richedit-spell-checking-autocorrection-and-prediction
        SendMessage(Handle, EM_SETLANGOPTIONS, 0, IMF_SPELLCHECKING);
        SendMessage(Handle, EM_SETEDITSTYLE,
          SES_USECTF or SES_CTFALLOWEMBED or SES_CTFALLOWSMARTTAG or SES_CTFALLOWPROOFING,
          SES_USECTF or SES_CTFALLOWEMBED or SES_CTFALLOWSMARTTAG or SES_CTFALLOWPROOFING);
      end;
    end;
    Cette procédure permet activé le SpellChecking du TRichEdit.

    Mes impossible de mettre à jour le TRichEdit.

    Auriez vous un idée ?

    Merci

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Bonjour.
    C'est un composant Windows, la solution se trouve probablement dans leur doc.

  3. #3
    Membre actif Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 313
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par pprem Voir le message
    Bonjour.
    C'est un composant Windows, la solution se trouve probablement dans leur doc.
    Bonjour pprem,

    J'ai rechercher sur la doc de microsoft du coté "getlangoptions".
    en vain impossible de trouvé la solution

    https://learn.microsoft.com/fr-fr/wi...getlangoptions

  4. #4
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Après quelques recherches, pareil, je ne vois rien qui permettrait de déclencher la correction car il semble que ce soit le clavier qui gère ça et non le contrôle en saisie.

    Tente peut-être d'ajouter un espace puis le supprimer en début de texte par l'envoi de touches (SPACE puis BACKSPACE) par messages Windows au composant. C'est moche, très moche même, mais ça doit pouvoir faire le job.

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 435
    Points : 5 848
    Points
    5 848
    Par défaut
    salut

    j'aurais deja pris ces options là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SendMessage(Handle, EM_SETLANGOPTIONS, 0,IMF_SPELLCHECKING or IMF_TKBPREDICTION or IMF_TKBAUTOCORRECTION
    petite question as tu essayé de lui dire d'appliquer ceci apres le changement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SendMessage(Handle,EM_SETEVENTMASK, 0, ENM_CHANGE);

  6. #6
    Membre actif Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 313
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par pprem Voir le message
    Après quelques recherches, pareil, je ne vois rien qui permettrait de déclencher la correction car il semble que ce soit le clavier qui gère ça et non le contrôle en saisie.

    Tente peut-être d'ajouter un espace puis le supprimer en début de texte par l'envoi de touches (SPACE puis BACKSPACE) par messages Windows au composant. C'est moche, très moche même, mais ça doit pouvoir faire le job.
    Bonjour pprem,

    Effectivement cela ce déclenche bien par le clavier.

    C'est vraiment dommage d'avoir développé un correcteur d'orthographe et de ne pas pouvoir mettre à jour l’intégralité du contrôle de saisie.

    Je pense que la fonctionnalité SpellChecking est capsulé avec ceci : Vérifier l’orthographe en cours de frappe.

    https://support.microsoft.com/fr-fr/...6-061163c8d01a

  7. #7
    Membre actif Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 313
    Points : 273
    Points
    273
    Par défaut
    J'ai trouvé une petite parade pour mettre à jour l’intégralité du RichEdit, Ce n'est pas très glamour mais ça fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    procedure TForm1.CkSpellCheckingClick(Sender: TObject);
    begin
      if CkSpellChecking.Checked then
      begin
        with RichEdit do
        begin
          Lines.BeginUpdate;
          SpellChecking := True;
          SelectAll;
          CutToClipboard;
          SetFocus;
          keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
          keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);
          keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);
          keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
          Lines.EndUpdate;
        end;
      end
      else
        RichEdit.SpellChecking := False;
    end;

  8. #8
    Membre actif Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 313
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par XeGregory Voir le message
    J'ai trouvé une petite parade pour mettre à jour l’intégralité du RichEdit, Ce n'est pas très glamour mais ça fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    procedure TForm1.CkSpellCheckingClick(Sender: TObject);
    begin
      if CkSpellChecking.Checked then
      begin
        with RichEdit do
        begin
          Lines.BeginUpdate;
          SpellChecking := True;
          SelectAll;
          CutToClipboard;
          SetFocus;
          keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
          keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);
          keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);
          keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
          Lines.EndUpdate;
        end;
      end
      else
        RichEdit.SpellChecking := False;
    end;
    Ou alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    procedure TForm1.CkSpellCheckingClick(Sender: TObject);
    begin
      if CkSpellChecking.Checked then
      begin
        with RichEdit do
        begin
          Lines.BeginUpdate;
          SpellChecking := True;
          SelectAll;
          CopyToClipboard;
          SendMessage(RichEdit.handle, WM_KEYDOWN, VK_DELETE, 0);
          PasteFromClipboard;
          Lines.EndUpdate;
        end;
      end
      else
        RichEdit.SpellChecking := False;
    end;

  9. #9
    Membre actif Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 313
    Points : 273
    Points
    273
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    procedure UpDateSpellChecking(RichEdit : TRichEdit);
    var
      Stream: TMemoryStream;
    begin
      Stream := TMemoryStream.Create;
     
      with RichEdit do
      begin
        Lines.BeginUpdate;
        SelectAll;
        Lines.SaveToStream(Stream);
        SendMessage(RichEdit.Handle, WM_KEYDOWN, VK_DELETE, 0);
        Stream.Position := 0;
        Lines.LoadFromStream(Stream);
        FreeAndNil(Stream);
        Lines.EndUpdate;
      end;
    end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/09/2014, 21h41
  2. sens de Property command?Delphi
    Par mima_mine dans le forum Langage
    Réponses: 5
    Dernier message: 20/05/2010, 17h47
  3. Delphi 7 - TRichEdit et barre de défilement
    Par Nicolas Coolman dans le forum Débuter
    Réponses: 2
    Dernier message: 30/08/2007, 11h32
  4. Delphi et Lien dans TRichEdit
    Par kheldoun ahmed dans le forum Delphi
    Réponses: 2
    Dernier message: 01/04/2007, 10h50
  5. Réponses: 2
    Dernier message: 09/01/2007, 21h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo