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

C++Builder Discussion :

synchroniser deux RichEdits


Sujet :

C++Builder

  1. #1
    Membre du Club
    Inscrit en
    avril 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 55
    Points : 54
    Points
    54
    Par défaut synchroniser deux RichEdits
    Ce code en Delphi sauf erreur de ma part est censé synchroniser deux RichEdit
    Je n'ai pas été capable de le traduire en c++builder
    Je pense que pour certains d'entre nous cela ne doit pas être très compliqué, en tout cas celui qui le traduira rendra service a pas mal de personnes à commencer par moi
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    TRichEdit = class(ComCtrls.TRichEdit)
      private
        procedure WMVScroll(var Msg: TMessage); message WM_VSCROLL;
      end;
     
      TForm1 = class(TForm)
        RichEdit1: TRichEdit;
        RichEdit2: TRichEdit;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
     
    procedure TRichEdit.WMVScroll(var Msg: TMessage);
    const
      Busy: Boolean = false;
    begin
      inherited;
      if Busy then exit;
      Busy := true;
      if Self = Form1.RichEdit1 then
        Form1.RichEdit2.Perform(WM_VSCROLL, Msg.WParam, Msg.LParam)
      else
        Form1.RichEdit1.Perform(WM_VSCROLL, Msg.WParam, Msg.LParam);
      Busy := false;
    end;
     
    end.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    12 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 261
    Points : 21 665
    Points
    21 665
    Par défaut
    En même temps, c'est une méthode un peu barbare à la Delphi, ajoute un comportement à une classe héritée sans changer le nom de la classe !
    Je ne suis pas sur que C++ apprécie ce genre de bidouille !
    déjà c'est quoi ce Busy constante locale modifiable ? est-ce un équivalent du static var ? je fais du delphi depuis 10 ans, je n'aurais pas osé ça !

    Le plus propre serait de créer un nouveau composant (en Delphi, BCB peu le compiler et générer le .HPP) de l'installer dans un package !

    Tu dois pouvoir bricoler autrement, dans OnMouseWheel, tu fais un Perform EM_LINEFROMCHAR pour obternir la ligne en cours, puis tu fais un Perform EM_LINESCROLL sur l'autre RichEdit !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Inscrit en
    avril 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 55
    Points : 54
    Points
    54
    Par défaut Syncroniser deux Richedit
    Merci ShaiLeTroll
    je crois que je vais suivre tes conseils

  4. #4
    Membre du Club
    Inscrit en
    avril 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 55
    Points : 54
    Points
    54
    Par défaut Syncronisation richedite résolu
    Enfin j'ai trouvé la solution à mon problème de syncro
    tellement simple que j'ai honte, il suffit de placer plusiueurs
    RichEdit, Memo, listBox etc.
    placer les propriétés ScrollBars à ssNone
    utiliser le composant Scrollbar
    ScrollBar1->Max=RichEdit1->Lines->Count+5;
    et tous les composants défilent de façon parfaitement identique

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    12 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 261
    Points : 21 665
    Points
    21 665
    Par défaut
    Composant Scrollbar ou ScrollBox ?

    Je n'ai jamais utilisé la Scrollbar (plutôt des ScrollBox), dans le OnScroll tu effectues un Perform WM_VSCROLL sur chaque Control RichEdit ?
    un petit code pour le peuple ?

    Sur une TListBox tu cache la ScrollBar avec une API ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre habitué Avatar de Speed41
    Homme Profil pro
    Inscrit en
    novembre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : novembre 2002
    Messages : 685
    Points : 191
    Points
    191
    Par défaut
    Bonjour,

    CMax, comment prends tu en compte le fait que les lignes de ton TRichEdit ne soient pas toutes de la même taille ; Tu peux avoir plusieurs tailles de police dans un TRichEdit et donc la hauteur des lignes n'est pas identiques comme dans un TMemo ou un TListBox.

    Je suis très intéressé sur ce sujet

  7. #7
    Membre du Club
    Inscrit en
    avril 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 55
    Points : 54
    Points
    54
    Par défaut Scrollbar
    Je ne sais pas si c'est à cela que vous vous attendiez
    en tout cas voici le code testé sur 5 RichEdits
    et un Scrollbar place au centre chaque RichEdit contient
    2600 lignes de text;
    void __fastcall TForm1::ScrollBar1Scroll(TObject *Sender,
    TScrollCode ScrollCode, int &ScrollPos)
    {
    ScrollBar1->Max=RichEdit1->Lines->Count/2;
    RichEdit1->SelStart = RichEdit1->Perform(EM_LINEINDEX, ScrollBar1->Position, -0) + 0;
    RichEdit1->Perform(EM_SCROLLCARET,0,0);
    RichEdit1->Perform(EM_LINESCROLL, 0,ScrollBar1->Position);
    RichEdit1->SetFocus();
    RichEdit2->SelStart = RichEdit2->Perform(EM_LINEINDEX, ScrollBar1->Position, -0) + 0;
    RichEdit2->Perform(EM_SCROLLCARET, 0,0);
    RichEdit2->Perform(EM_LINESCROLL, 0,ScrollBar1->Position);
    RichEdit3->SelStart = RichEdit3->Perform(EM_LINEINDEX, ScrollBar1->Position, -0) + 0;
    RichEdit3->Perform(EM_SCROLLCARET, 0,0);
    RichEdit3->Perform(EM_LINESCROLL, 0,ScrollBar1->Position);
    RichEdit4->SelStart = RichEdit4->Perform(EM_LINEINDEX, ScrollBar1->Position, -0) + 0;
    RichEdit4->Perform(EM_SCROLLCARET, 0,0);
    RichEdit4->Perform(EM_LINESCROLL, 0,ScrollBar1->Position);
    RichEdit5->SelStart = RichEdit5->Perform(EM_LINEINDEX, ScrollBar1->Position, -0) + 0;
    RichEdit5->Perform(EM_SCROLLCARET, 0,0);
    RichEdit5->Perform(EM_LINESCROLL, 0,ScrollBar1->Position);

    }
    //---------------------------------------------------------------------------
    le défilement se fait de façon quasi parfaite
    ce code ne sert qu'au défilement synchronisé
    des lignes de texte
    cependant le placement du scrollbar par rapport au texte
    est possible

  8. #8
    Membre du Club
    Inscrit en
    avril 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 55
    Points : 54
    Points
    54
    Par défaut Polices et Richedit
    Citation Envoyé par Speed41 Voir le message
    Bonjour,

    CMax, comment prends tu en compte le fait que les lignes de ton TRichEdit ne soient pas toutes de la même taille ; Tu peux avoir plusieurs tailles de police dans un TRichEdit et donc la hauteur des lignes n'est pas identiques comme dans un TMemo ou un TListBox.

    Je suis très intéressé sur ce sujet
    justement l'avantage c'est qu'on peut faire en sorte que les polices soient toutes les mêmes.
    Pour que cela puisse servir a quelque chose si l'utilisateur change les polices sur un Richedit elles deviennent les mêmes partout tu dois aussi gérer les lignes vides
    avec de Richedit->lines->Add() et Richedit->Seltex="";
    pour éviter les retour de chariots
    j'ai pas mal galéré mais je suis arrivé à ce que voulais

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

Discussions similaires

  1. Synchronisation deux Bases Mysql
    Par eric_89 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 14/12/2006, 16h57
  2. Comment synchroniser deux bases de données
    Par apoingsfermes dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 15/11/2006, 23h41
  3. Synchroniser deux zones de listes en VBA
    Par gaelj dans le forum Access
    Réponses: 3
    Dernier message: 03/09/2006, 20h55
  4. Synchroniser deux listes
    Par Mahefasoa dans le forum Access
    Réponses: 4
    Dernier message: 02/08/2006, 11h31
  5. Synchroniser deux CPU (deux algos)
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 28/04/2006, 15h46

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