|
| nemme menuer og lyde Fra : Hended | Vist : 6234 gange 100 point Dato : 16-02-04 09:15 |
| | |
| 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.
| |
|
|