 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Digga

Anmeldungsdatum: 07.01.2006 Beiträge: 48
|
Verfasst am: 28.03.2007, 19:15 Titel: Menüleiste |
|
|
Hallo
Hab mir mal die mühe gemacht eine (fast fertige) Menüleiste zu erstellen.
Würde gerne eure meinung dazu hören.
Code: |
DIM AS INTEGER x, y, buttons
declare sub Menue_Datei
screen 19,24,2,,60
color RGB(0,0,0),RGB(255,255,255) 'Schrift-und Hintergrundfarbe
cls
screenset 0,0
line (0,0)-(1279,15),RGB(207,207,207),BF 'Grauer Menuebalken
line (0,16)-(1279,16),RGB(181,181,181) '****************************
line (0,17)-(1279,17),RGB(156,156,156) '* *
line (0,18)-(1279,18),RGB(130,130,130) '* Abstufung des Balken in *
line (0,19)-(1279,19),RGB(105,105,105) '* dunklere Grautöne *
line (0,20)-(1279,20),RGB(79,79,79) '* *
line (0,21)-(1279,21),RGB(54,54,54) '****************************
color RGB(0,0,0), RGB(207,207,207) 'Schrift-und Hintergrundfarbe
print " Datei"
line (8,13)-(14,13),RGB(0,0,0) 'Unterstrich bei dem D von
line (8,14)-(14,14),RGB(0,0,0) 'Datei
color RGB(0,0,0),RGB(255,255,255)
Print ""
Print "Test Test Test"
Print "Test Test Test"
Print "Test Test Test"
Print "Test Test Test"
Print "Test Test Test"
Print "Test Test Test"
do
buttons = 0
GETMOUSE x, y,, buttons
select case x and y and buttons
case x > 7 and x < 48 and y > 0 and y < 15
color RGB(0,0,0),RGB(207,207,207)
Locate 1,2
print "Datei"
line (8,13)-(14,13),RGB(0,0,0)
line (8,14)-(14,14),RGB(0,0,0)
case x < 7 and x > 48 and y < 0 and y > 15
color RGB(0,0,0),RGB(169,169,169)
Locate 1,2
print "Datei"
line (8,13)-(14,13),RGB(0,0,0)
line (8,14)-(14,14),RGB(0,0,0)
select case buttons
case 1
sleep 100
call Menue_Datei
end select
end select
taste$ = inkey
Select Case taste$
case chr$(255)+chr$(32)
call Menue_Datei
end select
WHILE INKEY <> "": WEND
sleep 1
loop until taste$ = CHR(27)
'--------------------------------------------------------------------------
Sub Menue_Datei
screencopy 0,1
screenset 1,1
DIM AS INTEGER x, y, buttons
buttons = 1
fertig = 0
line (0,0)-(1279,15),RGB(207,207,207),BF
line (0,16)-(1279,16),RGB(181,181,181)
line (0,17)-(1279,17),RGB(156,156,156)
line (0,18)-(1279,18),RGB(130,130,130)
line (0,19)-(1279,19),RGB(105,105,105)
line (0,20)-(1279,20),RGB(79,79,79)
line (0,21)-(1279,21),RGB(54,54,54)
color RGB(0,0,0),RGB(169,169,169)
Locate 1,2
print "Datei"
line (8,13)-(14,13),RGB(0,0,0)
line (8,14)-(14,14),RGB(0,0,0)
line (8,15)-(200,500),RGB(169,169,169),B
line (9,16)-(199,499),RGB(255,255,255),BF
locate 2,3
color RGB(0,0,0),RGB(255,255,255)
Print chr(153);"ffnen..."
locate 3,3
Print "Speichern"
locate 4,3
Print "Speichern als..."
sleep 500
do
taste$ = inkey
GETMOUSE x, y,, buttons
select case x and y and buttons
case x > 7 and x < 100 and y > 16 and y < 32
color RGB(0,0,0),RGB(255,255,255)
locate 2,3
Print chr(153);"ffnen... "
case x < 7 and x > 100 and y < 16 and y > 32
locate 2,3
color RGB(0,0,0),RGB(169,169,169)
Print chr(153);"ffnen... "
end select
if x > 7 and x < 60 and y > 0 and y < 15 and Bit(buttons, 0) then fertig = +1 end if
loop until fertig = 1 or taste$ = CHR(27)
sleep 200
screenset 0,0
end sub
|
Ist nur ne Testleiste (wird alles noch ausgiebig mit Kommentaren versehen), wenn sie fertig ist soll ein kleines Programm fragen folgende Fragen stellen:
- Wieviele Menüpunkte und Untermenüs
- Titel der einselnen Menüpunkte und Untermenüs
- Screen oder eigene Auflösung
---Zeichengröße
- Farbtiefe
- Seitenzahl (die die schon verwendet werden werden dazu gerechnet)
- Flags
-Bildwiederholungsrate
- Farbe der Leiste (vieleicht mit Palette zum auswählen)
- Farbe beim anwählen
- Farbe der Schrift
- Farbe des Kontex
- Farbe des Seitenhintergrunds
Nachdem alle angaben gemacht wurden speichert das Programm dann eine bas Datei auf der Festplatte.
Was haltet ihr davon?
gruß Digga |
|
Nach oben |
|
 |
Stormy

Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
Verfasst am: 28.03.2007, 23:39 Titel: |
|
|
Sieht gut aus, aber: Es ist alles ziemlich hardcore programmiert worden. Hardcore heißt, dass es sehr starr und somit unflexibel ist. Wenn ich ein Menüpunkt neben "Datei" setzen will, muss ich den ganzen Brocken Code wieder kopieren und die Werte ändern. Das ist ziemlich aufwändig. Fast ungerechtfertigter Aufwand.
Um meine Kritik konstruktiv zu machen, schlage ich dir eine andere Variante vor. Du solltest versuchen, den Code dynamisch zu gestalten. Das beginnt schon mit den Menü-Einträgen:
Hier ein Beispiel:
Code: | TYPE DesignType
AS LONG frame, bgrcolor, fontcolor
AS LONG bgrcolor_highlight, fontcolor_highlight
END TYPE
SUB Show_Menue(Design As DesignType, X AS INTEGER, Y AS INTEGER, Menu() AS STRING)
DIM as integer i, mx, my, mbuttons, longest
longest = 0
' Suche längsten String
FOR i = LBOUND(Menu) TO UBOUND(Menu) ' Gehe alle Menüpunkt durch
IF longest < LEN(Menu(i)) THEN longest = LEN(Menu(I))
NEXT i
getmouse mx, my,, mbuttons
LINE (x, y)-(x+longest*8,y+UBOUND(Menu)*16), Design.bgrcolor, BF
LINE (x, y)-(x+longest*8,y+UBOUND(Menu)*16), Design.frame, B
FOR i = LBOUND(Menu) TO UBOUND(Menu) ' Gehe alle Menüpunkt durch
IF mx > X AND mx < longest*8 AND my > i*16 AND my > (i+1)*16 THEN
LINE (x+1, y+i*16)-(x+longest*8-1,y+(i+1)*16), Design.bgrcolor, BF
COLOR Design.fontcolor_highlight
ELSE
COLOR Design.fontcolor
END IF
Draw String (x, y + i*20), Menu(i)
NEXT i
END SUB |
Das ist nur ein Ansatz - kein komplettes Beispiel. Du kannst den Code zwar ausführen, aber du wirst kein Bild sehen. Du kannst aber davon lernen und darauf aufbauen, wenn du willst. _________________ +++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|