ListBox BCB

Tappan

Grünschnabel
Hi,
ich habe ein Problem mit der ListBox bei Borland C Builder:

Ich möchte Inhalte aus verschiedenen Edit-Fenstern in einer ListBox wiedergeben. Dazu möchte ich wissen wie ich es machen kann, dass der Inhalt des ersten Edit-Fenster in der ersten Zeile am Anfang, der Inhalt des zeiten Edit-Fensters auch in der ersten Zeile aber an Stelle 20, also 20 Spalten rechts daneben reingeschrieben wird.

Damit ich nicht noch en weiteres Thema aufmachen muss würde ich noch gerne eine einfache Frage stellen:

Wie kann ich den Inhalt der ListBox in einer Textdateien "adden", also hinzufügen, den vorherigen Inhalt nicht ersetzen sonder wie gesagt nur hinzufügen.

Danke

Tappan
 
Da ich die Extrafeatures des BCB nicht kenne, kann ich nur generelle Tips geben:

Die Listbox hat einen LB_TAB (oder so ähnlich) Stil, dieser erlaubt es, dass Textzeilen einen Tab-Character enthalten dürfen. Mit einer weiteren Funktion kann man eine Anzahl von Tabs und die Breiten der Spalten angeben. Danach werden \t (Tab-Zeichen) als Spaltentrennzeichen interpretiert. Macht begrenzt Sinn, da es auch die ListControl gibt, die die wesentlich einfachere Report-Ansicht bietet (die hat auch die üblichen Header über den Spalten).

Zum "Dazuaddieren", oder auch "append" wie der englischsprachige Programmierer sagt: Beim Dateiöffnen müsste man auch ein Flag angeben können, dass an die Datei angehängt (appended) werden soll. Wenn es über die Standard-C-Library gemacht werden soll, reicht ein zusätzliches "a" in den fopen-Parametern:

FILE* fileHandle = fopen( "hurz.txt", "ba" );

ba wie B inary A ppend
 
Danke schon mal für den Anfang, aber wie wär es denn mit einem konkretem Beispiel.

Und zu 2.hast du meine Frage denke ich falsch verstanden. Ich meinte das nämlich so: wie man z.B. den Inhalt einer ListBox in eine Datei speichert, ohne das, was schon in der Datei gespeichert ist, z.B. vom vorherigen Mal, zu löschen.

Tappan
 
Hallo,

mit dem Tab das hab ich auf die schnelle mit dem \t nicht hinbekommen das wird nicht übersetzt in einen richtigen Tab.
So kann man es machen, sieht zwar umständlich aus, würde aber gehn denke ich...

Code:
string s = Edit1->Text.c_str();
int i = s.length();
if(i < 20)
{ 
    for(i ; i < 20 ; i++)
    {
        s+= " ";   // wenn string zu kurz dann mit Leerzeichen auffüllen
    }
}
das auch mit den anderen strings aus dem Edit-Fenstern

Code:
ListBox1->Items->Add(s + s2 + s3);    // durch die aufgefüllten leerzeichen müsste das immer untereinanderstehn mit Abstand dazwischen
// s2 und s3 steht jeweils für den text aus den anderen Edit-Feldern
PS: habs nicht getestet, war dann doch etwas spät ;-)


Hier der Hinweiß zum problem des speicherns und in Datei anfügen

Code:
#include <fstream>

ListBox1->Items->Add("Wert");    // sporatisches einfügen ;-)
AnsiString as = ListBox1->Items->operator [](0); // die 0 ist die Stelle der ListBox und gibt den Ansistring zurück der an dieser Stelle stand
                                                 // die stelle kannst du mit einer forschleife durchgehn um den ganzen Inhalt der ListBox zu speichern
string s = as.c_str();        // umwandeln von AnsiString in string zum besseren speichern

ofstream write;
write.open("deine Datei", ios::out | ios::app);  //ios::app bewirkt ein hinten in datei anfügen ohne überschreiben des vorhandenen Inhalts
if(write.good())
{
    write << endl;  // das muss nur wenn in der datei noch ein Zeilenumbruch rein soll 
    write << s;
}
write.close();

So in etwa müsste das gehn ;-)
Für etwaige Fehler übernehm ich keine Verantwortung :-)

MfG Turri
 
Zurück