Autor Beitrag
daveman
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 28.02.08 15:20 
Hallo,

folgendes Problem: Ich möchte gern eine Bücherliste drucken, dabei sind der Name des Buches, der Name des Ausleihers und das Rückgabedatum in einer Listbox.
Leider wird beim drucken nur immer die Überschrift gedruckt, also "Bücher" "Name" und "Rückgabedatum".

Was ist falsch und wie muss ich die Listboxen richtig einbinden?

Erbitte dringend Hilfe!

MfG


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
var Prn : TextFile;
    i,p : integer;
    s : string;
    Buecher, Name, Rueckgabedatum, Leerstring, Rand : string[20];
begin
    Leerstring:='                    ';
    Rand:='        ';
    AssignPrn(Prn);
    Rewrite(Prn);
    Printer.Canvas.Font.Name:='Courier New';
    Printer.Canvas.Font.Size:=12;
    WriteLn(Prn);
    WriteLn(Prn);
    WriteLn(Prn, 'Bücherliste':45);
    WriteLn(Prn);
    WriteLn(Prn,Rand+'Bücher          Name          Rückgabedatum');



    for i:=0 to ListBox1.Items.Count-1 do
      begin
        s:=ListBox1.Items[i];
        p:=Pos(',',s);
        Buecher:=Copy(s,1,p-1);
        Buecher:=Buecher+Leerstring;
        Delete(s,1,9+1);
        p:=Pos(',',s);
      end;
      for i:=0 to ListBox2.Items.Count-1 do
      begin
        s:=ListBox2.Items[i];
        p:=Pos(',',s);
        Name:=Copy(s,1,p-1);
        Name:=Name+Leerstring;
        Delete(s,1,9+1);
        p:=Pos(',',s);
        end;
     for i:=0 to ListBox3.Items.Count-1 do
     begin
        s:=ListBox3.Items[i];
        p:=Pos(',',s);
        Rueckgabedatum:=Copy(s,1,p-1);
       Rueckgabedatum:=Rueckgabedatum+Leerstring;
        Delete(s,1,9+1);
        p:=Pos(',',s);
        end;
end;
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 29.02.08 14:37 
:welcome:

das Problem ist imho offensichtlich: Du hast keinen WriteLn Befehl mehr nach deiner Kopfzeile

//EDIT: und zudem wäre wohl die mitgelieferte Druck-Komponente um Welten besser dafür geeignet.

so müsste der code imho aussehen
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
var Prn : TextFile;
    i,p : integer;
    s : string;
    Buecher, Name, Rueckgabedatum, Leerstring, Rand : string[20];
begin
    Leerstring:='                    ';
    Rand:='        ';
    AssignPrn(Prn);
    Rewrite(Prn);
    Printer.Canvas.Font.Name:='Courier New';
    Printer.Canvas.Font.Size:=12;
    WriteLn(Prn);
    WriteLn(Prn);
    WriteLn(Prn, 'Bücherliste':45);
    WriteLn(Prn);
    WriteLn(Prn,Rand+'Bücher          Name          Rückgabedatum');



    for i:=0 to ListBox1.Items.Count-1 do
      begin
        s:=ListBox1.Items[i];
        p:=Pos(',',s);
        Buecher:=Copy(s,1,p-1);
        Buecher:=Buecher+Leerstring;
        Delete(s,1,9+1);
        p:=Pos(',',s);

        s:=ListBox2.Items[i];
        p:=Pos(',',s);
        Name:=Copy(s,1,p-1);
        Name:=Name+Leerstring;
        Delete(s,1,9+1);
        p:=Pos(',',s);

        s:=ListBox3.Items[i];
        p:=Pos(',',s);
        Rueckgabedatum:=Copy(s,1,p-1);
        Rueckgabedatum:=Rueckgabedatum+Leerstring;
        Delete(s,1,9+1);
        p:=Pos(',',s);

        WriteLn(Buecher+Name+Rueckgabedatum);
      end;
end;
falls alle ListBoxen gleich viele Einträge haben (sollten sie doch aber, soweit ich das sehe)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
daveman Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Fr 29.02.08 15:36 
Es geht trotzdem nicht, beim ausführen der Druckfunktion kommt "I/o error 105"....
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Fr 29.02.08 15:40 
Zeile 43 in Zions Code: Hier wird nicht auf den Drucker geschrieben, sondern in die Standardausgabe. Falls es keine Konsolenanwendung ist kann es sein, dass der Fehler daher rührt.

AXMD
daveman Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 02.03.08 16:32 
Wie können wir das Prob nun lösen?
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: So 02.03.08 16:55 
ausblenden Die fehlerhafte Zeile
 
43:
{ ... }
WriteLn(Buecher+Name+Rueckgabedatum);
korrigieren?

ausblenden Delphi-Quelltext
1:
WriteLn(Prn, Buecher+Name+Rueckgabedatum);					

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
daveman Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 02.03.08 20:03 
Der ganze funktioniert trotzdem noch nicht.
Es wird ein Fehler mit Vermerk auf Zeile 47 angezeigt.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
var Prn : TextFile;
    i,p : integer;
    s : string;
    Buecher, Name, Rueckgabedatum, Leerstring, Rand : string[20];
