Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Stringgrid im Quickrep darstellen (https://www.delphipraxis.net/81450-stringgrid-im-quickrep-darstellen.html)

capo 27. Nov 2006 16:00


Stringgrid im Quickrep darstellen
 
Hallo
ich würde gerne wissen wie ich den Inhalt eines Stringgrid's in einem Quickreport ausgeben kann.
Mein Stringgrig hat 5 Spalten, diese würde ich gerne Tabellenartig im Quickreport anzeigen.
Ich arbeite nicht mit einer Datenbank sondern mit *csv Dateien.

Das Stringgrid nehme ich deswegen weil relativ untschiedlich langer Text gespeichert werden soll und auch immer wieder neue Zeilen hinzugefügt werden müssen.
Die Ausgabe soll dann Tabellenmäßg im Quickreport angezeigt werden.

Ich hab auch schon mit Stringgrid to HTML rumexperimentiert (nun seit 2 Tagen),
mein Problem damit war der unterschiedlich lange Text, die Tabellen wurden immer wieder in der Breite zerhauen,
je nachdem wie lang der Text im Stringgrid halt war.
Un da ich nicht genau weiß wieviel Text jemand eingibt klappt das damit nicht
*schade*

shmia 27. Nov 2006 16:40

Re: Stringgrid im Quickrep darstellen
 
Du könntest folgendes tun:
* StringGrid durch DBGrid ersetzen
* die Daten werden in einer Memorytable gehalten, anstatt wie bisher im StringGrid
* da die Memorytable von TDataset abgeleitet ist, kannst du QRDBText benützen um die Daten anzuzeigen.

Memorytables gibt's hier: http://www.torry.net/pages.php?id=572
Auch in der JVCL oder der RX-Lib sind Memorytable Komponenten enthalten.

capo 27. Nov 2006 16:50

Re: Stringgrid im Quickrep darstellen
 
Hallo shmia
ohne DBGrid geht es nicht?
Dann muss ich ja mit einer Datenbank arbeiten, oder?
:gruebel:
Oder ist dafür das Memorytable?
gruss vom capo

shmia 27. Nov 2006 17:04

Re: Stringgrid im Quickrep darstellen
 
Zitat:

Zitat von capo
ohne DBGrid geht es nicht?

Durchaus möglich, dass noch jemand anderes eine andere Lösung bieten kann.
Zitat:

Zitat von capo
Dann muss ich ja mit einer Datenbank arbeiten, oder? :gruebel: Oder ist dafür das Memorytable?

Du brauchst keine Datenbank, sondern nur eine Memorytable. Für Quickreport sieht es aus, als ob da eine Tabelle in einer Datenbank wäre; alle Daten liegen aber im Speicher.
Wenn du schon mal mit TTable und/oder TQuery gearbeitet hast, ist das natürlich von Vorteil,
denn musst die wichtigsten Methoden von TDataset kennen und benützen.

Hansa 27. Nov 2006 18:10

Re: Stringgrid im Quickrep darstellen
 
5 Spalten ? Dann müßte das gehen :

http://www.swissdelphicenter.ch/de/showcode.php?id=769

capo 27. Nov 2006 18:45

Re: Stringgrid im Quickrep darstellen
 
Hallo Hansa,
das Problem ist das ich mit verschiedenen Stringgrids arbeiten muss, d.h. verschiedene Stringgrids unterschiedlich miteinander kombinieren muss.
gruss capo

Hansa 27. Nov 2006 18:48

Re: Stringgrid im Quickrep darstellen
 
Zitat:

Zitat von capo
..das Problem ist das ich mit verschiedenen Stringgrids arbeiten muss..

Schön, aber wo ist das Problem ?

capo 27. Nov 2006 19:03

Re: Stringgrid im Quickrep darstellen
 
Das Problem ist, dass ich richtig formatieren können muss, mit Logo und allem drum und dran, deshalb wollte ich ein Quickrep nehmen.
Und evt. auch noch andere Kompos verwendet werden die auch mit ausgedruckt werden müssen.


Ausserdem kann das mit den Formatierungsmöglichkeiten nicht beurteilen weil mit folgendem Beispiel folgender Fehler auftritt.
http://www.swissdelphicenter.ch/de/showcode.php?id=769

Zitat:

---------------------------
spoolsv.exe - Fehler in Anwendung
---------------------------
Die Anweisung in "0x00750072" verweist auf Speicher in "0x00000000". Der Vorgang

"written" konnte nicht auf dem Speicher durchgeführt werden.


Klicken Sie auf "OK", um das Programm zu beenden.
Klicken Sie auf "Abbrechen", um das Programm zu debuggen.
---------------------------
OK Abbrechen
---------------------------
Da habe ich echt eine Nuss zu knacken

Hansa 27. Nov 2006 19:21

Re: Stringgrid im Quickrep darstellen
 
Das hier ist doch schonmal ein Anfang :
Zitat:

Zitat von shmia
* da die Memorytable von TDataset abgeleitet ist, kannst du QRDBText benützen um die Daten anzuzeigen.

Habe das gar nicht gesehen. 8) Allerdings, wo kommen die Daten denn tatsächlich her ? Mit 08/15 wirst Du ein Stringgrid nicht gebändigt kriegen.

