![]() |
Reportbuilder Image Komponente
Hallo zusammen,
ich habe ein Problem :-D. Ich versuche die Bilder(also den Pfad) den ich in einer Listbox gespeichert habe in einem Report Builder auszudrucken. Das gelingt mir auch bis auf einen Fehler. Und zwar wenn ich z.B 5 Bilder in die Image Komponente laden will bringt er mir immer nur da letzte Bild. Ich habe die Image Komponente in den Detail Bereich abgelegt und diese dann versucht über eine FOR Schleife zu füllen.
Delphi-Quellcode:
Muss ich da jedesmal eine Imagekomponente zur Laufzeit erstellen oder warum bringt er mir immer nur das Letze Bild. Bräuchte bei 5 Bilder 3 Seite a 2 Bilder pro Seite!
For i := 0 to Listbox.items.Count -1 do
begin ppImageDetail.Picture.LoadFromFile(Trim(Listbox.Items.Strings[i])); end; |
Re: Reportbuilder Image Komponente
Refresh :-D
|
Re: Reportbuilder Image Komponente
Hallo zusammen,
will ja nicht stressen aber könnte sich kurz einer Zeit nehemen für mein Prob. Gruß Andreas |
Re: Reportbuilder Image Komponente
Schon mal mit einem Report gearbeitet? Entschuldige die Frage, aber die meine ich ernst!
Der Detail-Bereich muss auf einer Datenbank hängen, sonst kommt er ganz genau einmal und nicht mehr. Aber dass hast Du ja gemerkt. Ansatz Eine Datenbank für den Druck erzeugen, die die Dateinamen der Bilder enthält. Detail-Bereich auf die Datenbank hängen. Im Detailbereich ein Image anlegen. Im OnBeforeGenerate des Detail-Bereiches die Grafik aus dem aktuellen Datensatz ins Bild laden. |
Re: Reportbuilder Image Komponente
Hallo,
wohin müsste ich dann die Image Komponente ablegen? Laut meinem Quelltext müsste es doch so funktionieren? Habe leider noch nie mit Image Komponenten gearbeitet. Und leider findet man in keinem Buch irgend ein Beispiel. Gruß Andreas |
Re: Reportbuilder Image Komponente
Hab was vergessen. Das ganze sollte ohne Datenbank ablaufen!
Gruß AS |
Re: Reportbuilder Image Komponente
Die Image-Komponente muss ins Detail, woran die Datenbank hängt.
Wieso soll es wie in deinem Quelltext funktionieren? Du lädst in das gleiche Image verschiedene Bilder. Und wenn Du fertig bist, ist nur das zuletzt geladene sichtbar. Das ist auf einem Formular nicht anders. |
Re: Reportbuilder Image Komponente
Ein kleines, aber nicht ganz unwichtiges Detail.
Also ganz ohne Datenbank wird es komplizierter. Dann musst Du für JEDES Image eine eigene Image-Komponente plazieren. Das kannst Du natürlich dynamisch machen, ist aber sehr aufwendig und wäre sicherlich übertrieben. Eine Datenbank kann aber auch zum Beispiel eine Text-Datei sein. Ich habe es mit dem RBuilder so zwar noch nicht versucht, aber stelle Dir mal eine Text-Datei vor, in jeder Zeile ein Bild. Wenn ich mich recht entsinne, bietet er Komponenten zum Nutzen einer TextDatei als DB an. Da kann ich Dir aber nicht direkt weiterhelfen, der Weg war für mich bis dato nie erforderlich. |
Re: Reportbuilder Image Komponente
Hallo,
ich habe es jetzt mal über eine Datenbank versucht. Sprich den Pfad der Image in der datenbank gespeichert. Es geht auch bis auf! Wenn ich 8 Bilder in meiner Listbox habe bringt der Report Builder mir auch 4 Seite a 2 Bilder. Ist auch ok aber leider sind es immer die Gleichen :(. Mit ner ppdbImage bringt er mir kein Bild und mit einer normalen Image Komponente gehts bis auf das Prob das es immer die Gleichen sind. Gruß AS |
Re: Reportbuilder Image Komponente
Sind alle 8 Bilder gleich oder sind die letzten vier mit den ersten vier gleich? Kannste mal ein wenig Code zeigen?
|
Re: Reportbuilder Image Komponente
ausserdem sollen threads nicht innerhalb von 24std gepusht werden...
|
Re: Reportbuilder Image Komponente
Hallo,
also die Bilder sind alle gleich. Hier erstmal der Code.
Delphi-Quellcode:
var frmFotoanlage: TfrmFotoanlage; Gi : integer; implementation {$R *.dfm} procedure TfrmFotoanlage.FileListBoxClick(Sender: TObject); begin Image.Picture.LoadFromFile(FileListBox.FileName); end; procedure TfrmFotoanlage.FileListBoxDblClick(Sender: TObject); begin ListBox.AddItem(FileListBox.FileName,FileListBox); end; procedure TfrmFotoanlage.CBVorschauClick(Sender: TObject); begin if CBVorschau.Checked then begin GroupBoxVorschau.Visible := True; end else begin GroupBoxVorschau.Visible := False; end; end; procedure TfrmFotoanlage.FormCreate(Sender: TObject); begin frmFotoanlage.Caption := 'Fotoanlagen Ver. 1.0 --' + DateToStr(Date); EditText.Text := ''; EditGANr.Text := ''; end; procedure TfrmFotoanlage.FormShow(Sender: TObject); begin EditGANr.SetFocus; end; procedure TfrmFotoanlage.btnDruckenClick(Sender: TObject); begin if CBDruckvorschau.Checked then begin Fotoanlage.Print; end else begin Fotoanlage.DeviceType := dtScreen; Fotoanlage.Print; end; end; procedure TfrmFotoanlage.FotoanlagePreviewFormCreate(Sender: TObject); begin Fotoanlage.PreviewForm.WindowState := wsMaximized; end; procedure TfrmFotoanlage.FotoanlageBeforePrint(Sender: TObject); var i : integer; hPfad, hschluessel : string; begin if CBMitKopf.Checked then begin ppRegionKopf.Visible := True; end else begin ppRegionKopf.Visible := False; end; if EditGANr.Text <> '' then begin ppLblGANr.Caption := 'Fotoanlage zur GutachtenNr. ' + EditGANr.Text; end else begin ppLblGANr.Caption := ''; end; for Gi := 0 to ListBox.Items.Count - 1 do begin hPfad := Trim(ListBox.Items.Strings[Gi]); hSchluessel := QuotedStr('1'); ADOFotoInsert.Close; ADOFotoInsert.SQL.Clear; ADOFotoInsert.SQL.Add('INSERT INTO tblFOTO(schluessel, pfad)'); ADOFotoInsert.SQL.Add(' VALUES('+ hschluessel + ', ' + QuotedStr(hPfad) + ')'); ADOFotoInsert.ExecSQL; end; PfadSELECT; while not ADOFotoSELECT.Eof do begin ppImageDetail.Picture.LoadFromFile(Trim(ADOFotoSELECT.FieldByName('pfad').AsString)); ADOFotoSELECT.Next; end; end; procedure TfrmFotoanlage.mnuLoeschenClick(Sender: TObject); begin ListBox.Items.Delete(ListBox.ItemIndex); end; procedure TfrmFotoanlage.PfadSELECT; begin ADOFotoSELECT.Close; ADOFotoSELECT.SQL.Clear; ADOFotoSELECT.SQL.Add('SELECT * FROM tblFOTO'); ADOFotoSELECT.Open; end; procedure TfrmFotoanlage.FotoDELETE; begin ADOFotoDELETE.Close; ADOFotoDELETE.SQL.Clear; ADOFotoDELETE.SQL.Add('DELETE FROM tblFOTO'); ADOFotoDELETE.ExecSQL; end; procedure TfrmFotoanlage.FotoanlagePreviewFormClose(Sender: TObject); begin // Löscht Datenbank nach Druck FotoDELETE; end; procedure TfrmFotoanlage.pplblBildNrPrint(Sender: TObject); begin pplblBildNr.Caption := 'Bild-Nr. ' + IntToStr(Gi); end; Gruss AS |
Re: Reportbuilder Image Komponente
So wird dass natürlich nix :?
Du erzeugst im OnBeforePrint die Datenmenge neu und lädst jeden Datensatz in das aktuelle Bild. Am Ende dieser Routine ist wieder nur das letzte Bild im Image? Du musst nur einmal die Datenmenge erzeugen (vorm Report) und dann immer nur das aktuelle Bild laden... |
Re: Reportbuilder Image Komponente
Hallo,
musst entschuldigen weiss aber nicht genau was Du meinst. Ich brauche doch eine Schleife um alle Datensätze aus der Datenbank zu bekommen. Hättest Du vielleicht ein Beispiel, kann mir leider nichts genaueres unter Deiner Aussage vorstellen. Gruß AS |
Re: Reportbuilder Image Komponente
Nein, Du brauchst keine Schleife.
Du hast eine Datenbank mit einer beliebigen Anzahl von Datensätzen. Diese verbindest Du mit Deinem Report bzw. Deinem SubReport. Der Report wird bei der Preview bzw. beim Druck den Detail-Bereich automatisch solange wiederholen, wie Du Datensätze hast. Wenn Du DBText-Elemente rein plazierst, werden dann ja auch automatisch die Daten angezeigt. Du kannst ja mal statt dem Bild erst mal nur ein DBText auf den Detail-Bereich setzen und mit dem Feld von Deiner DB verbinden. Siehst Du dann alle in der Datenbank enthaltenen Sätze in der Preview? |
Re: Reportbuilder Image Komponente
Hallo,
wenn ich ein ppdbText Komponente in den Detailbereich setze dann sehe ich jeweils 5 verschiedene Datensätze. Gruß AS |
Re: Reportbuilder Image Komponente
Und sind diese 5 Datensätze auch in der Datenbank?
|
Re: Reportbuilder Image Komponente
ja sind sie. Aber ich verstehe immer noch nicht ganz wie Du mit dem Pfad die Komponente füllen kannst. Wenn ich nämlich der ppdbImage Komponente das Feld zuweise bringt Sie mir gar nichts.
|
Re: Reportbuilder Image Komponente
Ja aber genau hier kommt Deine Routine im OnBeforePrint ins Spiel. Mache doch mal folgendes:
Plaziere ein normales Text-Element rein und schreibe ins OnBeforePrint einfach:
Delphi-Quellcode:
Dann solltest Du den gleichen Effekt wie beim DBTExt haben, oder?
MyText.Caption := TableFeld.Value;
|
Re: Reportbuilder Image Komponente
jupp geht.
|
Re: Reportbuilder Image Komponente
So, und wenn dass geht, ersetze doch den Text durch ein ppImage. Und an der gleichen Stelle, wo Du den Text übertragen hast, setzt Du das Laden von dem Bild ein:
Delphi-Quellcode:
ppImage.LoadFromFile(TableFeld.Value);
|
Re: Reportbuilder Image Komponente
Moin,
also es geht. Ich danke Dir für deine Geduld :lol:. Bis dann Gruß AS |
Re: Reportbuilder Image Komponente
Hallo,
eine Frage hätte ich doch noch. Ist es möglich einen erstellten Report als Word Datei zu Speichern? Gruß AS |
Re: Reportbuilder Image Komponente
Jein. Mit
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:54 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