Avatar billede nejmann Nybegynder
02. juni 2002 - 17:49 Der er 17 kommentarer og
2 løsninger

Gå til en bestemt funktion ved tryk på en bestemt knap

Som overskriften siger, så har jeg et program kørende som skal afbrydes ved tryk på en bestemt knap f.eks s. og gå videre til en bestemt funktion, hvordan går jeg det?

Håber I kan tyde hvad jeg mener ;)

På forhånd tak
Avatar billede kamikaze Nybegynder
03. juni 2002 - 10:58 #1
Det kommer an på så meget...Hvilken platform og hvilken type projekt????
Avatar billede kamikaze Nybegynder
03. juni 2002 - 10:58 #2
Og hvilken kompiler bruger du?
Avatar billede Xelot Nybegynder
03. juni 2002 - 11:01 #3
f.eks.

int ch;
{
printf("Skrift1");
ch=getch();
if(ch=='s');
to();
}

void to()
{
printf("Skrift2");
getch();
}
Avatar billede Xelot Nybegynder
03. juni 2002 - 11:04 #4
Vi prøver lige igen.. :)


int ch;
{
printf("Skrift1");
ch=getch();
if(ch=='s')
to();
}

void to()
{
printf("Skrift2");
getch();
}
Avatar billede kamikaze Nybegynder
03. juni 2002 - 11:15 #5
znup.dk >> Ja, i konsol projekter, hvis programmøren beslutter at brugeren skal trykke på en tast nu. Hvis brugeren altid skal have mulighed for at trykke fx. ESCAPE for at quitte programmet kan du ikke bruge getch(); :-)
Avatar billede kamikaze Nybegynder
03. juni 2002 - 11:18 #6
I windos programmering kan man bruge den event der hedder WM_KEYDOWN i WinProc'en. Fx:
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_KEYDOWN:
            if (wParam == VK_ESCAPE) SendMessage(hwnd, WM_CLOSE, 0, 0);
        break;
        case WM_CLOSE:
            DestroyWindow(hwnd);
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}
Avatar billede kamikaze Nybegynder
03. juni 2002 - 11:20 #7
Derfor er det ret vigtigt hvilken type projekt det er, hvilken platform og hvilket IDE det udvikles på...
Avatar billede Xelot Nybegynder
03. juni 2002 - 11:22 #8
Kamikaze>> Ja det er jo s'følig rigtigt.. men det står der jo ikke ordret i opgaven.. så nu har personen to valgmuligheder :)
Avatar billede kamikaze Nybegynder
03. juni 2002 - 12:51 #9
Yeps...Og der kan komme flere :-)
Avatar billede nejmann Nybegynder
03. juni 2002 - 14:08 #10
Jeg bruger visual C++ og projektet er et win32 console applikation
Avatar billede nejmann Nybegynder
03. juni 2002 - 14:22 #11
Det skulle gerne foregå således at når programmet kører og brugeren trykker på en bestemt knap skal programmet forlade det sted hvor det nu er kommet til og starte en bestemt funktion.
Avatar billede kamikaze Nybegynder
03. juni 2002 - 16:24 #12
Ja, hvis du skriver:

char ch;
while ((ch = getch()) != '\n')
{
  if (ch == 'a' || ch == 'A') cout << "Der er trykket A" << endl;
  if (ch == 'b' || ch =0 'B') cout << "Der er trykket B" << endl;
}

skal brugeren trykke ENTER for at komme ud af loopet. Hvis han/hun trykker A eller B sker der noget (det kunne være kald til en funktion).
Avatar billede kamikaze Nybegynder
03. juni 2002 - 16:26 #13
Jeg tror det du leder efter, er at fange brugerens tryk uden at spørge ham/hende (dvs. interrupt/event på taste-tryk). Er det rigtigt???

I så fald skal du ikke lave en konsol applikation, men en Win32 applikation. Så vidt jeg ved kan man ikke fange interrupts fra konsol mode... (måske i assembler???)
Avatar billede nejmann Nybegynder
03. juni 2002 - 16:33 #14
Jep, jeg vil fange brugerens tryk uden at spørge ham/hende (dvs. interrupt/event på taste-tryk). Kan det ikke lade sig gøre i en win32 console applikation?
Avatar billede kamikaze Nybegynder
03. juni 2002 - 20:00 #15
Takker for points :-)

Hvis du laver en Win32 Application kan det lade sig gøre som beskrevet ovenfor. Sig til hvis du har brug for hjælp til et windows-skelet :-)
Avatar billede nejmann Nybegynder
03. juni 2002 - 20:06 #16
Det var så lidt, og tak for hjælpen ;)
Avatar billede nejmann Nybegynder
03. juni 2002 - 20:25 #17
hmmm findes der ikke en anden funktion end getch() da denne jo står og venter på en char og dermed kommer programmet ikke videre... programmet skulle gerne køre indtil der bliver trykket på knappen.
Avatar billede nejmann Nybegynder
06. juni 2002 - 21:10 #18
Hvis der er nogle der skulle være interesseret så endte jeg med at finde denne løsning:

if(kbhit())
        if (getch() == '\x1B')
        {
            Her kan man så selv vælge hvad der skal ske                }
Avatar billede kamikaze Nybegynder
06. juni 2002 - 23:24 #19
Ok, spændende.... Kan svagt huske kbhit(), men havde helt glemt den fandtes :-)
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