begin
    Leerstring:='                    ';
    Rand:='        ';
    AssignPrn(Prn);
    Rewrite(Prn);
    Printer.Canvas.Font.Name:='Courier New';
    Printer.Canvas.Font.Size:=12;
    WriteLn(Prn);
    WriteLn(Prn);
    WriteLn(Prn, 'Bücherliste':45);
    WriteLn(Prn);
    WriteLn(Prn,Rand+'Bücher          Name          Rückgabedatum');
    WriteLn(Prn, Buecher+Name+Rueckgabedatum);


    for i:=0 to ListBox1.Items.Count-1 do
      begin
        s:=ListBox1.Items[i];
        p:=Pos(',',s);
        Buecher:=Copy(s,1,p-1);
        Buecher:=Buecher+Leerstring;
        Delete(s,1,9+1);
        p:=Pos(',',s);
      end;
      for i:=0 to ListBox2.Items.Count-1 do
      begin
        s:=ListBox2.Items[i];
        p:=Pos(',',s);
        Name:=Copy(s,1,p-1);
        Name:=Name+Leerstring;
        Delete(s,1,9+1);
        p:=Pos(',',s);
        end;
     for i:=0 to ListBox3.Items.Count-1 do
     begin
        s:=ListBox3.Items[i];
        p:=Pos(',',s);
        Rueckgabedatum:=Copy(s,1,p-1);
       Rueckgabedatum:=Rueckgabedatum+Leerstring;
        Delete(s,1,9+1);
        p:=Pos(',',s);

        WriteLn(Buecher+Name+Rueckgabedatum);

        end;
end;
bflegel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP, Win 7, BS2000
D5
BeitragVerfasst: So 02.03.08 20:16 
Gehe ich recht in der Annahme dass Deine Zeile 47 identisch sein soll mit Zeile 17?
Vergleich mal :wink:

bye
bflegel

_________________
I know all the jokes about my name
daveman Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 02.03.08 20:48 
Sorry, der Fehler besteht nach wie vor...


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
var Prn : TextFile;
    i,p : integer;
    s : string;
    Buecher, Name, Rueckgabedatum, Leerstring, Rand : string[20];
    begin
    Leerstring:='                    ';
    Rand:='        ';
    AssignPrn(Prn);
    Rewrite(Prn);
    Printer.Canvas.Font.Name:='Courier New';
    Printer.Canvas.Font.Size:=12;
    WriteLn(Prn);
    WriteLn(Prn);
    WriteLn(Prn, 'Bücherliste':45);
    WriteLn(Prn);
    WriteLn(Prn,Rand+'Bücher          Name          Rückgabedatum');
    WriteLn(Buecher+Name+Rueckgabedatum);


    for i:=0 to ListBox1.Items.Count-1 do
      begin
        s:=ListBox1.Items[i];
        p:=Pos(',',s);
        Buecher:=Copy(s,1,p-1);
        Buecher:=Buecher+Leerstring;
        Delete(s,1,9+1);
        p:=Pos(',',s);
      end;
      for i:=0 to ListBox2.Items.Count-1 do
      begin
        s:=ListBox2.Items[i];
        p:=Pos(',',s);
        Name:=Copy(s,1,p-1);
        Name:=Name+Leerstring;
        Delete(s,1,9+1);
        p:=Pos(',',s);
        end;
     for i:=0 to ListBox3.Items.Count-1 do
     begin
        s:=ListBox3.Items[i];
        p:=Pos(',',s);
        Rueckgabedatum:=Copy(s,1,p-1);
       Rueckgabedatum:=Rueckgabedatum+Leerstring;
        Delete(s,1,9+1);
        p:=Pos(',',s);

                WriteLn(Buecher+Name+Rueckgabedatum);

        end;
end; end;


Zuletzt bearbeitet von daveman am So 02.03.08 21:04, insgesamt 1-mal bearbeitet
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 765
Erhaltene Danke: 130



BeitragVerfasst: So 02.03.08 20:59 
Martok hat Dir doch geantwortet. lies die Antwort einfach noch einmal!

ub60
daveman Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 02.03.08 21:05 
ja, dann schau dir doch mal zeile 17 und 47 an.
bflegel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP, Win 7, BS2000
D5
BeitragVerfasst: So 02.03.08 21:09 
Ohne den Code getestet zu haben, müsste es doch heissen:

ausblenden Delphi-Quelltext
1:
WriteLn(prn,Buecher+Name+Rueckgabedatum);					


Des weiteren:

Selbst wenn der Code dann funktionieren würde, dann würde wohl die Bücherliste trotzdem nicht richtig gedruckt werden.

Du überschreibst Deine Variablen Bücher, Name und Rückgabe bei jedem Durchlauf Deiner jeweiligen For-Schleifen.

Du bekommst also maximal das letzte Buch in der Liste.

Bye
bflegel

_________________
I know all the jokes about my name
daveman Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 03.03.08 14:39 
Das drucken geht trotz aller Änderungen immernoch nicht, kann mit jemand helfen einen anderen Quelltext zu erstellen, um das Prob zu lösen?
Zorro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Win 2000, Win XP Pro
Delphi 7 Architect
BeitragVerfasst: Mo 03.03.08 17:32 
user profile icondaveman hat folgendes geschrieben:
Das drucken geht trotz aller Änderungen immernoch nicht, kann mit jemand helfen einen anderen Quelltext zu erstellen, um das Prob zu lösen?


Du hast in die falsche Richtung korrigiert: Du hast die Zeile 17 der 47 angepasst statt umgekehrt.
Also: In beiden Zeilen direkt nach der öffnenden Klammer ein "prn," einfügen (ohne Anführungszeichen) und gut is.

Greetz
Zorro

_________________
Real programmers confuse Xmas and Halloween because DEC 25 = OCT 31
bflegel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP, Win 7, BS2000
D5
BeitragVerfasst: Mo 03.03.08 18:23 
Hallo,

rein vom logischen sollte es ungefähr so funktionieren. Du solltest eine Druckzeile nach der anderen aufbauen und zum Drucker senden.

Achtung ungetestet! Es können syntaktische Fehler drin sein oder ob der Copy-Befehl so funktioniert weiss ich jetzt auch nicht auswendig :roll:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
Deine For-Schleife:

 for i:=0 to ListBox1.Items.Count-1 do // Ein Durchgang reicht für alle 3 Listboxen!
      begin       
        s:=ListBox1.Items[i];             // Ist noch verständlich
        p:=Pos(',',s);                    // Was machst Du hier?
        Buecher:=Copy(s,1,p-1);           // Was ist wenn ein Buchtitel ein Komma enthält?
        Buecher:=Buecher+Leerstring;      // Auch noch verständlich, wenn auch unnütz
        Delete(s,1,9+1);                  // Wozu, s wird keiner anderen Variable mehr zugewiesen bzw?
        p:=Pos(',',s);                    // Bringt das noch irgend etwas, da keine weitere Verwendung von p?
      end;

//////////////////////////////////////////////////////////

var
Breite_Rand : integer;
Breite_Buch : integer;
Breite_Name : integer;
Buch, Name, Rueckgabedatum, Leerstring, Rand, Druckzeile : string;

begin
  Breite_Rand := 8;   // Anzahl der Zeichen lt. Zeile 27
  Breite_Buch := 16;  // Anzahl der Zeichen bis zum Namen lt. Zeile 36
  Breite_Name := 14;  // Anzahl der Zeichen bis zum Rückgabedatum lt. Zeile 36

  Leerstring:='                    ';            
  Rand:='        ';
  AssignPrn(Prn);
  Rewrite(Prn);
  Printer.Canvas.Font.Name:='Courier New';
  Printer.Canvas.Font.Size:=12;
  WriteLn(Prn);
  WriteLn(Prn);
  WriteLn(Prn, 'Bücherliste':45);                                  // Lt. Deiner Aussage wird bis
  WriteLn(Prn);                                                    // hierher alles gedruckt, also
  WriteLn(Prn,Rand+'Bücher          Name          Rückgabedatum'); // nehme ich das als gegeben hin

  for i:=0 to ListBox1.Items.Count-1 do                            // Ein Durchgang reicht für alle 3 Listboxen!
    begin       
      Buch:=Copy(Rand+ListBox1.Items[i]+Leerstring,1,Breite_Rand+Breite_Buch);
      Name:=Copy(ListBox2.Items[i]+Leerstring,1,Breite_Name);
      Rueckgabedatum := ListBox3.Items[i];
      Druckzeile := Buch+Name+Rueckgabedatum;                      // Du musst den Druck Zeile für Zeile aufbauen
      WriteLn(Prn,Druckzeile);                                     // und zum Drucker schicken, sonst überschreibst Du die Variable Druckzeile.
    end;
  // evtl hier noch ein Druckende-Befehl?
end;


bye
bflegel

_________________
I know all the jokes about my name
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 07.03.08 14:16 
Nehm doch einfach meinen Code und verbesser
ausblenden Delphi-Quelltext
1:
WriteLn(Buecher+Name+Rueckgabedatum);					

in
ausblenden Delphi-Quelltext
1:
WriteLn(Prn,Buecher+Name+Rueckgabedatum);					

dann müsste doch imho gehen

es ist dabei vor allem wichtig, dass es nur EINE Schleife ist, mit 3 gehts logischerweise nicht ^^

allerdings bin ich mir sehr sicher, dass es keine ordentliche Liste geben wird. Du müsstest mindestens soviele Leerzeichen nehmen, dass jede Spalte gleich viele Zeichen enthält.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
bflegel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP, Win 7, BS2000
D5
BeitragVerfasst: Fr 07.03.08 15:42 
Hallo Xion,

das mit der gleichmäßigen Tabelle hab ich mit meinen "Rumrechnereien" berücksichtigt. Wenn mein Code funktioniert ... ohne Drucker kein Test ... dann kommt auch eine gleichmäßige Tabelle raus.

bye
bflegel

_________________
I know all the jokes about my name