Index: /trunk/SophyaPI/PI/pidrawer.cc
===================================================================
--- /trunk/SophyaPI/PI/pidrawer.cc	(revision 1878)
+++ /trunk/SophyaPI/PI/pidrawer.cc	(revision 1879)
@@ -534,4 +534,9 @@
 
 void
+PIDrawer::GetClickInfo(string& info, double x, double y)
+{
+}
+
+void
 PIDrawer::DrawHTicks(PIGraphicUC* g, double y, double tickUp, double tickDown, double xBeg, double xStep)
 {
Index: /trunk/SophyaPI/PI/pidrawer.h
===================================================================
--- /trunk/SophyaPI/PI/pidrawer.h	(revision 1878)
+++ /trunk/SophyaPI/PI/pidrawer.h	(revision 1879)
@@ -39,6 +39,10 @@
     
   virtual void       Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax); 
-   
+
+//  Rajoute l'information concernant la zone xmin,ymin ---> xmax,ymax au string info
   virtual void       AppendTextInfo(string& info, double xmin, double ymin, double xmax, double ymax);
+
+// Renvoie une information liee au drawer pour une position x,y 
+  virtual void       GetClickInfo(string& info, double x, double y); 
 
   virtual void       Refresh();      // Recalcule les limites et reaffiche
@@ -93,5 +97,4 @@
   virtual void       ShowControlWindow(PIBaseWdgGen* wdg);
   inline  bool       HasSpecificControlWindow() const { return mFgSpecContWind; }
-
 
 //   Methode permettant de decoder des options a partir de chaines
Index: /trunk/SophyaPI/PI/piscdrawwdg.cc
===================================================================
--- /trunk/SophyaPI/PI/piscdrawwdg.cc	(revision 1878)
+++ /trunk/SophyaPI/PI/piscdrawwdg.cc	(revision 1879)
@@ -80,4 +80,7 @@
   mPSz[0] = mPSz[1] = 0.;
   mFormatOpt[0] = "%-g"; mFormatOpt[1] = "%-g";
+  mFgDeltaPos = false;
+  mPosForDelta[0] = mPosForDelta[1] = 0.;
+  mPosForDeltaX = mPosForDeltaY = 0;
 
   mBDrw = new PIElDrawer;
@@ -125,4 +128,6 @@
   if      (key == 'R' || key == 'r')  Refresh(); // rafraichir l'affichage
   else if (key == 'M' || key == 'm') mFgReticule = !mFgReticule; // reticule de mesure 
+  else if (key == 'K' || key == 'k') UpdatePosForDeltaMarker(true);
+  else if (key == 'L' || key == 'l') UpdatePosForDeltaMarker(false);
   else if (key == 'V' || key == 'v') RequestSelection();  // Pour coller (copier/coller)  
   else if (key == 'Z' || key == 'z') { mBDrw->ElDelAll();  Refresh(); } // Pour supprimer tous les signes 
@@ -232,13 +237,23 @@
 // Gestion affichage coordonnees du point 
 
-string   
-PIScDrawWdg::GetClickText(double x, double y) 
+void
+PIScDrawWdg::GetClickText(string& info, double x, double y) 
 // Donne le texte a afficher pour position x,y  
 {
   char buff[128];
-  string format  = "X= ";  format += mFormatOpt[0].c_str();
-         format += " Y= "; format += mFormatOpt[1].c_str();
-  sprintf(buff,format.c_str(),x,y);
-  return((string)buff);
+  PIDrawer*  dr = GetActiveDrawer();
+  strcpy(buff,"X= ");  sprintf(buff+3, mFormatOpt[0].c_str(), x);
+  info += buff;
+  strcpy(buff," Y= ");  sprintf(buff+4, mFormatOpt[1].c_str(), y);
+  if (mFgDeltaPos) 
+    sprintf(buff+strlen(buff)," (dX=%g, dY=%g)", 
+	    x-mPosForDelta[0], y-mPosForDelta[1]); 
+  info += buff;
+
+  if (dr) {
+    info += "  ";  info += dr->Name();
+    dr->GetClickInfo(info, x, y);
+  }
+  return;
 }
 
