/ Forside/ Teknologi / Operativsystemer / DOS / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
DOS
#NavnPoint
molokyle 1149
emesen 850
e.c 800
technet 452
JegErHer 400
dk 289
strarup 288
myg 280
Gambrinus 270
10  Dark_Magi.. 230
nemme menuer og lyde
Fra : Hended
Vist : 6234 gange
100 point
Dato : 16-02-04 09:15

Nogen der ved hvordan man nemt kan lave en dos menu?
Med lyde måske?

Foreksempel:

http://icecoldfree.250free.com/moo31.zip

Prøv den lige og læg mærk til der er lyd på....

 
 
Kommentar
Fra : Sunowich


Dato : 16-02-04 09:17

Fråds nu ikke så meget med poientne

Kommentar
Fra : Hended


Dato : 16-02-04 09:39

Jeg ved det men jeg skal nu nok sætte dem op vis der kommer svar...
For man mister sine point lige så snart man stiller et svar...
Så det ville være spild vis ingen kunne svare...

Kan du forstå min tænke gang?

Kommentar
Fra : molokyle


Dato : 16-02-04 12:28

Du kunne jo programmere en sådan i et alm. programmeringssprog til DOS f.eks Turbo-Pascal.

Her en menu 'TPU' (Turbo-Pascal Unit) jeg skrev for 100 år siden (1992).

Man kunne skrive en tilsvarende TPU til lyden og så inkludere disse i den Pascal applikation, hvor man ville benytte menu og lyd.

Kode
(*--------------------------------------------------------------------------*)
UNIT menu;

INTERFACE

TYPE
str10=STRING[10];
videoarray=ARRAY [1..25,1..80] OF RECORD
ch:CHAR;
co:BYTE;
END;
PROCEDURE set_menu_color(text,active_text:BYTE);
PROCEDURE menu_bar_initialize(a1,a2,a3,a4:str10);
PROCEDURE menu_items_initialize(s1,s2,s3,s4,
s5,s6,s7,s8,
s9,s10,s11,s12,
s13,s14,s15,s16:str10);
FUNCTION menu_start:BYTE;
VAR
virtual_screen:videoarray;
screen:videoarray ABSOLUTE $b800:$0000;
(*--------------------------------------------------------------------------*)
IMPLEMENTATION
USES crt,cursor;
CONST
horizontal=1;
vertical=2;
TYPE
textarray=ARRAY [1..16] OF STRING[10];
pos_type=ARRAY [horizontal..vertical] OF BYTE;
menu_color=BYTE;
VAR
sub_text:textarray;
text_color,active_text_color:menu_color;
(*--------------------------------------------------------------------------*)
PROCEDURE turn_on(position:pos_type);
VAR
i:BYTE;
BEGIN
FOR i:=position[horizontal] TO position[horizontal]+9 DO
screen[position[vertical],i].co:=active_text_color;
END;
(*--------------------------------------------------------------------------*)
PROCEDURE turn_off(position:pos_type);
VAR
i:BYTE;
BEGIN
FOR i:=position[horizontal] TO position[horizontal]+9 DO
screen[position[vertical],i].co:=text_color;
END;
(*--------------------------------------------------------------------------*)
PROCEDURE WRITEXY(x,y:BYTE;input:str10);
VAR
i:BYTE;
pos:pos_type;
BEGIN
FOR i:=0 TO LENGTH(input)-1 DO
screen[y,x+i].ch:=input[i+1];
END;
(*--------------------------------------------------------------------------*)
PROCEDURE set_menu_color(text,active_text:menu_color);
BEGIN
text_color:=text;
active_text_color:=active_text;
END;
(*--------------------------------------------------------------------------*)
PROCEDURE menu_bar_initialize(a1,a2,a3,a4:str10);
VAR
i,n:BYTE;
text_array:ARRAY [1..4] OF STRING[10];
BEGIN
n:=5;
text_array[1]:=a1;
text_array[2]:=a2;
text_array[3]:=a3;
text_array[4]:=a4;
FOR i:=1 TO 4 DO
BEGIN
WRITEXY(n,1,text_array[i]);
n:=n+20;
END;
FOR i:=1 TO 80 DO
BEGIN
screen[horizontal,i].co:=text_color;
END;
END;
(*--------------------------------------------------------------------------*)
PROCEDURE menu_items_initialize(s1,s2,s3,s4,
s5,s6,s7,s8,
s9,s10,s11,s12,
s13,s14,s15,s16:str10);
BEGIN
sub_text[1]:=s1;
sub_text[2]:=s2;
sub_text[3]:=s3;
sub_text[4]:=s4;
sub_text[5]:=s5;
sub_text[6]:=s6;
sub_text[7]:=s7;
sub_text[8]:=s8;
sub_text[9]:=s9;
sub_text[10]:=s10;
sub_text[11]:=s11;
sub_text[12]:=s12;
sub_text[13]:=s13;
sub_text[14]:=s14;
sub_text[15]:=s15;
sub_text[16]:=s16;
END;
(*--------------------------------------------------------------------------*)
PROCEDURE pulldown(VAR position:pos_type);
VAR
t,n,i:BYTE;
pos:pos_type;
BEGIN
turn_off(position);
position[vertical]:=2;
n:=position[horizontal];
CASE n OF
5:t:=1;
25:t:=5;
45:t:=9;
65:t:=13;
END;
FOR i:=2 TO 5 DO
BEGIN
WRITEXY(n,i,sub_text[t]);
pos[vertical]:=position[vertical]+i-2;
pos[horizontal]:=position[horizontal];
turn_off(pos);
INC(t);
END;
turn_on(position);
END;
(*--------------------------------------------------------------------------*)
PROCEDURE handle(input:STRING;VAR position:pos_type);
BEGIN
turn_off(position);
CASE input[1] OF
'l':BEGIN
position[vertical]:=1;
IF position[horizontal]=5 THEN
position[horizontal]:=65
ELSE
position[horizontal]:=position[horizontal]-20;
END;
'r':BEGIN
position[vertical]:=1;
IF position[horizontal]=65 THEN
position[horizontal]:=5
ELSE
position[horizontal]:=position[horizontal]+20;
END;
'u':BEGIN
IF position[vertical]=2 THEN
position[vertical]:=5
ELSE
IF position[vertical]>1 THEN
DEC(position[vertical]);
END;
'd':BEGIN
IF position[vertical]>1 THEN
IF position[vertical]=5 THEN
position[vertical]:=2
ELSE
INC(position[vertical]);
END;
END;
turn_on(position);
END;
(*--------------------------------------------------------------------------*)
FUNCTION check(position:pos_type):BYTE;
VAR
n:BYTE;
BEGIN
IF position[vertical]=1 THEN
check:=0
ELSE
n:=position[horizontal]+position[vertical]-6;
CASE n OF
1:check:=1;
2:check:=2;
3:check:=3;
4:check:=4;
21:check:=5;
22:check:=6;
23:check:=7;
24:check:=8;
41:check:=9;
42:check:=10;
43:check:=11;
44:check:=12;
61:check:=13;
62:check:=14;
63:check:=15;
64:check:=16;
END;
END;
(*--------------------------------------------------------------------------*)
FUNCTION menu_start:BYTE;
VAR
ch:CHAR;
position:pos_type;
BEGIN
virtual_screen:=screen;
setcursor(off);
position[horizontal]:=5;
position[vertical]:=1;
turn_on(position);
REPEAT
ch:=READKEY;
CASE ch OF
#27:BEGIN
IF position[vertical]>1 THEN
BEGIN
screen:=virtual_screen;
position[vertical]:=1;
turn_on(position);
ch:=#0;
END;
END;
#13:BEGIN
IF position[vertical]=1 THEN
pulldown(position)
ELSE
ch:=#27;
END;
#0:BEGIN
ch:=READKEY;
CASE ch OF
#75:BEGIN
handle('left',position);
screen:=virtual_screen;
turn_on(position);
END;
#77:BEGIN
handle('right',position);
screen:=virtual_screen;
turn_on(position);
END;
#72:handle('up',position);
#80:handle('down',position);
END;
END;
END;
UNTIL ch=#27;
screen:=virtual_screen;
setcursor(on);
menu_start:=check(position);
END;
(*--------------------------------------------------------------------------*)
BEGIN
END.
(*--------------------------------------------------------------------------*)


