VK_HOME wird als $ ausgegeben



  • Hallo,

    du suchst den Vituellen Keycode. Hier ist eine Liste.
    VK_HOME hat den Hexwert 0x24.
    Den Tastendruck simulierst du mit keybd_event oder einer passenden SendMessage.

    mfg
    kpeter



  • danke, die liste kannte ich schon, das keybd_event aber nicht, damit kann ich dann auch endlich meine keys per hotkey schreiben, danke.
    vorher hab ich versucht die 0x24 bzw. VK_HOME dem Key von OnKeyDown zu zuweisen, dann hat der aber immer nur $ geschrieben.
    das einzige problem ist noch, dass der bcb2010 keine simulierten tabs mag. der geht statdesen immer in die nächste zeile.
    eigentlich wollte ich die standard tastefolge zum einrücken pos1,tab, down auf eine taste legen, sodass ich nur diese drücken muss um die ein tab an derersten position einzufügen und die nächste zeile anzuwählen. im text editor klappt das wunderbar, im bcb2010 aber nicht.



  • Hallo,

    wie du den HotKey programmierst, ist leider nicht ersichtlich.

    Habe im BCB2009 mal versucht, deine angedachte Tastenfolge zu simulieren. Vielleicht klappts in der Version 2010 ja auch (warum eigentlich nicht?).

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       Memo1->SetFocus();
       Memo1->TabStop = false;
       // zum Zeilenanfang
       keybd_event(VK_HOME, 0x24, KEYEVENTF_EXTENDEDKEY | 0, 0 );
       keybd_event(VK_HOME, 0x24, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
       // Message abarbeiten lassen
       Application->ProcessMessages();
    
       // Tab setzen
       SendMessage( Memo1->Handle, WM_CHAR, (WPARAM)(TCHAR)VK_TAB, NULL);
    
       // zum Zeilenende
       keybd_event(VK_END, 0x23, KEYEVENTF_EXTENDEDKEY | 0, 0 );
       keybd_event(VK_END, 0x23, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
       Application->ProcessMessages();
    
       // Return
       SendMessage( Memo1->Handle, WM_CHAR, (WPARAM)(TCHAR)VK_RETURN, NULL);
       Memo1->TabStop = true;
    }
    

    Habe festgestellt, dass Tab setzen schneller erfolgt als VK_HOME, deshalb ProcessMessages.

    edit:
    Sehe gerade, dass nur in die nächste Zeile gesprungen werden soll, kein Return, demnach würde für Zeilen 14 bis 20 stehen

    // nächste Zeile anspringen
       keybd_event(VK_DOWN, 0x28, KEYEVENTF_EXTENDEDKEY | 0, 0 );
       keybd_event(VK_DOWN, 0x28, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
    

    mfg
    kpeter



  • den hotkey setze ich damit:

    Systemweiten Hotkey (Taste) definieren:

    *.cpp:

    void __fastcall TForm1::FormDestroy(TObject *Sender)
    {

    UnregisterHotKey(Handle, HotKeyIdentifier_uint); //HotKey löschen
    GlobalDeleteAtom(HotKeyIdentifier_uint); //HotKey Identifier löschen

    }

    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {

    HotKeyIdentifier_uint = GlobalAddAtom("shift+pos1"); //beschreibung des hotkeys
    RegisterHotKey(Handle, HotKeyIdentifier_uint, MOD_CONTROL, VK_HOME); //Hotkey registrieren.

    // statt 0 kann auch MOD_ALT, MOD_CONTROL oder MOD_SHIFT stehen, falls Taste zusammen mit "Shift", "Strg" oder "Alt" gedrückt werden soll

    }

    //---------------------------------------------------------------------------
    void __fastcall TForm1::WMHotKey(TMessage &Msg)
    {

    TForm::Dispatch(&Msg);
    keybd_event(VK_HOME,0,0,0);
    keybd_event(VK_TAB,0,0,0);
    keybd_event(VK_DOWN,0,0,0);

    }

    *.h:

    class TForm1 : public TForm
    {

    __published: // Von der IDE verwaltete Komponenten
    void __fastcall FormDestroy(TObject *Sender);
    void __fastcall FormCreate(TObject Sender);
    private: // Anwender-Deklarationen
    void __fastcall WMHotKey(TMessage &Msg);
    unsigned int HotKeyIdentifier_uint;
    public: // Anwender-Deklarationen
    __fastcall TForm1(TComponent
    Owner);

    BEGIN_MESSAGE_MAP

    MESSAGE_HANDLER(WM_HOTKEY, TMessage, WMHotKey)

    END_MESSAGE_MAP(TForm)

    };
    gefunden auf http://fatman98.fa.funpic.de/builder_tricks.php

    so kann ich mit shift+pos1 die drei tasten aufrufen. das klappt im texteditor, aber nicht im bcb2010



  • blub1991 schrieb:

    das klappt im texteditor, aber nicht im bcb2010

    Sprichst du von der IDE des BCB 2010?



  • ja tu ich, die idee zu dem hotkey hatte ich ja, um das code-einrücken zu vereinfachen.



  • Da reicht doch ein Tastaturmakro?



  • theoretisch ja, ich interessiere mich aber auch für die möglichkeit, etwas mit den hotkeys zu machen. außerdem habe ich keine befriedigende Lösung für makros gefunden.



  • Zumal man das Makro nicht speichern kann, wie es scheint.

    Möglicherweise ist ein Keyboard-Hook eher angebracht.



  • kpeter schrieb:

    Zumal man das Makro nicht speichern kann, wie es scheint.

    Ich glaube, GExperts kann das.


Anmelden zum Antworten