@@ -400,5 +415,6 @@
   mPPos[0] = dx;  mPPos[1] = dy; 
   
-  string ctxt =  GetClickText(dx, dy);
+  string ctxt;
+  GetClickText(ctxt, dx, dy);
 //DEBUG  char buff[32];    sprintf(buff, " %d:%d",xp,yp); ctxt += buff;
   if (mTxw)
@@ -409,4 +425,34 @@
 
 }
+
+void
+PIScDrawWdg::UpdatePosForDeltaMarker(bool fg)
+{
+  if (!mFgDeltaPos && !fg ) return;
+  cForCol = mWGrC->GetForeground();
+  cGOmod  = mWGrC->GetGOMode();
+  cLatt = mWGrC->GetLineAtt();
+  mWGrC->SelForeground(PI_Magenta);
+  mWGrC->SelGOMode(PI_GOXOR);
+  mWGrC->SelLine(PI_NormalLine);
+  if (mFgDeltaPos) {
+    mWGrC->DrawLine(mPosForDeltaX-7, mPosForDeltaY, mPosForDeltaX+7, mPosForDeltaY);
+    mWGrC->DrawLine(mPosForDeltaX, mPosForDeltaY-7, mPosForDeltaX, mPosForDeltaY+7);
+  }
+  mFgDeltaPos = fg;
+  if (mFgDeltaPos) {
+    mPosForDelta[0] = mPPos[0];  
+    mPosForDelta[1] = mPPos[1];  
+    mPosForDeltaX = mCPosX;
+    mPosForDeltaY = mCPosY;
+    mWGrC->DrawLine(mPosForDeltaX-7, mPosForDeltaY, mPosForDeltaX+7, mPosForDeltaY);
+    mWGrC->DrawLine(mPosForDeltaX, mPosForDeltaY-7, mPosForDeltaX, mPosForDeltaY+7);
+  }
+  mWGrC->SelForeground(cForCol);
+  mWGrC->SelGOMode(cGOmod);
+  mWGrC->SelLine(cLatt);
+  return;
+}
+
 
 // .............................
Index: /trunk/SophyaPI/PI/piscdrawwdg.h
===================================================================
--- /trunk/SophyaPI/PI/piscdrawwdg.h	(revision 1878)
+++ /trunk/SophyaPI/PI/piscdrawwdg.h	(revision 1879)
@@ -61,5 +61,5 @@
     
 
-  virtual string     GetClickText(double x, double y); // Donne le texte a afficher pour position x,y
+  virtual void       GetClickText(string& info, double x, double y); // Donne le texte a afficher pour position x,y
   virtual void	     ActivateSpecializedControls();   // Pour activer des controles specifiques
 
@@ -91,4 +91,7 @@
   double mPSz[2];         // Taille courant du pave info 
   int mCPosX, mCPosY;     // Position click souris X,Y
+  bool mFgDeltaPos;       // affichage de l'ecart par rapport a la position memorisee
+  double mPosForDelta[2];     // Position memorisee - Pour affichage d'ecart
+  int mPosForDeltaX, mPosForDeltaY; // Position click memorisee - Pour affichage d'ecart
   bool mFgReticule;       // Controle l'affiche d'une réticule (Bouton-1)
   string mFormatOpt[2];   // Format optimal d'impression des textes
@@ -112,4 +115,5 @@
 private:
   void  UpdateText(int xp, int yp);
+  void  UpdatePosForDeltaMarker(bool fg);
 };
 
Index: /trunk/SophyaPI/PI/piversion.h
===================================================================
--- /trunk/SophyaPI/PI/piversion.h	(revision 1878)
+++ /trunk/SophyaPI/PI/piversion.h	(revision 1879)
@@ -2,5 +2,5 @@
 #define PIVERSION_H_SEEN
 
-#define PI_VERSIONNUMBER  3.35
+#define PI_VERSIONNUMBER  3.40
 
 #endif