Du kan selvfølgelig også bruge et andet sprog som C/C++ eller LISP.

</MOLOKYLE>

Kommentar
Fra : molokyle


Dato : 16-02-04 12:31

Ps. Ovenstående kode benytter sig af en anden TPU jeg skrev samtidig :

Kode
(*--------------------------------------------------------------------------*)
UNIT cursor;
INTERFACE USES DOS;
CONST
ON:BOOLEAN=TRUE;
OFF:BOOLEAN=FALSE;
(*--------------------------------------------------------------------------*)
PROCEDURE setcursor(input:BOOLEAN);
(*--------------------------------------------------------------------------*)
IMPLEMENTATION
(*--------------------------------------------------------------------------*)
PROCEDURE setcursor(input:BOOLEAN);
VAR
reg:registers;
BEGIN
reg.ax:=$0100;
IF input THEN
reg.cx:=$0004
ELSE
reg.cx:=$2000;
INTR($10,reg);
END;
(*--------------------------------------------------------------------------*)
BEGIN
END.
(*--------------------------------------------------------------------------*)


</MOLOKYLE>

Kommentar
Fra : Hended


Dato : 16-02-04 13:17

alle de koder du har skrevet hvordan skal jeg bruge dem?
Altså i hvilket format skal jeg gemme dem i?
Og det der Turbo-Pascal kan man hente det ned nogle steder?



Accepteret svar
Fra : molokyle

Modtaget 100 point
Dato : 16-02-04 13:53

[hør] Det var blot et eksempel på hvordan man :

Citat
..hvordan man nemt kan lave en dos menu.


Intet i livet er gratis. Det 'koster' noget at komme i Paradis

Turbo Pascal er en Pascal compiler fra Borland nu helt erstattet af : http://borland.com/delphi/

Mine unit's er skrevet i Turbo-Pascal 5.5. Man kan efter at have kompileret dem til *.tpu filer inkludere dem i sin kildekode til et DOS *.exe program ved; i koden at benytte clausulen UNIT ... således man kan bruge de funktioner der står i INTERFACE delen af koden. Dette gøres; da man så sparer at skulle skrive et menu-systems kode ind i alle de programmer, man vil udvikle og som gør brug af menuen/lyd delen.

Det var blot et eksempel på hvordan, det KUNNE gøres

Mener du kan hente compileren her : http://community.borland.com/article/0,1410,20803,00.html

Happy Coding...

</MOLOKYLE>








Kommentar
Fra : Hended


Dato : 16-02-04 19:10

jeg skal se om det virker...

PS Jeg er trods alt kun 13

Godkendelse af svar
Fra : Hended


Dato : 21-02-04 10:53

Tak for svaret molokyle.
Ved ikke om det kan bruges men der er så mange der bliver sure vis man ikke for lukket sine spørgsmål
                        

Kommentar
Fra : molokyle


Dato : 21-02-04 12:25

Tak skal du have Hended.

Selvfølgelig kan du godt så småt gå i gang med 'rigtig' programmering allerede i din alder, men vid at det er hårdt arbejde og meget tidskrævende og at det meste literatur er på engelsk, tysk og fransk !!!

Måske du hellere skulle 'lege' lidt med Javascript først? Kig ind på : http://olav.dk/webdesign/da/javascript/

Ha' en go' dag

</MOLOKYLE>

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste