/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Hvordan "aflæser jeg tasten F1?"
Fra : Flare


Dato : 06-06-02 19:47

Fx ville jeg gerne gøre følgende

-------
char valg;
valg = getch();

if (valg == 'F1 TASTEN')
gør noget;

Tak på forhånd
Anders



 
 
Kent Friis (06-06-2002)
Kommentar
Fra : Kent Friis


Dato : 06-06-02 19:54

Den Thu, 6 Jun 2002 20:46:56 +0200 skrev Flare:
>Fx ville jeg gerne gøre følgende
>
>-------
>char valg;
>valg = getch();
>
>if (valg == 'F1 TASTEN')
> gør noget;

noget i stil med:

#include <curses.h>
....
if(valg == KEY_F(1)) ...

Mvh
Kent
--
Demokrati er lige som den 29. februar - begge dele forekommer
en gang hver fjerde år.

Daniel Blankensteine~ (06-06-2002)
Kommentar
Fra : Daniel Blankensteine~


Dato : 06-06-02 20:06

"Kent Friis" <leeloo@phreaker.net> wrote in message
news:adob3l$ru6$1@sunsite.dk...
> Den Thu, 6 Jun 2002 20:46:56 +0200 skrev Flare:
> >Fx ville jeg gerne gøre følgende
> >
> >-------
> >char valg;
> >valg = getch();
> >
> >if (valg == 'F1 TASTEN')
> > gør noget;
>
> noget i stil med:
>
> #include <curses.h>
> ...
> if(valg == KEY_F(1)) ...

F1 har værdien 3B, så kan man ikke gøre noget udfra det?

mvh
db



Kent Friis (06-06-2002)
Kommentar
Fra : Kent Friis


Dato : 06-06-02 20:16

Den Thu, 6 Jun 2002 21:05:32 +0200 skrev Daniel Blankensteiner:
>"Kent Friis" <leeloo@phreaker.net> wrote in message
>news:adob3l$ru6$1@sunsite.dk...
>> Den Thu, 6 Jun 2002 20:46:56 +0200 skrev Flare:
>> >Fx ville jeg gerne gøre følgende
>> >
>> >-------
>> >char valg;
>> >valg = getch();
>> >
>> >if (valg == 'F1 TASTEN')
>> > gør noget;
>>
>> noget i stil med:
>>
>> #include <curses.h>
>> ...
>> if(valg == KEY_F(1)) ...
>
>F1 har værdien 3B, så kan man ikke gøre noget udfra det?

Her står den da defineret til:

#define KEY_F0 0410 /* Function keys. Space for 64 */
#define KEY_F(n) (KEY_F0+(n)) /* Value of function key n */

Altså, F1 = 0411

Mvh
Kent
--
IE is the only thing capable of making Netscape look good
- D. Spider in comp.os.linux.advocacy

Daniel Blankensteine~ (06-06-2002)
Kommentar
Fra : Daniel Blankensteine~


Dato : 06-06-02 20:52

"Kent Friis" <leeloo@phreaker.net> wrote in message
news:adocdq$2uk$1@sunsite.dk...
> Den Thu, 6 Jun 2002 21:05:32 +0200 skrev Daniel Blankensteiner:
> >F1 har værdien 3B, så kan man ikke gøre noget udfra det?
>
> Her står den da defineret til:
>
> #define KEY_F0 0410 /* Function keys. Space for
64 */
> #define KEY_F(n) (KEY_F0+(n)) /* Value of function key n */
>
> Altså, F1 = 0411

Underligt, men F1 er = 3B, jeg er 100% sikker.

Jeg er ved at skrive C++ programmer igen nu, efter en "lang" pause. Så
jeg kan ikke huske hvordan man tjekker om en char er = en hex værdi? Du
kunne jo lave char'en om til int og hex'en om til en int, men der må
være en lettere måde.

mvh
db



Flare (06-06-2002)
Kommentar
Fra : Flare


Dato : 06-06-02 21:02

Det er nok bare mig der ikke helt forstår det men jeg synes der er lidt
modstridene meninger. Men ok... hvordan aflæser jeg så 3B eller 0411

Det her virker i hvert fald ikke:
if (valg == '3B') NIX
if(valg == 3B ) NIX
if (valg == 0411) NIX
if (valg == '0411') NIX

Hvordan??? lol
Mvh
Anders



Søren Badstue (05-06-2002)
Kommentar
Fra : Søren Badstue


Dato : 05-06-02 20:16

Daniel Blankensteiner <db@traceroute.dk> skrev i
news:adobpq$1fi$1@sunsite.dk
> > if(valg == KEY_F(1)) ...
>
> F1 har værdien 3B, så kan man ikke gøre noget udfra det?
>

Det ser rigtigt ud. Jeg bruger altid denne side til at tjekke
keyboard-værdier. Den er super:

http://panda.cs.ndsu.nodak.edu/~achapwes/PICmicro/keyboard/scancodes1.html

--
Mvh
Søren
www.vallensbaek-sejlklub.dk




Flare (06-06-2002)
Kommentar
Fra : Flare


Dato : 06-06-02 20:36

> #include <curses.h>

Kanon..Men hvordan får jeg fat i denne header? Jeg har ms vc++ 6.0 (win32)
og den kender ikke den header fil der. Heller ikke uden .h

Pft
ANders



Kent Friis (06-06-2002)
Kommentar
Fra : Kent Friis


Dato : 06-06-02 21:36

Den Thu, 6 Jun 2002 21:35:47 +0200 skrev Flare:
>> #include <curses.h>
>
>Kanon..Men hvordan får jeg fat i denne header? Jeg har ms vc++ 6.0 (win32)
>og den kender ikke den header fil der. Heller ikke uden .h

Jeg tror ikke lige du kan få curses til windows.

Mvh
Kent
--
If I wanted a blue screen, I would type "xsetroot -solid blue"
- not D:\WINNT\SETUP

Bertel Lund Hansen (06-06-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 06-06-02 22:04

Kent Friis skrev:

>Jeg tror ikke lige du kan få curses til windows.

Hvis man kan få conio.h, kan man selv lave en rutine der tjekker
for de udvidede taster. De sender nemlig to koder, 0 og en mere.
Med følgende program kan man aflæse de nødvendige talkoder:

#include <conio.h>

int main () {
   int ch;

   do {
      ch=getch();
      cout << ch << endl;
   } while (ch!=27);

   return 0;
}

og følgende funktion returnerer specielle koder for udvidede
taster:

int getCh () {
   int ch;
   if (ch=getch()) return ch;
   return 5256+getch();
}

--
Bertel
Min mailadresse, nospam@lundhansen.dk, er midlertidigt ude af drift.
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Byrial Jensen (07-06-2002)
Kommentar
Fra : Byrial Jensen


Dato : 07-06-02 02:41

Flare <dct_flare@hotmail.com> skrev:
>> #include <curses.h>
>
> Kanon..Men hvordan får jeg fat i denne header? Jeg har ms vc++ 6.0 (win32)

Hvis du nu havde fortalt det fra starten, havde det været nemmere
at give et svar som du kan bruge. Der findes nemlig ingen portabel
løsning indbygget i sproget.

ncurses er et bibliotek som kan køre på stort set alt hvad der
minder om et unix-system, og lidt til (f.eks. OS/2), men ikke
win32. Det er dog ikke utænkeligt at der findes andre
curses-implementationer til Windows.

slang er et alternativ til curses som virker både til Windows og
unix, som du kunne overveje at kigge på.

Endelig findes der noget til Windows der hedder conio, som det
fremgår af tråden at du har fundet. Det er sikkert det eneste som
du umiddelbart kan bruge uden først at installere ekstra
biblioteker. Til gengæld vil brug af det udelukke dit program fra
at kunne fungere under andre styresystemer.

Byrial Jensen (06-06-2002)
Kommentar
Fra : Byrial Jensen


Dato : 06-06-02 20:38

Kent Friis <leeloo@phreaker.net> skrev:
> Den Thu, 6 Jun 2002 20:46:56 +0200 skrev Flare:
>>Fx ville jeg gerne gøre følgende
>>
>>-------
>>char valg;
>>valg = getch();
>>
>>if (valg == 'F1 TASTEN')
>> gør noget;
>
> noget i stil med:
>
> #include <curses.h>
> ...
> if(valg == KEY_F(1)) ...

Ja, men husk at curses' getch() returnerer int. Funktionstasterne
har værdier som ligger uden for en chars værdiområde.

Martin Dyring (06-06-2002)
Kommentar
Fra : Martin Dyring


Dato : 06-06-02 21:57

"Flare" <dct_flare@hotmail.com> wrote in message
news:3cffae20$0$74271$edfadb0f@dspool01.news.tele.dk...
> Fx ville jeg gerne gøre følgende
>
> -------
> char valg;
> valg = getch();
>
> if (valg == 'F1 TASTEN')
> gør noget;

I betragtning af de andre svar tror jeg det nemmeste ville være at lave et
lille program der udskriver resultatet af dit getch() kald. Så kan du jo
prøve at trykke F1 og se for dig selv? :)

