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:

Rahmen erstellen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
r3001



Anmeldungsdatum: 05.11.2004
Beiträge: 137
Wohnort: Wien

BeitragVerfasst am: 02.02.2005, 00:28    Titel: Rahmen erstellen Antworten mit Zitat

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 zwinkern
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? lächeln
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 lächeln

R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 395

BeitragVerfasst am: 02.02.2005, 01:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 02.02.2005, 01:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 395

BeitragVerfasst am: 02.02.2005, 10:04    Titel: Antworten mit Zitat

@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 mit den Augen rollen )
_________________
Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 02.02.2005, 10:22    Titel: Antworten mit Zitat

SpionAtom hat Folgendes geschrieben:
(Da guckt sich doch tatsächlich einer meinen Quelltext an mit den Augen rollen )


Ach so - ich dachte du hättest ihn gepostet, damit man sich ihn ansieht...

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
r3001



Anmeldungsdatum: 05.11.2004
Beiträge: 137
Wohnort: Wien

BeitragVerfasst am: 02.02.2005, 12:11    Titel: Antworten mit Zitat

Deine SUB verstehe ich leider nur zu Hälfte, da es viele mir unbekannte Befehle gibt, SpionAtom (haut den nOOb Zunge rausstrecken)

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! lächeln

R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 395

BeitragVerfasst am: 02.02.2005, 12:48    Titel: Antworten mit Zitat

Die SUB war auch nicht zum Verstehen gedacht, sondern zum Benutzen. Aber egal. Wenn du eine Lösung hast, ist ja alles in Ordnung. grinsen
_________________
Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Quark48



Anmeldungsdatum: 16.10.2004
Beiträge: 559
Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern

BeitragVerfasst am: 14.02.2005, 23:27    Titel: Antworten mit Zitat

Hallo, ich bin´s wieder mal zwinkern

Also Rahmen lassen sich noch interessanter gestalten mit den erweiterten ASCII-Zeichen (Die ab der Nummer 126 zwinkern ) 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 lächeln
_________________
Grüßle, Stefan lächeln
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht! happy
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 14.02.2005, 23:57    Titel: Antworten mit Zitat

Hallo

Quark48 hat Folgendes geschrieben:
Also Rahmen lassen sich noch interessanter gestalten mit den erweiterten ASCII-Zeichen (Die ab der Nummer 126 zwinkern


Guter Tip, aber sieh dir doch mal die Nummern der ASCII-Zeichen an, die ich in meinem Beispiel vier Posts weiter oben verwendet habe... zwinkern

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
arjuna



Anmeldungsdatum: 14.09.2005
Beiträge: 2
Wohnort: Uelzen

BeitragVerfasst am: 15.09.2005, 17:26    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 15.09.2005, 18:08    Titel: Antworten mit Zitat

mid left und right sind Stringbearbeitungsfunktionen => nein
für mehr Infos:
http://fb.exp-soft.de/r.php?s=right
http://fb.exp-soft.de/r.php?s=left
http://fb.exp-soft.de/r.php?s=mid
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 15.09.2005, 18:45    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 15.09.2005, 19:26    Titel: Antworten mit Zitat

ich hätt ihn dazuschreiben sollen durchgeknallt

http://fb.exp-soft.de/r.php?s=line zwinkern
Dann braucht man QB nich zu starten und der Prozessor bleibt kalt grinsen
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden
Thomas Antoni



Anmeldungsdatum: 12.10.2004
Beiträge: 220
Wohnort: Erlangen

BeitragVerfasst am: 15.09.2005, 21:28    Titel: Dazu habe ich mir Folgendes für die MonsterFAQ vorgemerkt... Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail 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 -> Allgemeine Fragen zu QBasic. 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