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