C Einlesen einer .txt Datei..

ItzKray

Cadet 2nd Year
Registriert
Mai 2016
Beiträge
18
C++ Einlesen einer .txt Datei..

Schönen Guten Tag!

Da wir in einer Woche einen Test schreiben in Informatik müssen wir ein Programm erstellen in dem ein Dreieck durch eine im Ordner vorhandene Text Datei angezeigt werden muss. Doch ich finde den Fehler nicht
(Compiler: BorlandBuilder) :(

Code:
Code:
int A[2];
int B[2];
int C[2];
TColor color = clBtnFace;
TStringList *liste;
TOpenDialog *OpenDialog1;
int dreieck;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
     liste = new TStringList();
     liste->LoadFromFile("dreieck.txt");

     A[0]= StrToInt(liste->Strings[0]);
     A[1]= StrToInt(liste->Strings[1]);

     B[0]= StrToInt(liste->Strings[2]);
     B[1]= StrToInt(liste->Strings[3]);

     C[0]= StrToInt(liste->Strings[4]);
     C[1]= StrToInt(liste->Strings[5]);

}
//---------------------------------------------------------------------------

und das würde in der .txt datei stehen:
200
200
200
300
350
300
das sollten die Koordinaten für alle Linien des Dreieckes sein!
Danke im Voraus!
Lg. Lukas
 
Zuletzt bearbeitet:
Keinen nur zeigt es das dreieck nicht an wenn ich es starte :(
 
Ich sehe da keinen Aufruf einer Methode, die etwas zeichnet. Du musste die angelegten Punkte natürlich auch nutzen, um die Linien dazwischen zu zeichnen. Schau dir mal das Beispiel von miac an.
 
Das Stimmt aber die Frage ist wie nehme ich die Punkte aus der .txt Datei ein Dreieck würde ja so gehen:
Code:
PaintBox1->Canvas->MoveTo(SpitzeX,SpitzeY);
PaintBox1->Canvas->LineTo(LinksX,LinksY);
PaintBox1->Canvas->LineTo(RechtsX,RechtsY);
PaintBox1->Canvas->LineTo(SpitzeX,SpitzeY);
Ergänzung ()

Ja aber in diesem bsp sind ja die Punkte im Programm gegeben ich will sie aber aus der .txt datei hineinladen
 
Wie ich das sehe erledigt das die TStringList Klasse selbstständig.

TStrings.LoadFromFile (string) : Fills the list with the lines of text in a specified file.

Siehe hier

BTW: Ich kann mir nicht vorstellen, dass du das geschrieben hast, sonst müsstest du das wissen.
 
Doch wir habens in der Schule besprochen aber wenns klappen sollte dann sollte es auch angezeigt werden.
Aber wenn es die File ladet warum zeigt es nichts an?
 
Nunja, wenn dein Auszug den gesamten Code darstellt, dann fehlen wie schon gesagt die Aufrufe, die die Linien auch zeichnen. Dass die Werte der Eckpunkte im Speicher rumliegen heißt nicht, dass daraus automatisch ein Dreieck gezeichnet wird. :)
 
Code:
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
     liste = new TStringList();
     liste->LoadFromFile("dreieck.txt");

     A[0]= StrToInt(liste->Strings[0]);
     A[1]= StrToInt(liste->Strings[1]);

     B[0]= StrToInt(liste->Strings[2]);
     B[1]= StrToInt(liste->Strings[3]);

     C[0]= StrToInt(liste->Strings[4]);
     C[1]= StrToInt(liste->Strings[5]);

     PaintBox1->Canvas->MoveTo(A[0],A[1]);
     PaintBox1->Canvas->LineTo(B[0],B[1]);
     PaintBox1->Canvas->LineTo(C[0],C[1]);
     PaintBox1->Canvas->LineTo(A[0],A[1]);

}
Hat geklappt Danke!
Nur noch eine kleine Frage wäre es möglich und ja wie dies über Linien enstandene Form mit einer Farbe zu füllen über RGB etc.?
 
Du hast keinen Aufruf zum Zeichnen.
Du brauchst so etwas wie:
...->Canvas->DrawPolygon ect.

Und anstatt:
Code:
int A[2];
int B[2];
int C[2];
Nimm lieber:
Code:
TPoint p[3];

Dann "p[0].x = StrToInt...".

Edit:
Zu langsam. ^^

Farbe über Canvas->Stroke->Color wenn ich mich nicht irre.
 
Ok also ich mache die Farbe über eine ComboBox wo man sich die Farbe aussuchen kann aber die Frage ist wie ich das machen soll da es ja Linien sind und so gesehen keine Fläche wie zb:

Code:
    PaintBox1->Canvas->Pen->Width = 1;
    PaintBox1->Canvas->Brush->Color = clGreen;
    PaintBox1->Canvas->Rectangle(A[0],A[1],B[0],B[1]);

BTW. Ich muss das mit einem Integer machen da mein Lehrer dies Form von mir verlangt xD
 
Das wäre nur die Linie aber ich will die Fläche füllen
 
Hast du doch schon:
Code:
PaintBox1->Canvas->Brush->Color = clGreen;
 
Canvas->FloodFill(int X, int Y, TColor Color, TFillStyle FillStyle); könnte dir helfen.

Code:
/*
The following code floodfills from the center point of
Form1's client area until the color black is encountered:
*/
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Canvas->Brush->Color = clBlue;
  Canvas->Brush->Style = bsDiagCross;
  Canvas->FloodFill(
    ClientWidth/2, ClientHeight/2, clBlack, fsBorder);
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  int ewidth = 400;
  int eheight = 200;
  Canvas->Brush->Color = clRed;
  Canvas->Pen->Color = clBlack;
  Canvas->Ellipse(
    (ClientWidth - ewidth)/2,
    (ClientHeight - eheight)/2, 
    ewidth, eheight);
}
Siehe hier
 
Code:
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
     liste = new TStringList();
     liste->LoadFromFile("dreieck.txt");

     A[0]= StrToInt(liste->Strings[0]);
     A[1]= StrToInt(liste->Strings[1]);

     B[0]= StrToInt(liste->Strings[2]);
     B[1]= StrToInt(liste->Strings[3]);

     C[0]= StrToInt(liste->Strings[4]);
     C[1]= StrToInt(liste->Strings[5]);

     PaintBox1->Canvas->Brush->Color = clGreen;
     PaintBox1->Canvas->MoveTo(A[0],A[1]);
     PaintBox1->Canvas->LineTo(B[0],B[1]);
     PaintBox1->Canvas->LineTo(C[0],C[1]);
     PaintBox1->Canvas->LineTo(A[0],A[1]);

}

Hat keinen Effekt
 
Bei LineTo hast du kein Objekt das du zeichnest, da hilft dir nur das FloodFill von Kruzifix.
Das würde ich wegen der Performance allerdings nur im Notfall benutzen.

So funktioniert es:
Code:
	int A[2] = {200, 200}, B[2] = {200, 300}, C[2] = {350, 300};
	TPoint p[3] = {TPoint(A[0], A[1]), TPoint(B[0], B[1]), TPoint(C[0], C[1])};

	PaintBox1->Canvas->Brush->Color = clGreen;
	PaintBox1->Canvas->Polygon(p, 2);
 
Ist ein guter Ansatz aber das mit dem Point klappt halt nicht:
1) Darf ichs nicht verwenden
2) Kommt nur error meldung
 
ItzKray schrieb:
1) Darf ichs nicht verwenden
Dann einfach FloodFill nehmen.
Oder gibt es noch weitere Einschränkungen?
ItzKray schrieb:
2) Kommt nur error meldung
Also bei mir läuft der Code. :)
An sich egal da du es wohl sowieso nicht nutzen darfst. Wenn es dich trotzdem interessiert müsstest du mal die Fehlermeldungen posten.
 
Zurück
Oben