Zoom in RichEdit verhindern, statt dessen Scrollup oder Scrolldown



  • Hallo,

    wie kann ich verhindern das in RichEdit wen ich eine Mausetaste gedrückt halte und dann das Mausrad bewege das es dann Zoomt?
    Dann sollte es statt es Zoomt nach unten oder nach oben Scrollen.

    Ich hoffe es kann mir einer Helfen.



  • Eigentlich ist es so gewollt, dass der User dann ein- oder auszoomen kann.
    Scrollen sollte man bereits können, OHNE eine Maustaste zu drücken.

    Wenn du eine BCB-Version hast, in der die TRichEdit-Kompo die Events OnMouseWheel bereitstellt, kannst du dort den Maustasten-State ermitteln
    und bei gedrückter linker Maustaste dein Scroll-Ereignis auslösen.

    In älteren BCB-Vers. muss man sich dieses Event aus der Message WM_MOUSEWHEEL bzw. CM_MOUSEWHEEL selbst erstellen.



  • Hi,

    sry das ich jetzt erst Antworte, habe mich jetzt erst mal wieder damit befast.

    ich habe die BCB-Ver. 6 und habe schon mal was ausprobiert geht aber nicht.

    void __fastcall TMDIChild::RichEdit1MouseWheel(TObject *Sender,
          TShiftState Shift, int WheelDelta, TPoint &MousePos, bool &Handled)
    {
    if (GetKeyState(VK_LBUTTON) < 0)
     RichEdit1->Perform(EM_SCROLLCARET, WheelDelta, 0);
    
    }
    //---------------------------------------------------------------------------
    


  • EM_SCROLLCARET ist nicht hierfür geeignet, denn du willst ja den Inhalt des RichEdit
    scrollen.

    Dein Ansatz mit GetKeyState funktioniert, allerdings bekommst du den Status bereits mit dem
    Funktionsaufruf geliefert:

    if (Shift.Contains(ssLeft)) 
       // oder auch 
       GetKeyState(VK_LBUTTON)
    

    na was solls, bleiben wir bei deiner Variante.

    Der im Funktionsaufruf enthaltene Wert für WheelDelta kann je nach Wheelrichtung positv oder negativ sein; die eigentliche
    Grösse ist egal, da wir nach grösser oder kleiner Null auswerten.

    Beispiel:

    void __fastcall TMDIChild::RichEdit1MouseWheel(TObject *Sender,
          TShiftState Shift, int WheelDelta, TPoint &MousePos, bool &Handled)
    {
       if (GetKeyState(VK_LBUTTON) < 0)  {
          // zeilenweise scrollen
          if (WheelDelta > 0)
             SendMessage(RichEdit1->Handle, WM_VSCROLL,  MAKELONG( SB_LINEUP	, NULL), NULL);
          else
             SendMessage(RichEdit1->Handle, WM_VSCROLL,  MAKELONG( SB_LINEDOWN	, NULL), NULL);
          // Wichtig:
          // Handled auf true setzen, sonst wird weiterhin gezoomt.
          Handled = true;
       }
    }
    


  • Danke Dir 😉


Anmelden zum Antworten