 |
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 |
Neuling12345
Anmeldungsdatum: 24.03.2013 Beiträge: 4
|
Verfasst am: 25.03.2013, 00:03 Titel: Einfaches Problem- tut mir leid für Spam... |
|
|
Hey,
ich bin neu hier. Ich bin Schüler und gehe in die 9 Klasse. Wir hatten Free Basic mal im Unterricht aber nicht sehr ausführlich. Sind gerade mal bis "Schleifen" oder "Select Case" gekommen. Grafische Befehle waren nur was für die "Fortgeschrittenen" und von Funktionen ist kein Wort gefallen...
Das ist allesschon ein bisschen her und ich interessiere mich wieder dafür. Ich wollte nun mal ein sehr einfaches Programm schreiben, ein Art Bildschirmschoner (wenn man so will) "programmieren". Er ist aber sehr primitiv. Ich habe FreeBasic heute das erste Mal seit 6 Monaten angerührt.
Also um auf den Punkt zu kommen. Ich habe Schwierigkeiten mit dem Befehl "Line". Ich verstehe die Fehlermeldung nicht.
Hier der Code: Code: | Type Punkt
As Integer x, y
End Type
Dim ScreenHeight as Integer, Screenwidth as Integer, Schleife as Integer
Dim As Punkt Startpunkt, Endpunkt
ScreenInfo ScreenHeight, Screenwidth
ScreenRes ScreenHeight, Screenwidth
Startpunkt.x=0
Startpunkt.y=0
Endpunkt.x=Screenwidth
Endpunkt.y=0
For Schleife=0 to ScreenHeight
sleep 100
Line (Startpunkt (x, y)) - (Endpunkt (x1, y1))
Startpunkt.x=0
Startpunkt.y+=1
Endpunkt.x=0
Endpunkt.y+=1
Next Schleife
sleep
|
Und hier die Fehlermeldung/en:
error 67: Array not dimensioned, before '(' in 'Line (Startpunkt (x, y)) - (Endpunkt (x1, y1))'
error 55: Type mismatch, at parameter 2 in 'Line (Startpunkt (x, y)) - (Endpunkt (x1, y1))'
Ich habe schon in der Befehlreferenz nach der Syntax-Struktur geschaut, aber ich werde, da nicht so richtig schlau drauß bzw. ich verstehe die Fehlermeldung nicht wirklich.
Würde mich über eine schnelle Rückmeldung sehr freuen!
Grüße |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 25.03.2013, 00:05 Titel: |
|
|
Code: | Line (Startpunkt.x, Startpunkt.y) - (Endpunkt.x, Endpunkt.y) |
Wobei du dann x und y jeweils natürlich vor dem Zeichnen mit sinnvollen werten füllen musst. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Neuling12345
Anmeldungsdatum: 24.03.2013 Beiträge: 4
|
Verfasst am: 25.03.2013, 00:12 Titel: |
|
|
Okay, erstmal vielen Dank für die schnelle Antwort!
Aber, müsste ich dann jeden y-Wert bis ScreenHeight eingeben oder wie? Also was ich meine ist ja, dass ich eine Strecke von oben Links nach oben Rechts ziehe und dann einen y-wert hoch gehe und dann wieder eine Strecke ziehe und dass dann bis nach unten rechts.
Ich müsste dann doch, wie du es mir gezeigt hast den konkreten y-Wert eingeben kann ich das nicht vom Prinzip, wie ich es gemacht habe, machen? Die Syntax ist dann aber falsch mit dem Line-Befehl. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 25.03.2013, 03:24 Titel: |
|
|
Was genau willst du denn machen? Eine Linie (Strecke) ziehen oder ein ganzes Rechteck ausfüllen? Oder gar den ganzen Bildschirm? Je nachdem gibt es verschiedene Methoden, die sich besser eignen.
Zunächst einmal (mag sein dass es soweit bereits bekannt ist):
Mit SCREENRES kannst du die Größe deines Fensters festlegen. Etwa legt
ein Fenster mit 800 Pixel Breite und 600 Pixel Höhe fest. Die Ecke oben links beginnt dabei mit den Koordinaten (0, 0); die rechte untere Ecke besitzt die Koordinaten (799, 599). Ansonsten ist es wie ein normales Koordinatensystem aufgebaut, nur dass die y-Werte nach unten wachsen statt nach oben.
Code: | LINE (100, 100)-(700, 500) |
zeichnet eine Strecke, die bei (100, 100) beginnt und bei (700, 500) endet. Willst du ein komplettes ausgefülltes Rechteck in diesem Bereich zeichnen, brauchst du nicht jede Strecke einzeln einbauen, sondern kannst das ganz einfach mit
Code: | LINE (100, 100)-(700, 500),, BF |
bewerkstelligen, wobei das BF für ein ausgefülltes Rechteck steht. Willst du gar den ganzen Bildschirm füllen, würde ich empfehlen, die Hintergrundfarbe mit COLOR zu setzen und dann CLS zu verwenden.
Einzelheiten zu den Befehlen findest du ausführlich unter
http://www.freebasic-portal.de/befehlsreferenz/
Um auf deine Fehlermeldung zu sprechen zu kommen - da müsstest du
Code: | Line (Startpunkt.x, Startpunkt.y) - (Endpunkt.x,Endpunkt.y) |
verwenden. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Neuling12345
Anmeldungsdatum: 24.03.2013 Beiträge: 4
|
Verfasst am: 25.03.2013, 11:17 Titel: |
|
|
Also ich hatte vor eine Art Bildschirmschoner zu entwerfen. Er sollte erstmal den Bildschirm mit Stecken überdecken und bewusst nicht mit einem Rechteck. Es soll schrittweise überdeckt werden und nicht aufeinmal mit einem Rechteck.
Zu meiner Fehlermeldung:
Wenn ich es für einen beliebigen Bildschirm schreibe kann ich ja nicht einen festen Wert einsetzen, es gibt ja unterschiedlich große Bildschirme. Ich wollte den Befehl also allgemeingültig formulieren und keinen festen Zahlenwert vornerein einsetzen.
Code: | Type Punkt
As Integer x, y
End Type
Dim ScreenHeight as Integer, Screenwidth as Integer, Schleife as Integer
Dim Bildschirmbreite as Integer
Dim As Punkt Startpunkt, Endpunkt
ScreenInfo ScreenHeight, Screenwidth
ScreenRes ScreenHeight, Screenwidth
Bildschirmbreite=Screenwidth
Startpunkt.x=0
Startpunkt.y=0
Endpunkt.x=Screenwidth
Endpunkt.y=0
For Schleife=0 to ScreenHeight
sleep 100
Line (Startpunkt.0, Startpunkt.0) - (Endpunkt.0, Endpunkt.y)
Startpunkt.y+=1
Endpunkt.y+=1
Next Schleife
sleep |
Also ich habe mir ja mit Screeninfo die Werte für den Bildschirm geholt.
Und mein Startpunkt ist ja am Anfang (0, 0), aber wenn ich jetzt einen beliebigen Bildschirm habe kann ich für den Endpunkt ja nicht schon 600 oder so eingeben, wenn ich den ganzen Bildschirm verwenden möchte.
Ich wollte es folgendermaßen machen.
Code: | Line (Startpunkt.0, Startpunkt.0) - (Endpunkt.0, Endpunkt.Screenweight) |
Das klappt ja mit der Syntax nicht, gibt es da keine Möglichkeit es allgemein gültig zu formulieren? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 25.03.2013, 12:33 Titel: |
|
|
Code: | Line (0, 0) - (Screenwidth, 0) |
Hier verwendest du ja fixe Werte, die nicht von deinem Startpunkt/Endpunkt abhängen.
Du willst vermutlich etwas in der Art:
Code: | FOR i AS INTEGER = 0 TO ScreenHeight-1
LINE (0, i) - (ScreenWidth-1, i)
SLEEP 100
NEXT |
Die Werte, die du als Parameter in den Klammern von LINE einsetzt, müssen in irgendeiner Weise vom Compiler interpretierbar sein - entweder verwendest du direkt Zahlen (0) oder Variablen (i, Screenwidth) oder Records eines UDTs (Startpunkt.x; wird gewissermaßen wie eine Variable behandelt), oder Rechenausdrücke aus den gegebenen Möglichkeiten (Screenwidth-1).
Mit Bildschirmschonern habe ich noch nie etwas gemacht, aber musst du da nicht auch erst mit SCREENRES ein Fenster erstellen? _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Neuling12345
Anmeldungsdatum: 24.03.2013 Beiträge: 4
|
Verfasst am: 25.03.2013, 13:40 Titel: |
|
|
Danke für deine Hilfe! Klappt jetzt so wie ich es mir vorgestellt habe!
Ist und soll ein kein richtiger Bildschirmschoner werden, brauchte nur ein Thema für Grafik, um wieder rein zu kommen ^^ |
|
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.
|
|