--
Mvh,
Martin Dyring



Daniel Blankensteine~ (06-06-2002)
Kommentar
Fra : Daniel Blankensteine~


Dato : 06-06-02 21:58

"Martin Dyring" <mda@image.dk> wrote in message
news:l_PL8.39908$4f4.1554182@news000.worldonline.dk...
> "Flare" <dct_flare@hotmail.com> wrote in message
> news:3cffae20$0$74271$edfadb0f@dspool01.news.tele.dk...
> > Fx ville jeg gerne gøre følgende
> >
> > -------
> > char valg;
> > valg = getch();
> >
> > if (valg == 'F1 TASTEN')
> > gør noget;
>
> I betragtning af de andre svar tror jeg det nemmeste ville være at
lave et
> lille program der udskriver resultatet af dit getch() kald. Så kan du
jo
> prøve at trykke F1 og se for dig selv? :)

Den holder ikke hvis ascii værdien ikke kan "vises", lige med F1 kan den
godt fordi det er ';', men ellers er det ikke en god løsning.

mvh
db



Morten Boysen (06-06-2002)
Kommentar
Fra : Morten Boysen


Dato : 06-06-02 22:18

"Daniel Blankensteiner" <db@traceroute.dk> wrote in message
news:adoics$rt8$1@sunsite.dk...
> Den holder ikke hvis ascii værdien ikke kan "vises", lige med F1 kan
den
> godt fordi det er ';', men ellers er det ikke en god løsning.

std::cout << static_cast<int>(getch());


--
Morten Boysen


Martin Dyring (06-06-2002)
Kommentar
Fra : Martin Dyring


Dato : 06-06-02 22:24

"Daniel Blankensteiner" <db@traceroute.dk> wrote in message
news:adoics$rt8$1@sunsite.dk...
> Den holder ikke hvis ascii værdien ikke kan "vises", lige med F1 kan den
> godt fordi det er ';', men ellers er det ikke en god løsning.

Følgende fungerer fint for mig:

---
#include <stdio.h>
#include <conio.h>

int main(int argc, char *argv[])
{
while(true)
{
int c(getch());
printf("%i (0x%x)\n", c, c);
}
}
---

Under Windows resulterer et tryk på F1 i:

0 (0x0)
59 (0x3b)

--
Mvh,
Martin Dyring



Flare (06-06-2002)
Kommentar
Fra : Flare


Dato : 06-06-02 23:05

YEP! et tjek på 0 og så 59 bagefter fanger F1....Men det er nu ikke så
fantastisk elegant...Men det virker

Tak for de mange svar :)

Anders



Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408491
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste