VK_INSERT und RichEdit



  • Hallo,

    ich habe folgenes Problem. Wie kann ich die VK_INSERT Taste im RichEdit Überwachen. Da er macht was er will z.B. wen ich mein TextEditor im Überschreib Modus beende und dann wieder starte dann steht da 'Überschreiben' aber im RichEdit ist aber 'Einfügen' oder wen mein TextEditor nicht den Focus hat und Drücke dann 'Einfg' taste und wechsel dann wieder zu mein TextEditor, dann verwechselt er wieder die Tasten was dann aber im RichEdit nicht passt.

    void __fastcall TEditor::FormShow(TObject *Sender)
    {
    if (GetKeyState(VK_INSERT) == -128)
       StatusBar1->Panels->Items[2]->Text = " Einfügen";
    else
       StatusBar1->Panels->Items[2]->Text = " Überschreiben";
    
    }
    
    void __fastcall TEditor::RichEdit1KeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
    if (Key == VK_INSERT) {
     BOOL bShift	= GetKeyState(VK_SHIFT) < 0;
     BOOL bCtrl	= GetKeyState(VK_CONTROL) < 0;
    
     if (!bShift && !bCtrl) {
      if (GetKeyState(VK_INSERT) == -128)
       StatusBar1->Panels->Items[2]->Text = " Einfügen";
      else
       StatusBar1->Panels->Items[2]->Text = " Überschreiben";
    
     }
    }
    
    }
    

    Ich habe mal was ausprobiert und zwar
    RichEdit1->Lines->Add(GetKeyState(VK_INSERT));

    Da hat er mir immer -128 und -127 angezeigt.
    Nur er wechselt immer die Zahlen wen ich die Taste drücke.

    Ich habe den C++ Builder 6 von Borland

    Ich hoffe es kann mir einer helfen

    MfG
    Rave



  • So gehts ganz gut:

    void __fastcall TForm1::RichEdit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
    {
       String OVR = "Überschreiben";
       String INS = "Einfügen";
       BYTE cBuf[256];
       GetKeyboardState( cBuf );
       if ( cBuf[ VK_INSERT ] & 0x80 )
          StatusBar1->Panels->Items[0]->Text = (StatusBar1->Panels->Items[0]->Text == OVR) ? INS : OVR;
    }
    


  • Danke geht wirklich so ganz gut


Anmelden zum Antworten