Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Tabelle mit eigenem Text drucken (https://www.delphipraxis.net/85166-tabelle-mit-eigenem-text-drucken.html)

Marcel_Mars 26. Jan 2007 20:49


Tabelle mit eigenem Text drucken
 
Hallo zusammen

Ich programmiere seit einem Jahr mit Delphi und verstehe es sehr gut.
Doch ich möchte ein Programm für meinen Vater schreiben, bei dem man die Eingaben und die dazugehörenden Resultate in einer Tabelle ausdrucken kann.

Die Tabelle sollte man aber nicht sehen sie soll nur im Hintergrund, die richtigen Texte in die richtigen Felder einfüllen und drucken.

Ich versuchte es mit Printer, aber ich weiss nicht wie ich meinen eigenen Text einfügen kann.

Ich wäre echt froh wenn jemand mir helfen könnte!

Danke vielmals!

marabu 26. Jan 2007 21:13

Re: Tabelle mit eigenem Text drucken
 
Herzlich willkommen in der Delphi-PRAXiS, Marcel.

Für dich ist es vielleicht am einfachsten, wenn du so vorgehst:

Delphi-Quellcode:
uses
  Printers;

procedure PrintNamedValues(list: TStringList);
var
  i: Integer;
begin
  AssignPrn(output);
  Rewrite(output);
  Printer.Canvas.Font.Name := 'Courier New';
  Printer.Canvas.Font.Size := 10;
  for i := 0 to Pred(list.Count) do
    WriteLn(list.Names[i]:30, list.ValueFromIndex[i]);
  CloseFile(output);
end;

procedure TDemoForm.DemoButtonClick(Sender: TObject);
var
  list: TStringList;
begin
  list := TStringList.Create;
  list.Values['Eingabe'] := 'Ergebnis';
  PrintNamedValues(list);
  list.Free;
end;
Es gibt aber noch viele andere Wege.

Freundliche Grüße vom marabu

Marcel_Mars 27. Jan 2007 19:10

Wie kann man mehrere Zellen benützen? Danke!
 
Danke vielmals für deine Hilfe!

Aber wie kann ich die Resultate, wie bei einer Tabelle, schön immer an der gleichen Stelle drucken?
das müsste etwa so aussehen:

Eingaben Resultate

124 45
332 33333

und nicht
Eingaben Resultate
124 45
332 '''''33333

Die Apastroph wären nicht da, ich kann es sonst nicht schreiben!
Ich wäre dir(oder euch) sehr dankbar!

Marcel_Mars

marabu 27. Jan 2007 19:37

Re: Tabelle mit eigenem Text drucken
 
Hallo Marcel,

ich hätte gewettet, dass meine Code-Zeilen die Spaltenanordnung erzielen, ausprobiert habe ich es aber nicht. Hast du denn alles genauso gemacht, wie ich es dir gezeigt habe? Speziell die Einstellung des Font war dazu gedacht, dass auch immer die Werte in der ersten Spalte einen Raum von 30 (gleich breiten) Zeichen einnehmen, damit die Werte der zweiten Spalte ab der 31. Stelle linksbündig ausgerichtet erscheinen.

Freundliche Grüße

Pfoto 27. Jan 2007 20:26

Re: Tabelle mit eigenem Text drucken
 
Hi Marcel!


schau mal auf dieser Seite:
www.swissdelphicenter.ch - StringGrid drucken 1
www.swissdelphicenter.ch - StringGrid drucken 2


Vielleicht wirst du als Anfänger nicht alles verstehen,
aber es könnte Dein Problem lösen... ;-)


Gruß
Pfoto

Marcel_Mars 27. Jan 2007 20:46

Re: Tabelle mit eigenem Text drucken
 
Diese Links waren gut, aber wo genau muss ich dann meinen text einfügen, und wie!
:gruebel: :gruebel:
Da ich noch ein Anfänger, bin könnte mir das jemand genau erklären.

Danke für eure Tipps!

Freundliche Grüsse Marcel_Mars

marabu 28. Jan 2007 07:54

Re: Tabelle mit eigenem Text drucken
 
Hallo Marcel,

du hast jetzt schon drei Prozeduren, welche dir Möglichkeiten zum (zwei-)spaltigen Drucken zeigen. Jede dieser Prozeduren hat eine Parameterliste, wobei der erste Parameter angibt, in welcher Form die Daten übergeben werden müssen. Bei PrintNamedValues() erwarte ich die Daten in einer StringList und jede Zeile muss die Form "Eingabe=Ergebnis" haben. Bei PrintGrid(grid, string) wird erwartet, dass die Daten in den Zellen eines StringGrid angeliefert werden, welches eine feste Zeile und eine feste Spalte mit Überschriften besitzt. Bei PrintGrid(grid, string, orientation) soll das Grid keine feste Spalte enthalten.

Entweder du lieferst deine Daten so an, wie sie von den fertigen Prozeduren erwartet werden, oder du musst die Prozeduren an deine Bedürfnisse anpassen. Wir können dir da kaum helfen, solange du uns nicht mitteilst, in welcher Form du deine Daten bereit hältst.

Freundliche Grüße

Daniel G 28. Jan 2007 08:31

Re: Tabelle mit eigenem Text drucken
 
Moin Marcel,

Mal abgesehen davon, dass die Sparte definitiv falsch ist (:mrgreen:), hier mal ein kleiner Tipp:

Ziehe die Komponente TStringGrid auf dein Formular und setzt die Eigenschaft visible im Objektinspektor auf false.
Das hat dne Effekt, dass du die Komponente zwar siehst, während du an dem Programm arbeitest, sie aber für den Anwender, der nur mit der fertigen Exe arbeitet, unsichtbar ist.

Anschließend nimmst du dir diese Funktion und rufst sie so auf:

Delphi-Quellcode:
PrintGrid(StringGrid1, 'Mein Titel');
Gruß,
Daniel

Marcel_Mars 28. Jan 2007 09:07

Re: Tabelle mit eigenem Text drucken
 
Also die Eingaben wandelte ich von String zu Integer um. Und die Resultate sind Strings (z.B.: 'falsch 244').

marabu 28. Jan 2007 11:07

Re: Tabelle mit eigenem Text drucken
 
Hallo Marcel,

willst du die Daten mit PrintGrid() drucken, dann musst du deine Werte in einem Grid zwischenspeichern:

Delphi-Quellcode:
var
  iRow: Integer;
begin
  with StringGrid do
  begin
    // index für neue Zeile merken
    iRow := RowCount;
    // neue Zeile anfügen
    RowCount := Succ(RowCount);
    // Eingabe in die erste Spalte nach fester Spalte
    Cells[FixedCols, iRow] := Trim(EingabeEdit.Text);
    // Ergebnis in nächste Spalte
    Cells[Succ(FixedCols), iRow] := ErgebnisString;
  end;
end;
Dabei musst du auf die Randbedingungen achten, welche in PrintGrid() versteckt sind und die ich dir bereits geschrieben habe.

Willst du deine Daten mit PrintNamedValues() drucken, dann müssen sie in einer StringList zwischengespeichert werden:

Delphi-Quellcode:
var
  Tabelle: TStrings; // Tabelle := TStringList.Create;
begin
  Tabelle.Values[Trim(EingabeEdit.Text)] := ErgebnisString;
end;
Freundliche Grüße

Marcel_Mars 29. Jan 2007 14:12

Re: Tabelle mit eigenem Text drucken
 
Danke vielmals!!!
Eigentlich sollte ja alles funktionieren, aber wenn ich auf den Button ''Drucken'' drücke, kommt diese Fehlermeldung: Zugriffsverletzung bei Adresse 004151D3 in Modul ' Knochenalter Q10.exe!' Lesen Von Adresse 8BD88BAB!.
:wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall:
Das heisst ich kan nichts drucken. Liegt das an dem Quelltext oder hab ich was falsches gelesen?

Wäre echt froh wenn ich endlich drucken könnte!

Freundliche Grüsse von Marcel

marabu 29. Jan 2007 14:33

Re: Tabelle mit eigenem Text drucken
 
Marcel, du musst mal den Code zeigen, mit dem du zu drucken versuchst.

Marcel_Mars 29. Jan 2007 19:05

Re: Tabelle mit eigenem Text drucken
 
Meinst du den Quellcode?
Er ist sehr lange welchen Teil wilst du sehen?

Marcel_Mars 29. Jan 2007 19:58

Re: Tabelle mit eigenem Text drucken
 
Sorry ich habe was falsch eingetippt!
Aber es gibt dennoch Probleme!
Erstens: Wie kann ich mit PrintNamedValues die nächste Zelle anwählen?
2.: Warum erscheint beim Beenden immer Runtime (noch irgendwas)?

Ich hätte nie gedacht, dass das Drucken von Tabellen eine solche Herausforderung ist

Danke wenn ihr mir helf!

Freundliche Grüsse

Marcel

marabu 30. Jan 2007 07:23

Re: Tabelle mit eigenem Text drucken
 
Hallo Marcel,

PrintNamedValues() schreibt automatisch alle Werte (da ist eine Schleife enthalten) untereinander, du musst also keine neue Zeile anwählen. Wenn du magst, dann hänge doch dein Projekt als ZIP-Archiv (ohne EXE und DCU) an. Vielleicht bekommst du dann den Runtime-Fehler behoben und auch noch ein paar Tipps.

Freundliche Grüße

Marcel_Mars 6. Mär 2007 10:52

Re: Tabelle mit eigenem Text drucken
 
Hallo es ist zwar schon länger her aber ich hab noch eine Frage:
Wie kann man das abändern sodass man dreispaltig druckenkann?
Delphi-Quellcode:
function PadRight(const s: String; minLength: Cardinal; padChar: Char = ' '): String;
begin
  if Length(s) < minLength then
  begin
    SetLength(Result, minLength);
    Move(s[1], Result[1], Length(s));
    FillChar(Result[Succ(Length(s))], minLength - Length(s), padChar);
  end else Result := s;
end;
Ich hab schon viel ausprobiert aber es gelang mir bisher nicht.
Vielen dank!

Freundliche grüsse
Mars


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz