| Autor |
Beitrag |
daveman
Hält's aus hier
Beiträge: 10
|
Verfasst: 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
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
      

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)
|
Verfasst: Fr 29.02.08 14:37
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
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 
Hält's aus hier
Beiträge: 10
|
Verfasst: Fr 29.02.08 15:36
Es geht trotzdem nicht, beim ausführen der Druckfunktion kommt "I/o error 105"....
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: 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 
Hält's aus hier
Beiträge: 10
|
Verfasst: So 02.03.08 16:32
Wie können wir das Prob nun lösen?
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 02.03.08 16:55
_________________ "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 
Hält's aus hier
Beiträge: 10
|
Verfasst: So 02.03.08 20:03
Der ganze funktioniert trotzdem noch nicht.
Es wird ein Fehler mit Vermerk auf Zeile 47 angezeigt.
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
      
Beiträge: 193
Erhaltene Danke: 1
Win XP, Win 7, BS2000
D5
|
Verfasst: So 02.03.08 20:16
Gehe ich recht in der Annahme dass Deine Zeile 47 identisch sein soll mit Zeile 17?
Vergleich mal
bye
bflegel
_________________ I know all the jokes about my name
|
|
daveman 
Hält's aus hier
Beiträge: 10
|
Verfasst: So 02.03.08 20:48
Sorry, der Fehler besteht nach wie vor...
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
      
Beiträge: 765
Erhaltene Danke: 130
|
Verfasst: So 02.03.08 20:59
Martok hat Dir doch geantwortet. lies die Antwort einfach noch einmal!
ub60
|
|
daveman 
Hält's aus hier
Beiträge: 10
|
Verfasst: So 02.03.08 21:05
ja, dann schau dir doch mal zeile 17 und 47 an.
|
|
bflegel
      
Beiträge: 193
Erhaltene Danke: 1
Win XP, Win 7, BS2000
D5
|
Verfasst: So 02.03.08 21:09
Ohne den Code getestet zu haben, müsste es doch heissen:
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 
Hält's aus hier
Beiträge: 10
|
Verfasst: 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
      
Beiträge: 76
Win 2000, Win XP Pro
Delphi 7 Architect
|
Verfasst: Mo 03.03.08 17:32
daveman 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
      
Beiträge: 193
Erhaltene Danke: 1
Win XP, Win 7, BS2000
D5
|
Verfasst: 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
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 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;
var Breite_Rand : integer; Breite_Buch : integer; Breite_Name : integer; Buch, Name, Rueckgabedatum, Leerstring, Rand, Druckzeile : string;
begin Breite_Rand := 8; Breite_Buch := 16; Breite_Name := 14; 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 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; WriteLn(Prn,Druckzeile); end; end; |
bye
bflegel
_________________ I know all the jokes about my name
|
|
Xion
      

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)
|
Verfasst: Fr 07.03.08 14:16
Nehm doch einfach meinen Code und verbesser
Delphi-Quelltext 1:
| WriteLn(Buecher+Name+Rueckgabedatum); |
in
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
      
Beiträge: 193
Erhaltene Danke: 1
Win XP, Win 7, BS2000
D5
|
Verfasst: 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
|
|
|