Synchroniser les 2 scrollbars des deux richtextbox

Signaler
Messages postés
12
Date d'inscription
dimanche 22 mars 2009
Statut
Membre
Dernière intervention
1 juin 2009
-
Messages postés
51
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
13 mars 2011
-
la question je pense seulement pour les experts en visual studio c++; comment Synchroniser les 2 scrollbars des deux richtextbox,
supposons qu'on a deux richtextbox comment si je scroll le premier le deux scroll automatiquement
et merci d'avance

9 réponses

Messages postés
51
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
13 mars 2011
1
Salut
Heureusement, on peut faire des applications Windows avec des RichTextBox sans avoir besoin de VC++ ;)

L'idee est la suivante :
Soit hRTB1 et hRTB2 les HWND de tes deux textBox, et hParent le HWND de la fenetre parent.

Il faut que la fenetre parent sache quand la scrollbar de hRTB1 bouge, et qu'elle envoi un message en consequence a hRTB2.

Pour que hParent soit sache que la scrollbar de hRTB1 bouge, regarde du cote de EN_VSCROLL et EN_MSGFILTER (pour la molette de la souris)

http://msdn.microsoft.com/en-us/library/bb761689(VS.85).aspx
http://msdn.microsoft.com/en-us/library/bb787974(VS.85).aspx

(Attention, il faut changer le comportement par defaut de la RTB1, en envoyant un message EM_SETEVENTMASK, lit la remarque de la page de EN_VSCROLL )

Pour que hParent bouge la scrollbar de hRTB2, va voir EM_SETSEL ou EM_SETSCROLLSEL

http://msdn.microsoft.com/en-us/library/bb761661(VS.85).aspx
http://msdn.microsoft.com/en-us/library/bb774280(VS.85).aspx

Une autre bonne lecture est la page "Using Rich Edit Controls" de MSDN. Je suis parti de cette page pour te repondre ;)

http://msdn.microsoft.com/en-us/library/bb787877(VS.85).aspx
Messages postés
12
Date d'inscription
dimanche 22 mars 2009
Statut
Membre
Dernière intervention
1 juin 2009

malheuresment j'ai pas comprends, je ne sais pas si tu peux m'ecrir un code, les deux rich sont dans la même fenètre
et merci
Messages postés
51
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
13 mars 2011
1
Bha ca serait mieux de comprendre... moi j'suis la pour t'aider, te donner des pistes (et la, c'est pas une piste mais une autoroute que je t'ai filé!)
De plus, y'a des bouts de codes a mettre un peu partout (WM_COMMAND, WM_NOTIFY, ect...) et j'ai pas envi ce soir de faire un programme complet pour te montrer comment ca marche !
Alors soit tu programmes... soit tu oublies tes RTB...
Messages postés
12
Date d'inscription
dimanche 22 mars 2009
Statut
Membre
Dernière intervention
1 juin 2009

ok merci dans tous les cas,
mais perte pour moi par ce que je connais pas les handle et les envois des messages, même j'ai pas les entendu en vc+2005
Messages postés
51
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
13 mars 2011
1
hum... t'utilises les MFC ? le DotNet ? autre chose ?
Messages postés
12
Date d'inscription
dimanche 22 mars 2009
Statut
Membre
Dernière intervention
1 juin 2009

j'utilise DotNet vc2005
Messages postés
51
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
13 mars 2011
1
Ce qui me rassure, c'est que quand je lis tes autres posts c'est que personne ne sais vraiment quelle technologie tu utilises.
Tu veux pas nous poster quelques lignes de ton code, je crois que ca sera le plus simple pour identifier ce que t'utilises. Quand je dis quelques lignes c'est plus d'une et moins de 20... par example le code de creation de tes RichEdit, ou ta fonction "main"

PS pour les autres: oui, je sais, demander du code pour ce genre de conneries, c'est moche, mais je crois que c'est la seule solution... sinon on va pas s'en sortir
Messages postés
12
Date d'inscription
dimanche 22 mars 2009
Statut
Membre
Dernière intervention
1 juin 2009

salut
et merci d'avance
je ne sais pas si c'est suffisant si on dit visual c++ 2005 dotnet framework 2.0,mais je pense et selon mes expériences largement suffisant

#pragma once


namespace scroll {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

/// <summary>
/// Summary for Form1
///
/// WARNING: If you change the name of this class, you will need to change the
/// 'Resource File Name' property for the managed resource compiler tool
/// associated with all .resx files this class depends on. Otherwise,
/// the designers will not be able to interact properly with localized
/// resources associated with this form.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Add the constructor code here
//
}

protected:
/// <summary>
/// Clean up any resources being used.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::RichTextBox^ richTextBox1;
protected:
private: System::Windows::Forms::RichTextBox^ richTextBox2;

private:
/// <summary>
/// Required designer variable.
/// </summary>
System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
void InitializeComponent(void)
{
this->richTextBox1 = (gcnew System::Windows::Forms::RichTextBox());
this->richTextBox2 = (gcnew System::Windows::Forms::RichTextBox());
this->SuspendLayout();
//
// richTextBox1
//
this->richTextBox1->Location = System::Drawing::Point(9, 34);
this->richTextBox1->Name = L"richTextBox1";
this->richTextBox1->Size = System::Drawing::Size(62, 333);
this->richTextBox1->TabIndex = 0;
this->richTextBox1->Text = L"";
//
// richTextBox2
//
this->richTextBox2->Location = System::Drawing::Point(86, 31);
this->richTextBox2->Name = L"richTextBox2";
this->richTextBox2->ScrollBars = System::Windows::Forms::RichTextBoxScrollBars::ForcedVertical;
this->richTextBox2->Size = System::Drawing::Size(352, 335);
this->richTextBox2->TabIndex = 1;
this->richTextBox2->Text = L"";
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(548, 415);
this->Controls->Add(this->richTextBox2);
this->Controls->Add(this->richTextBox1);
this->Name = L"Form1";
this->Text = L"Form1";
this->ResumeLayout(false);

}
#pragma endregion
};
}
Messages postés
51
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
13 mars 2011
1
faut croire que non ^^
Bon, je vais avoir du mal a t'aider... Le C++/CLI j'aime po ca... mais alors po du tout ! La preuve c'est qu'on comprend meme plus ce qu'on fait ! (En fait, le system de message existe toujours derriere, c'est lui qui fait vraiemnt tourner la machine, mais il est cache par la couche "managée" ... ... et du coup, on comprend plus rien a rien...)
Bref, merci quand meme d'avoir poster ton code, ca m'a servi ;)