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.phpso 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.