Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Menüleiste

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Digga



Anmeldungsdatum: 07.01.2006
Beiträge: 48

BeitragVerfasst am: 28.03.2007, 19:15    Titel: Menüleiste Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 28.03.2007, 23:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz