Avatar billede tigertool Nybegynder
23. september 2004 - 14:56 Der er 3 kommentarer og
1 løsning

Fejl i min kode?

Jeg er ved at lave noget med nogle hotkeys i C++. Indtil videre har jeg følgende kode:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
        THandle Win_Q = GlobalAddAtom("Min_Win-Q_HotKey");
        THandle Win_T = GlobalAddAtom("Min_Win-T_HotKey");
        RegisterHotKey(Application->Handle, WIN_Q, MOD_WIN, 'Q');

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
        UnregisterHotKey(Application->Handle, WIN_Q);
        UnregisterHotKey(Application->Handle, WIN_T);
        GlobalDeleteAtom(WIN_Q);
        GlobalDeleteAtom(WIN_T);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WMHOTKEY(TMessage& Msg)
{
        if (Msg.WParamLo = WIN_Q)
        {
                Label1->Caption = "Q-tasten";
        }
}
-------------------------------------------------------------------------------------

Det er noget kode jeg har "oversat" fra noget Delphi kode jeg fandt her på E! - mit problem er bare at koden ikke virker. Altså der kan fint compileres, men Label1 ændre ikke Caption når jeg trykker WIN-tast Q.

Jeg benytter Borland C++Builder 6 på en Windows XP platform.

Min kode kan hentes her: http://gknet.dk/eksperten/Hotkey-source.rar

Er der nogen der kan hjælpe mig videre herfra?
Avatar billede thomashove Nybegynder
23. september 2004 - 15:50 #1
1. Double-click the OnCreate event of your form:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    RegisterHotKey(Handle, 0x0000, MOD_WIN, 'Q');
}

2. Double-click the OnClose event of your form:

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
    UnregisterHotKey(Handle, 0x0000);
}

3. Insert in your header file:

private: // User declarations
    void __fastcall HotKeys(TWMHotKey &);

    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_HOTKEY, TWMHotKey, HotKeys);
    END_MESSAGE_MAP(TForm);

4. Finally, add to your code:

void __fastcall TForm1::HotKeys(TWMHotKey &Message)
{
    if(Message.HotKey == 0x0000)
    {
        // Ctrl + F8 has been pressed
        if(IsIconic(Application->Handle))
            Application->Restore();

        Label1->Caption = "WIN-Q";
    }
}
Avatar billede thomashove Nybegynder
23. september 2004 - 15:53 #2
testet i Borland C++ Builder 5 - håber det også kører i v.6
Avatar billede tigertool Nybegynder
23. september 2004 - 16:39 #3
Cool.. Jeg takker. Det virker helt fint i v6 :)

Ved du også om man kan lave F5 til en hotkey (uden kombination med f.eks. ctrl) ?
Avatar billede tigertool Nybegynder
23. september 2004 - 17:12 #4
thomashove -> Hvad nu hvis jeg f.eks. vil have 10 hotkeys? Hvordan gøres dette så?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester