 |
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 |
r3001
Anmeldungsdatum: 05.11.2004 Beiträge: 137 Wohnort: Wien
|
Verfasst am: 02.02.2005, 00:28 Titel: Rahmen erstellen |
|
|
Hiho!
Ich habe vor bereits ein paar Monaten oder länger eine Hausarbeit aufbekommen, wo man einen Rahmen um die "Eingabefelder" von Zahl1, Zahl2, etc. legen soll. Da unser Professor nichts erklärt hat in der Richtung, wie man es am besten macht, habe ich eine mehr oder weniger gute Lösung gefunden die halbwegs funktioniert. Hier am besten mal der Quellcode für das Ganze:
Code: | '---------------------
'VARIABLENDEKLARIERUNG
'---------------------
DIM Zahl1 AS SINGLE
DIM Zahl2 AS SINGLE
DIM Ergebnis AS SINGLE
DIM Operation AS STRING
DIM Start AS STRING
Start:
CLS
LOCATE 1, 2
COLOR 1, 2
PRINT " "
LOCATE 2, 2
PRINT " "
COLOR 15
LOCATE 2, 20
PRINT " "
COLOR 15, 2
LOCATE 3, 2
PRINT " "
LOCATE 5, 2
LOCATE 2, 3
PRINT "Zahl1: ";
COLOR 15, 0
INPUT " ", Zahl1
COLOR 1, 2
LOCATE 2, 23
PRINT " "
LOCATE 3, 23
PRINT " "
LOCATE 1, 23
PRINT " "
LOCATE 2, 23
PRINT " "
LOCATE 2, 25
PRINT " "
LOCATE 3, 23
PRINT " "
LOCATE 2, 24
COLOR 15, 0
INPUT "", Operation
COLOR 1, 2
LOCATE 1, 28
COLOR 1, 2
PRINT " "
LOCATE 2, 28
PRINT " "
LOCATE 2, 46
PRINT " "
COLOR 1, 2
LOCATE 3, 28
PRINT " "
LOCATE 5, 2
COLOR 15
LOCATE 2, 29
PRINT "Zahl2: ";
COLOR 15, 0
INPUT " ", Zahl2
COLOR 1, 2
IF Operation = "+" THEN
Ergebnis = Zahl1 + Zahl2
END IF
IF Operation = "-" THEN
Ergebnis = Zahl1 - Zahl2
END IF
IF Operation = "*" THEN
Ergebnis = Zahl1 * Zahl2
END IF
IF Operation = "/" THEN
IF Zahl2 = 0 THEN
CLS
COLOR 15, 0
PRINT "Division durch Null nicht erlaubt!"
END
ELSE
Ergebnis = Zahl1 / Zahl2
END IF
END IF
COLOR 1, 2
LOCATE 1, 50
PRINT " "
LOCATE 2, 50
PRINT " "
LOCATE 3, 50
PRINT " "
LOCATE 1, 52
PRINT " "
LOCATE 2, 52
PRINT " "
LOCATE 3, 52
PRINT " "
LOCATE 2, 51
COLOR 15, 0
PRINT "="
COLOR 1, 2
LOCATE 1, 55
PRINT " "
LOCATE 2, 55
PRINT " "
LOCATE 2, 65
PRINT " "
LOCATE 3, 55
PRINT " "
COLOR 15, 0
LOCATE 2, 56
PRINT Ergebnis
COLOR 1, 2
Abfrage:
COLOR 15, 0
LOCATE 10, 2
INPUT "Programm neustarten?", Start
SELECT CASE Start
CASE "j":
GOTO Start
CASE "J":
GOTO Start
CASE "n":
END
CASE "N":
END
CASE ELSE
PRINT "Ung?ltige Eingabe!"
GOTO Abfrage
END SELECT |
Beachtet das GOTO nicht, das ist ein Programm welches noch sehr früh von mir erstellt wurde
Mich würde jetzt aber mal etwas in Richtung Rahmenerstellung interessieren. Ich habe mir das so vorgestellt, das man 4 Eingaben macht, wo man Oben, Links, Höhe und Breite angeben kann. Das ganze könnte theoretisch in einer SUB ablaufen, oder? Line-Befehle wäre in meinem aktuellen Erfahrungsbereich noch zu hoch, ich will das ganze ohne jegliche Zeichen-Befehle lösen. Ich habe hier mal einen Ansatz geschrieben, der leider nicht 100%ig funktioniert. Ist der Ansatz hier korrekt, oder warum komme ich nicht auf das Endergebnis?
Code: | DIM Links AS INTEGER
DIM Oben AS INTEGER
DIM Hoehe AS INTEGER
DIM Breite AS INTEGER
CLS
INPUT "Links: ", Links
INPUT "Oben: ", Oben
INPUT "H”he: ", Hoehe
INPUT "Breite: ", Breite
CLS
LOCATE , Links
FOR i = 1 TO Breite
PRINT "-";
NEXT
LOCATE Oben, Links
FOR i = 1 TO Hoehe
LOCATE i, Links
PRINT "|"
NEXT |
Hier würde noch die Linienbildung von Rechts nach Unten usw. fehlen, aber ich will nur mal wissen ob ich den Ansatz soweit richtig habe.
Ich danke für Antworten
R |
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 02.02.2005, 01:07 Titel: |
|
|
Statt
For i% = 1 TO breite%
PRINT "-";
NEXT
verwende lieber
PRINT STRING$(breite%, "-")
Das hat den selben Effekt.
Außerdem ist es immer schöner "richtige" Ecken in den Rahmen zu bauen.
Du findest sämtliche Ascii-Zeichen in der QB-Hilfe.
Also folgende SUB habe ich früher mal geschrieben.
Außer den Eckpunkten und der Farbe gibt man als ersten Parameter noch die Art des Rahmens an. Steht aber alles in der SUB
Code: |
SUB Kasten (Art%, x1%, y1%, x2%, y2%, farbe%)
y2% = y2% + 1
' Nummer Beschreibung
' 1 ......................... Normale Umrandung mit doppelter Linie
'
' 2 ......................... Normale Umrandung mit einfacher Linie
'
' 3 - 12 ...................... F?llung des Kasten mit einem best. Zeichen
'---------------------
OL1$ = CHR$(201) '...É
OR1$ = CHR$(187) '...»
UL1$ = CHR$(200) '...È
UR1$ = CHR$(188) '...¼
WR1$ = CHR$(205) '...Í
SR1$ = CHR$(186) '...º
'---------------------
OL2$ = CHR$(218) '...Ú
OR2$ = CHR$(191) '...¿
UL2$ = CHR$(192) '...À
UR2$ = CHR$(217) '...Ù
WR2$ = CHR$(196) '...Ä
SR2$ = CHR$(179) '...³
'---------------------
FL1$ = CHR$(219) '...Û
FL2$ = CHR$(176) '...°
FL3$ = CHR$(177) '...±
FL4$ = CHR$(178) '...²
FL5$ = CHR$(1) '...
FL6$ = CHR$(2) '...
FL7$ = CHR$(3) '...
FL8$ = CHR$(4) '...
FL9$ = CHR$(5) '...
FL0$ = CHR$(6) '...
'---------------------
COLOR farbe%
SELECT CASE Art%
CASE 1
GOTO KASTENSUBKasten1
CASE 2
GOTO KASTENSUBKasten2
CASE 3
GOTO KASTENSUBKasten3
CASE 4
GOTO KASTENSUBKasten4
CASE 5
GOTO KASTENSUBKasten5
CASE 6
GOTO KASTENSUBKasten6
CASE 7
GOTO KASTENSUBKasten7
CASE 8
GOTO KASTENSUBKasten8
CASE 9
GOTO KASTENSUBKasten9
CASE 10
GOTO KASTENSUBKasten10
CASE 11
GOTO KASTENSUBKasten11
CASE 12
GOTO KASTENSUBKasten12
CASE ELSE
PRINT
PRINT "--> Kein Kasten dieser Art!."
EXIT SUB
END SELECT
KASTENSUBKasten1:
COLOR farbe%
LOCATE x1%, y1%: PRINT OL1$: LOCATE x1%, y2%: PRINT OR1$
LOCATE x2%, y1%: PRINT UL1$: LOCATE x2%, y2%: PRINT UR1$
FOR i% = x1% + 1 TO x2% - 1
LOCATE i%, y1%: PRINT SR1$
LOCATE i%, y2%: PRINT SR1$
NEXT i%
FOR i% = y1% + 1 TO y2% - 1
LOCATE x1%, i%: PRINT WR1$
LOCATE x2%, i%: PRINT WR1$
NEXT i%
EXIT SUB
KASTENSUBKasten2:
COLOR farbe%
LOCATE x1%, y1%: PRINT OL2$: LOCATE x1%, y2%: PRINT OR2$
LOCATE x2%, y1%: PRINT UL2$: LOCATE x2%, y2%: PRINT UR2$
FOR i% = x1% + 1 TO x2% - 1
LOCATE i%, y1%: PRINT SR2$
LOCATE i%, y2%: PRINT SR2$
NEXT i%
FOR i% = y1% + 1 TO y2% - 1
LOCATE x1%, i%: PRINT WR2$
LOCATE x2%, i%: PRINT WR2$
NEXT i%
EXIT SUB
KASTENSUBKasten3:
FOR i% = x1% TO x2%
LOCATE i%, y1%
PRINT STRING$(y2% - y1%, FL1$)
NEXT i%
EXIT SUB
KASTENSUBKasten4:
FOR i% = x1% TO x2%
LOCATE i%, y1%
PRINT STRING$(y2% - y1%, FL2$)
NEXT i%
EXIT SUB
KASTENSUBKasten5:
FOR i% = x1% TO x2%
LOCATE i%, y1%
PRINT STRING$(y2% - y1%, FL3$)
NEXT i%
EXIT SUB
KASTENSUBKasten6:
FOR i% = x1% TO x2%
LOCATE i%, y1%
PRINT STRING$(y2% - y1%, FL4$)
NEXT i%
EXIT SUB
KASTENSUBKasten7:
FOR i% = x1% TO x2%
LOCATE i%, y1%
PRINT STRING$(y2% - y1%, FL5$)
NEXT i%
EXIT SUB
KASTENSUBKasten8:
FOR i% = x1% TO x2%
LOCATE i%, y1%
PRINT STRING$(y2% - y1%, FL6$)
NEXT i%
EXIT SUB
KASTENSUBKasten9:
FOR i% = x1% TO x2%
LOCATE i%, y1%
PRINT STRING$(y2% - y1%, FL7$)
NEXT i%
EXIT SUB
KASTENSUBKasten10:
FOR i% = x1% TO x2%
LOCATE i%, y1%
PRINT STRING$(y2% - y1%, FL8$)
NEXT i%
EXIT SUB
KASTENSUBKasten11:
FOR i% = x1% TO x2%
LOCATE i%, y1%
PRINT STRING$(y2% - y1%, FL9$)
NEXT i%
EXIT SUB
KASTENSUBKasten12:
FOR i% = x1% TO x2%
LOCATE i%, y1%
PRINT STRING$(y2% - y1%, FL0$)
NEXT i%
EXIT SUB
END SUB
|
_________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 02.02.2005, 01:44 Titel: |
|
|
Hallo
Hier sind oben und unten die Koordinaten für die linke, obere Ecke des Kastens, breite und hoehe beziehen sich auf die Grösse des umschlossenen Textfeldes:
Code: | CLS
oben = 5
links = 5
breite = 10
hoehe = 2
LOCATE oben, links: PRINT CHR$(218)
LOCATE oben, links + breite + 1: PRINT CHR$(191)
LOCATE oben + hoehe + 1, links: PRINT CHR$(192)
LOCATE oben + hoehe + 1, links + breite + 1: PRINT CHR$(217)
FOR x = 1 TO breite
LOCATE oben, links + x: PRINT CHR$(196)
LOCATE oben + hoehe + 1, links + x: PRINT CHR$(196)
NEXT
FOR y = 1 TO hoehe
LOCATE oben + y, links: PRINT CHR$(179)
LOCATE oben + y, links + breite + 1: PRINT CHR$(179)
NEXT |
Mit dem LINE-Befehl ginge es einfacher. Da lässt sich der ganze Kasten mit einer einzigen Programmzeile zeichnen.
@SpionAtom: Warum schreibst du zum Ausfüllen nicht einfach nur eine SUB, an die du den Wert des gewünschten ASCII-Zeichens übergibst. Dann kannst du dir auch das ganze SELECT CASE sparen.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de !
Zuletzt bearbeitet von Skilltronic am 14.02.2005, 23:51, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 02.02.2005, 10:04 Titel: |
|
|
@Skilltronic
Das war halt eine SUB aus meinen frühen Tagen. Heute würde ich das natürlich so machen, wie du gesagt hast.
(Da guckt sich doch tatsächlich einer meinen Quelltext an ) _________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 02.02.2005, 10:22 Titel: |
|
|
SpionAtom hat Folgendes geschrieben: | (Da guckt sich doch tatsächlich einer meinen Quelltext an ) |
Ach so - ich dachte du hättest ihn gepostet, damit man sich ihn ansieht...
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
r3001
Anmeldungsdatum: 05.11.2004 Beiträge: 137 Wohnort: Wien
|
Verfasst am: 02.02.2005, 12:11 Titel: |
|
|
Deine SUB verstehe ich leider nur zu Hälfte, da es viele mir unbekannte Befehle gibt, SpionAtom (haut den nOOb )
Die Lösung von Skilltronic habe ich soweit gut verstanden, habe das Prinzip jetzt im Kopf. Habe in deinem Code noch INPUTs eingefügt um eigene Werte eingeben zu können, ich werde mich weiterhin damit rumschlagen. Mit LINE werde ich wohl erst dann anfangen können, wenn ich die Grundlagen gut beherrsche, nur nicht übertreiben, denke ich mir immer.
Schonmal Danke für eure Antworten, die haben mir wirklich sehr geholfen!
R |
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 02.02.2005, 12:48 Titel: |
|
|
Die SUB war auch nicht zum Verstehen gedacht, sondern zum Benutzen. Aber egal. Wenn du eine Lösung hast, ist ja alles in Ordnung.  _________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 14.02.2005, 23:27 Titel: |
|
|
Hallo, ich bin´s wieder mal
Also Rahmen lassen sich noch interessanter gestalten mit den erweiterten ASCII-Zeichen (Die ab der Nummer 126 ) Dort gibt es Rahmen mit einem und doppeltem Rand, gepunktelte Zeichen und noch viel mehr. DIe sind wirklich nützlich, die meisten uralten DOS-Programme benutzen diese Zeichen zum Fensterzeichnen usw.
MfG das Spangengesicht  _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 14.02.2005, 23:57 Titel: |
|
|
Hallo
Quark48 hat Folgendes geschrieben: | Also Rahmen lassen sich noch interessanter gestalten mit den erweiterten ASCII-Zeichen (Die ab der Nummer 126 |
Guter Tip, aber sieh dir doch mal die Nummern der ASCII-Zeichen an, die ich in meinem Beispiel vier Posts weiter oben verwendet habe...
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
arjuna
Anmeldungsdatum: 14.09.2005 Beiträge: 2 Wohnort: Uelzen
|
Verfasst am: 15.09.2005, 17:26 Titel: |
|
|
hey, der quelltext von skilltronic für den rahmen ist schon interessant, so ist das wie ich es haben möchte, aber geht das nicht auch mid den LEFT$, RIGHT$ und MID$ befehlen?
unser lehrer meinte damit soll das auch ganz schnell gehen.
und skilltronic, kannst du vielleicht mal zeigen wie das mit dem LINE gehen würde? wäre nett |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 15.09.2005, 18:45 Titel: |
|
|
Hallo
LINE ist ein Grafikbefehl und wird u.a. in der QB-Hilfe erklärt.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 15.09.2005, 19:26 Titel: |
|
|
ich hätt ihn dazuschreiben sollen
http://fb.exp-soft.de/r.php?s=line
Dann braucht man QB nich zu starten und der Prozessor bleibt kalt  _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Thomas Antoni

Anmeldungsdatum: 12.10.2004 Beiträge: 220 Wohnort: Erlangen
|
Verfasst am: 15.09.2005, 21:28 Titel: Dazu habe ich mir Folgendes für die MonsterFAQ vorgemerkt... |
|
|
Dazu habe ich mir Folgendes für die QB-MonsterFAQ vorgemerkt:
--------------------------------------------------------------------------------
Frage deutsch
~~~~~~~~~~~~~~
Wie zeige ich einen Kasten im Textmodus an?
oder
Wie zeichne ich einen Rahmen um einen Text?
Question English
~~~~~~~~~~~~~~
How to draw a box with text characters?
Antwort 1
~~~~~~~~~
[ von Thomas Antoni, 4.3.2004 ]
Da kannst Du Dich an meinem folgenden Programm BOX.BAS orientieren, das einen
Kasten aus Doppelliniensymbolen auf den Textbildschirm zeichnet.
Die zum Zeichnen von Kästen in Frage kommenden ASCII-Zeichen kannst Du aus der
ASCII-Tabelle entnehmen, die in der QBasic-Onlinehilfe unter "Hilfe | Inhalt |
ASCII-Zeichen-Codes " zur Verfügung steht.
Code: |
'******************************************************************
' BOX.BAS = Zeichnen eines Kastens aus Doppelstrichen im Textmodus
' =======
' Dieses QBasic-Programm enthaelt die SUB DrawBox, die einen einen
' Kasten aus Doppelliniensymbolen auf den Bildschirm zeichnet.
' Der linke obere Eckpunkt (x1|y1) und der rechte untere Eckpunkt
' (x2|y2) sind waehlbar.
'
' (c) Thomas Antoni, 4.3.2004
'******************************************************************
DECLARE SUB DrawBox (x1%, y1%, x2%, y2%)
CLS
INPUT "Mit welcher Spalte soll der Kasten beginnen (1...80) ", x1%
INPUT "Mit welcher Zeile soll der Kasten beginnen (1...25) ", y1%
INPUT "Mit welcher Spalte soll der Kasten enden (1...80) ", x2%
INPUT "Mit welcher Zeile soll der Kasten enden (1...25) ", y2%
COLOR 10
CALL DrawBox(x1%, y1%, x2%, y2%) 'gruenen Kasten zeichnen
COLOR 7 'Hellgraue Vordergrundfarbe wieder herstellen
SUB DrawBox (x1%, y1%, x2%, y2%)
'---- ASCII-Zeichen fuer die Doppel-Kastensymbole
LO$ = CHR$(201) 'Linke obere Ecke
LU$ = CHR$(200) 'Linke untere Ecke
RO$ = CHR$(187) 'Rechte obere Ecke
RU$ = CHR$(188) 'Rechte untere Ecke
WA$ = CHR$(205) 'Waagerechter Doppelstrich
SE$ = CHR$(186) 'Senkrechter Doppelstrich
'---- oberen Kastenrand anzeigen
LOCATE y1%, x1%
PRINT LO$; STRING$(x2% - x1% - 1, WA$); RO$
'---- seitliche Kastenraender anzeigen
FOR y% = y1% + 1 TO y2% - 1
LOCATE y%, x1%: PRINT SE$
LOCATE y%, x2%: PRINT SE$
NEXT
'---- unteren Kastenrand anzeigen
LOCATE y2%, x1%
PRINT LU$; STRING$(x2% - x1% - 1, WA$); RU$
END SUB
|
(( BOX.BAS bereits in /progs/neu/ ))
Weitere sehr gut aussehende Kästen, zum Teil mit runden Ecken, findest Du in
meinem Programm KAESTEN.BAS, das auf www.qbasic.de unter (Download | Eigene
Progs" zum Herunterladen bereitsteht.
Aus dem obenstehenden Programm BOX.BAS habe ich mein folgendes Programm
BOX_SCHA.BAS abgeleitet, das sogar einen Kasten mit Schatteneffekt auf den
Bildschirm zaubert:
Code: |
'******************************************************************
' BOX_SCHA.BAS = Zeichnen eines Kastens im Textmodus mit Schatten
' ============
' Dieses QBasic-Programm enthaelt die SUB DrawSBox, die einen
' Kasten aus Liniensymbolen mit Schatteneffekt auf den Bildschirm
' zeichnet.
' Der linke obere Eckpunkt (x1|y1) und der rechte untere Eckpunkt
' (x2|y2) sind waehlbar. Die Farbe des Kasten-Vorder- und
' -Hintergrundes muss bzw. kann im Anwenderprogramm gewählt
' werden.
'
' (c) Thomas Antoni, 4.3.2004
'******************************************************************
DECLARE SUB DrawBox (x1%, y1%, x2%, y2%)
CLS
INPUT "Mit welcher Spalte soll der Kasten beginnen (1...80) ", x1%
INPUT "Mit welcher Zeile soll der Kasten beginnen (1...25) ", y1%
INPUT "Mit welcher Spalte soll der Kasten enden (1...80) ", x2%
INPUT "Mit welcher Zeile soll der Kasten enden (1...25) ", y2%
COLOR 9, 11 'hellblau auf türkis
CALL DrawBox(x1%, y1%, x2%, y2%) 'Kasten zeichnen
COLOR 7, 0 'hellgrau auf schwarz wieder herstellen
'
SUB DrawBox (x1%, y1%, x2%, y2%)
'***************************************************************
' SUB DrawBox - Zeichnet einen Kasten mit Schatten im Textmodus
' ===========
' Uebergeben werden die Koordinaten des linken oberen Eckpunktes
' (x1% | y1%) und des rechten unteren Eckpunktes (x2% | y2%)
'
' (c) Thomas Antoni, 3.4.2004
'***************************************************************
'
'---- ASCII-Zeichen fuer die Doppel-Kastensymbole
LO$ = CHR$(218) 'Linke obere Ecke
LU$ = CHR$(192) 'Linke untere Ecke
RO$ = CHR$(191) 'Rechte obere Ecke
RU$ = CHR$(217) 'Rechte untere Ecke
WA$ = CHR$(196) 'Waagerechter Strich
SE$ = CHR$(179) 'Senkrechter Strich
SCH$ = CHR$(219) 'Schatten
'
'---- oberen Kastenrand anzeigen
LOCATE y1%, x1%
PRINT LO$; STRING$(x2% - x1% - 1, WA$); RO$
'
'---- seitliche Kastenraender anzeigen
FOR y% = y1% + 1 TO y2% - 1
LOCATE y%, x1%
PRINT SE$; SPACE$(x2% - x1% - 1); SE$; SCH$; SCH$
NEXT
'
'---- unteren Kastenrand anzeigen
LOCATE y2%, x1%
PRINT LU$; STRING$(x2% - x1% - 1, WA$); RU$; SCH$; SCH$
'
'---- Unteren Schatten anzeigen
LOCATE , x1% + 2
PRINT STRING$(x2% - x1% + 1, SCH$)
END SUB
|
(( BOX_SCHA.BAS bereits in /progs/neu/ ))
In der berühmten Unterprogrammsammlung QSUBFUN.BAS von Matthew R.Usner fand ich
noch eine SUB "BOX", die Kästen in vielfältigen Varianten zeichnen kann. Ich
habe in die Routine einen deutschen Kommentar eingefügt und ein kleines
Hauptprogramm geschrieben, das die Möglichkeiten überzeigend demonstriert. Das
Ergebnis siehst Du in dem unten stehenden Programm BOX2.BAS:
Code: |
'****************************************************************************
' BOX2.BAS = Anzeige eines Kastens mit vielen Gestaltungsmoeglichkeiten
' ========
'
' (c) Thomas Antoni, 29.7.05
' Unter Verwendung der Routine "BOX" aus der Unterprogrammsammlung
' QSUBFUN.BAS von Matthew R. Usner
'****************************************************************************
DECLARE SUB Box (Row%, Column%, BoxWidth%, Height%, BoxColor%, BoxCharacter%, BorderType%, BorderColor%)
CLS
FOR i% = 0 TO 2 'Alle 3 BorderTypes (Randlinienarten) demonstrieren
CALL Box(i% * 7 + 4, 5, 70, 5, 4, 219, i%, 1)
NEXT i%
'
SUB Box (Row%, Column%, BoxWidth%, Height%, BoxColor%, BoxCharacter%, BorderType%, BorderColor%)
'*******************************************************************************
'* BOX
'* =====
'* Displays a box of definable attributes on the text-mode screen
'* Parameters (Anzeige eines Kastens mit vielen Gestaltungsmoeglichkeiten
'* auf dem Textbildschirm SCREEN 1):
'* - Row% = Row of the upper left corner (Spalte oben links)
'* - Column% = Column of the upper left corner (Zeile oben links)
'* - BoxWidth% = Width of the Box (Kastenbreite)
'* - Height% = Height of the box (Kastenhoehe)
'* - BoxColor% = Filling color of the box (Füllfarbe des Kasteninneren)
'* - BoxCharacter% = Filling character of the box (Fuellzeichen, z.B.
'* CHR$(219)) = ausgefuelltes Kastenzeichen)
'* - BorderType%: 0= No border (keine Kastenumrandung)
'* 1= single-line border (Einfachlinie als Kastenumrandung)
'* 2= double-line border (Doppellinie als Kastenumrandung)
'* - BorderColor% = Color of the border line (Farbe der Kastenumrandung)
'*******************************************************************************
StartRow% = Row%
SELECT CASE BorderType%
'
'--------no border
CASE 0
UpperLeft$ = CHR$(BoxCharacter%)
UpperRight$ = CHR$(BoxCharacter%)
LowerLeft$ = CHR$(BoxCharacter%)
LowerRight$ = CHR$(BoxCharacter%)
Vertical$ = CHR$(BoxCharacter%)
Horizontal$ = CHR$(BoxCharacter%)
'-------- single border
'
CASE 1
UpperLeft$ = CHR$(218)
UpperRight$ = CHR$(191)
LowerLeft$ = CHR$(192)
LowerRight$ = CHR$(217)
Vertical$ = CHR$(179)
Horizontal$ = CHR$(196)
'
'--------- double border
CASE 2
UpperLeft$ = CHR$(201)
UpperRight$ = CHR$(187)
LowerLeft$ = CHR$(200)
LowerRight$ = CHR$(188)
Vertical$ = CHR$(186)
Horizontal$ = CHR$(205)
END SELECT
'
InnerWidth% = BoxWidth% - 2
InnerHeight% = Height% - 2
InnerFilling$ = STRING$(InnerWidth%, CHR$(BoxCharacter%))
BoxTopBottom$ = STRING$(InnerWidth%, Horizontal$)
'
COLOR BorderColor%, BoxColor%
LOCATE StartRow%, Column%
PRINT UpperLeft$ + BoxTopBottom$ + UpperRight$;
StartRow% = StartRow% + 1
'
FOR FillLoop% = 1 TO InnerHeight%
LOCATE StartRow%, Column%
PRINT Vertical$ + InnerFilling$ + Vertical$;
StartRow% = StartRow% + 1
NEXT FillLoop%
'
LOCATE StartRow%, Column%
PRINT LowerLeft$ + BoxTopBottom$ + LowerRight$;
END SUB
|
(( BOX2.BAS bereits in progs/neu/ ))
Antwort 2
~~~~~~~~~~~~
[ von Juergen Schroeder ( Schroeder@Starcke.de ) per Mail, 19.6.2003 ]
Hans-Jürgen Schröder hat mir ( Thomas Antoni) ein sehr flexibles Programm zum
Malen eines Kastens im Textmodus gemailt. Im Folgenden Hans-Jürgens Mail und das
Programm-Listing:
Hallo lieber Thomas!
Seit nun fast 2 Jahren bin ich ein häufiger Besucher Deiner Web-Seite. Es ist
immer spannend und aktuell in dem QB-Forum herumzustöbern oder sich über das
Neuste von Q(uick)Basic zu informieren. Ich habe mir auch schon viele
Programmbeispiele von Deiner Seite heruntergeladen. Bei Programmierproblemen wird
man schnell und kompetent von der Q(uick)Basic-Gemeinde geholfen, bzw. man kann
selbst jemanden unterstützen. Ist wirklich eine tolle Sache.
Nun zum Thema, weswegen ich Dir maile. In meiner Firma arbeiten wir auch mit
Basic und zwar mit Business Basic von der ehemaligen Firma Nixdorf, Paderborn.
Hier hat man zwar mehr Möglichkeiten was Dateizugriffe anbelangt, aber für den
Privatbereich reicht QB voll aus. Nun habe ich ein kleines Programm in Business
Basic geschrieben um eine Eingabemaske zu gestalten. Dabei kann ein Rahmen in
unterschiedlichen Größen und Positionen auf dem Bildschirm angezeigt werden.
Nach Fertigstellung und fehlerfreiem Test habe ich mir gedacht, das kannst Du ja
auch in QuickBasic umschreiben und Thomas Antoni für seine QB-MonsterFAQ zur
Verfügung stellen, damit vielleicht auch andere etwas davon haben. Im Anhang
stelle ich Dir das Programm gerne frei zur Verfügung.
Mit freundlichen Grüßen
Jürgen Schröder
THU, 19. Juni 2003
Code: |
'*****************************************************************
' RAHMEN.BAS - Zeichnen eines Rahmens aus Textzeichen mit
' ========== konfigurbarer Groesse und Farben
'
' Variables Programm zum Zeichnen eines Rahmens in verschiedenen
' Farben. Anzuwenden in Textmodus Screen 0.
' Die im Kommentar mit ? versehenen Variablen koennen Sie Ihren
' Wuenschen entsprechend anpassen.
'
' (c) Juergen Schroeder
'*****************************************************************
CLS
Zeile% = 5 ' Beginn des Rahmens ab Zeile ?
Spalte% = 10 ' Beginn des Rahmens ab Spalte ?
Breite% = 60 ' Breite des Rahmens ?
Hoehe% = 3 ' Hoehe des Rahmens ?
VFarbe% = 14 ' Vordergrundfarbe = gelb ?
HFarbe% = 0 ' Hintergrundfarbe = schwarz ?
'
IF Spalte% + Breite% > 79 THEN GOTO FEHLER1
IF Zeile% + Hoehe% > 23 THEN GOTO FEHLER2
'
COLOR VFarbe%, HFarbe%
'
Z1$ = "Ú" ' linke obere Ecke
Z2$ = "Ä" ' waagerechter Strich
Z3$ = "¿" ' rechte obere Ecke
Z4$ = "³" ' senkrechter Strich
Z5$ = "À" ' linke untere Ecke
Z6$ = "Ù" ' rechte untere Ecke
'
'--- Zeichnen des Rahmens ---
LOCATE Zeile%, Spalte%: PRINT Z1$
FOR Zaehler% = 1 TO Breite%
LOCATE Zeile%, Spalte% + Zaehler%: PRINT Z2$
NEXT Zaehler%
LOCATE Zeile%, Spalte% + Breite% + 1: PRINT Z3$
FOR Zaehler% = 1 TO Hoehe% - 1
LOCATE Zeile% + Zaehler%, Spalte% + Breite% + 1: PRINT Z4$
NEXT Zaehler%
LOCATE Zeile% + Hoehe%, Spalte% + Breite% + 1: PRINT Z6$
FOR Zaehler% = Breite% TO 1 STEP -1
LOCATE Zeile% + Hoehe%, Spalte% + Zaehler%: PRINT Z2$
NEXT Zaehler%
LOCATE Zeile% + Hoehe%, Spalte%: PRINT Z5$
FOR Zaehler% = Hoehe% - 1 TO 1 STEP -1
LOCATE Zeile% + Zaehler%, Spalte%: PRINT Z4$
NEXT Zaehler%
GOTO EOJ
'
FEHLER1:
COLOR 4:
LOCATE 11, 10: PRINT "Fehler-1:":
LOCATE 12, 10: PRINT "Die Breite des Rahmens ist zu lang,":
LOCATE 13, 10: PRINT "bzw. die Startposition (Spalte%) ist falsch":
GOTO EOJ
'
FEHLER2:
COLOR 4:
LOCATE 11, 10: PRINT "Fehler-2:":
LOCATE 12, 10: PRINT "Die Hoehe des Rahmens ist zu lang,":
LOCATE 13, 10: PRINT "bzw. die Startposition (Zeile%) ist falsch":
'
EOJ:
COLOR 7, 0 ' Auf Standardfarben zuruecksetzen
END
|
((RAHMEN.BAS bereits in qbmonfaq/progs/neu))
Antwort 3
~~~~~~~~~~~~~~~~
[ von Armin Gräwe ( /www.agfunk.de/ ) im QB-Forum, 18.3.2005 ]
Ich habe mal eben ein ganz altes Prog von mir rausgekramt.
Da ist die "Fenster" (Rahmen)-Erstellung als SUB definiert
Code: |
'*********************************************************************
' RAHMFARB.BAS = Zeichnet ein farbiges Fester mit Titeltext
' ============
' Dieses Q(uick)Basic-Programm zeigt ein farbiges Fenster an
' einer waehlbaren Stelle des Bildschirms an. Das Programm ist
' sehr flexibel konfigurierbar. Die Fensterfarbe und der Fenster-
' Titel koennen frei gew„hlt werden.
'
' (c) Armin Gr„we ( www.agfunk.de), 18.3.2005
'********************************************************************
DECLARE SUB makeframe (kopf$, o%, l%, u%, r%, rty%, cov%, coh%, rev%, fil%)
'
T$ = "Schoenes Fenster"
CALL makeframe(T$, 10, 15, 20, 70, 1, 14, 1, 0, 1)
SLEEP
END
SUB makeframe (kopf$, o%, l%, u%, r%, rty%, cov%, coh%, rev%, fil%)
'******************************************************************
'Zeichnet einen Rahmen nach Vorgaben
'kopf$= Name der Fensters (Titeltext, erscheint als Ueber)
' o% = Position oberer Rand
' l% = Position linker Rand
' u% = Position unterer Rand
' r% = Position rechter Rand
'rty% = Rahmentyp 0=einfacher Rahmen, jeder andere Wert = Doppelrahmen
'cov% = Vordergrundfarbe
'coh% = Hintergrundfarbe
'rev% = 1=reverse Color, 0=normal color
'fil% = 1=Festerhintergrund mit Farbe mit Farbe fil% fuellen
' 0=nicht gefuellt
'
IF rty% THEN
eol$ = CHR$(201)
eor$ = CHR$(187)
eul$ = CHR$(200)
eur$ = CHR$(188)
hlin% = 205
vlin% = 186
ELSE
eol$ = CHR$(218)
eor$ = CHR$(191)
eul$ = CHR$(192)
eur$ = CHR$(217)
hlin% = 196
vlin% = 179
END IF
'
COLOR cov%, coh%
'
LOCATE o%, l%: PRINT eol$; STRING$(r% - l% - 1, hlin%); eor$;
'
FOR x% = o% + 1 TO u% - 1
LOCATE x%, l%: PRINT CHR$(vlin%);
LOCATE x%, r%: PRINT CHR$(vlin%);
NEXT x%
'
LOCATE u%, l%: PRINT eul$; STRING$(r% - l% - 1, hlin%); eur$;
'
IF kopf$ <> "" THEN
xkopf$ = " " + kopf$ + " "
anf% = INT(r% - l% - LEN(xkopf$) - 1) / 2
IF rev% THEN
COLOR coh%, cov%
END IF
LOCATE o%, l% + anf% + 1: PRINT xkopf$;
IF rev% THEN
COLOR cov%, coh%
END IF
END IF
'
IF fil% THEN
COLOR cov%, fil%
FOR x% = o% + 1 TO u% - 1
LOCATE x%, l% + 1
PRINT STRING$(r% - l% - 1, 32)
NEXT x%
COLOR cov%, coh%
END IF
'
END SUB
|
(( RAHMFARB.BAS bereits in .../progs/neu/... ))
-------------------------------------------------------------------------------- _________________ +++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++ |
|
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.
|
|