Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Reportbuilder Image Komponente (https://www.delphipraxis.net/16390-reportbuilder-image-komponente.html)

AgentAS 16. Feb 2004 14:12


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:
  For i := 0 to Listbox.items.Count -1 do
  begin
    ppImageDetail.Picture.LoadFromFile(Trim(Listbox.Items.Strings[i]));
  end;
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!

AgentAS 16. Feb 2004 18:28

Re: Reportbuilder Image Komponente
 
Refresh :-D

AgentAS 17. Feb 2004 14:51

Re: Reportbuilder Image Komponente
 
Hallo zusammen,

will ja nicht stressen aber könnte sich kurz einer Zeit nehemen für mein Prob.

Gruß Andreas

Mario 17. Feb 2004 14:58

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.

AgentAS 17. Feb 2004 15:40

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

AgentAS 17. Feb 2004 15:41

Re: Reportbuilder Image Komponente
 
Hab was vergessen. Das ganze sollte ohne Datenbank ablaufen!

Gruß AS

Mario 17. Feb 2004 15:42

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.

Mario 17. Feb 2004 15:49

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.

AgentAS 19. Feb 2004 15:54

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

Mario 20. Feb 2004 06:32

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?

Pseudemys Nelsoni 20. Feb 2004 06:59

Re: Reportbuilder Image Komponente
 
ausserdem sollen threads nicht innerhalb von 24std gepusht werden...

AgentAS 23. Feb 2004 11:44

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

Mario 23. Feb 2004 13:08

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...

AgentAS 23. Feb 2004 14:01

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

Mario 23. Feb 2004 14:10

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?

AgentAS 23. Feb 2004 15:25

Re: Reportbuilder Image Komponente
 
Hallo,

wenn ich ein ppdbText Komponente in den Detailbereich setze dann sehe ich jeweils 5 verschiedene Datensätze.

Gruß AS

Mario 23. Feb 2004 15:30

Re: Reportbuilder Image Komponente
 
Und sind diese 5 Datensätze auch in der Datenbank?

AgentAS 23. Feb 2004 15:44

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.

Mario 23. Feb 2004 15:52

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:
MyText.Caption := TableFeld.Value;
Dann solltest Du den gleichen Effekt wie beim DBTExt haben, oder?

AgentAS 23. Feb 2004 15:59

Re: Reportbuilder Image Komponente
 
jupp geht.

Mario 24. Feb 2004 08:53

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);

AgentAS 24. Feb 2004 09:24

Re: Reportbuilder Image Komponente
 
Moin,

also es geht. Ich danke Dir für deine Geduld :lol:.

Bis dann

Gruß AS

AgentAS 26. Feb 2004 12:51

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

Mario 1. Mär 2004 07:31

Re: Reportbuilder Image Komponente
 
Jein. Mit TExtraDevice kannst Du es aber zum Beispiel als RTF ausgeben.


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