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:

Einfaches Problem- tut mir leid für Spam...

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



Anmeldungsdatum: 24.03.2013
Beiträge: 4

BeitragVerfasst am: 25.03.2013, 00:03    Titel: Einfaches Problem- tut mir leid für Spam... Antworten mit Zitat

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. mit dem Kopf durch die Mauer wollen

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! lachen
Grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 25.03.2013, 00:05    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 24.03.2013
Beiträge: 4

BeitragVerfasst am: 25.03.2013, 00:12    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 25.03.2013, 03:24    Titel: Antworten mit Zitat

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
Code:
SCREENRES 800, 600

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



Anmeldungsdatum: 24.03.2013
Beiträge: 4

BeitragVerfasst am: 25.03.2013, 11:17    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 25.03.2013, 12:33    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 24.03.2013
Beiträge: 4

BeitragVerfasst am: 25.03.2013, 13:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. 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