capo 27. Nov 2006 23:52

Re: Stringgrid im Quickrep darstellen
 
Hallo Hansa,

die Daten werden vom User eingegeben, bisher sind die Daten immer in Excel eingegeben worden.
Es sind Protokolle über Arbeitsabläufe die festhalten sollen was erledigt wurde und was nicht.
Mit der Zeit werden die Listen immer länger und das Problem ist, dass manche Einträge dieser Liste nicht mehr mit ausgedruckt werden müssen, andere aber doch.(weil doch noch nicht erledigt)
Mit Excel ist das aber alles zu Zeitintensiv. (zuviel Copy&Paste)


Es muss kein Stringgrid sein. Es kann auch eine andere Komponente sein, es muss auch kein Quickrep sein.
Wie gesagt hatte ich mit HTML und einem Stringgrid experimentiert, leider liefert diese Methode kein zuverlässiges Ergebnis.
Das ganze ist ja auch nur der Anfang aber wenn ich den schonmal habe bekomme ich den Rest selber hin.

Zitat:

* da die Memorytable von TDataset abgeleitet ist, kannst du QRDBText benützen um die Daten anzuzeigen.
irgendwie hoffe ich das es auch ohne TDataset geht.
Letztenendes ist es ja nur die Art der Darstellung die mir Kopfzerbrechen bereitet.


grüsse vom capo

Hansa 28. Nov 2006 00:21

Re: Stringgrid im Quickrep darstellen
 
Zitat:

Zitat von capo
...irgendwie hoffe ich das es auch ohne TDataset geht.

Wenn das Dein Ernst ist, dann erübrigen sich alle anderen Aussagen. 8)

Steven2 28. Nov 2006 00:50

Re: Stringgrid im Quickrep darstellen
 
Das muss doch auch anders gehen, ich kann dir da aber auch nicht weiter helfen.

mkinzler 28. Nov 2006 06:02

Re: Stringgrid im Quickrep darstellen
 
Wen du die Einarbeitung in Datenbanken scheust, mußt du halt den komplizierteren für dich einfacheren Weg gehen und das Grid zur Laufzeit in QR erzeugen.

alzaimar 28. Nov 2006 06:56

Re: Stringgrid im Quickrep darstellen
 
Also ich habe lange nicht mit QReport gearbeitet, aber ein DBGrid kann das auch nicht so ohne Weiteres anzeigen, oder?
Soweit ich weiss, muss man doch ein Master-Band erstellen und für jedes Feld ein TQRDBText in das Band reinbepseln.

Meine Idee (mit Funktionsgarantie :zwinker:): Dazu benötigst Du die Explode-Funktion (hier aus dem Forum), das eine CSV-Zeile in ein Array Of String überführt.
1. Verwende ein TStringsBand: In die Items-Eigenschaft kommt einfach die CSV-Datei.
1.a Im OnBeforePrint-Ereignis des TStringsBands rufst Du Explode auf und erzeugst so ein Array Of String mit den einzelnen Zellenwerten.
Delphi-Quellcode:
Procedure TForm1.QRStringsBand1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean);
Begin
// In QRStringsBand1 steht der aktuelle Datensatz im CSV-Format.
  Explode (QRStringsBand1.Item, MyFieldArray);
// Jetzt stehen im MyFieldArray die Zellenwerte der aktuellen Zeile.
End;
2. Für jede Spalte erzeugst Du zur Laufzeit eine TQRLabel-Komponente, die Position kannst Du anhand der String-Grid-Spaltenbreiten ausrechnen. In die Tag-Eigenschaft kommt die Spaltennummer.
2.a Im OnBeforePrint-Ereignis der TQRLabel-Komponenten schreibst Du:
Delphi-Quellcode:
 procedure TForm1.QRLabel2Print(sender: TObject; var Value: String);
Begin
 Value := MyExplodedFields[ TQRLabel(Sender).Tag] // .Tag ist ja die Spaltennummer
End;
Et voilá. Fertig ist der dynamische Stringgrid-Ausdruck-O-Mat.

capo 28. Nov 2006 16:55

Re: Stringgrid im Quickrep darstellen
 
Hallo alzaimar,
vielen Dank, ich guck mir das an und geb dann Rückmeldung :)

gruss capo


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 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