Einzelnen Beitrag anzeigen

Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#17
  Alt 17. Apr 2003, 18:40
Hallo buyden,

also weiter gehts:

Jetzt, wo der erste Bericht schon fertig ist, passiert folgendes. Wenn der Bericht ausgeführt wird, teilt er dem Programm mit, dass er Datenbenötigt. Dazu löst er das Event NeedData aus. Du musst jetzt eine Methode für OnNeedData schreiben.

Ich gehe zur Verallgemeinerung davon aus, dass das Array außerhalb von Form1 nicht sichtbar ist, weil es irgendwo lokal oder im privat Bereich deklariert worden sein kann. Deshalb stellt Form1 eine öffentliche Methode zur Verfügung, die Daten auf Anfrage zur Verfügung stellt.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
     ...
  private
    { Private-Deklarationen }
    myArray : array [1..5] of String;
  public
    { Public-Deklarationen }
    AktZeile: Integer;
    function GetNextLine(var zeile: String): Boolean;
  end;
GetNextLine liefert über den Parameter Zeile die nächste auszugebene Zeile aus und meldet als Ertgebnis zurück, ob noch Daten zur Verfügung stehen.

So sieht die Funktion aus:
Delphi-Quellcode:
function TForm1.GetNextLine(var zeile: String): Boolean;
begin
   Result := (AktZeile <= 5);
   if Aktzeile <= 5 then
  begin
      zeile := myArray[AktZeile];
    Inc(AktZeile)
  end;
end;
Auf Knopfdruck wird der Report ausgeführt:
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
   i : Integer;
begin
   { Testeinträge erzeugen }
  for i := 1 to 5 do
     myArray[i] := 'Das ist der '+IntToStr(i)
                      +'-te Testeintrag für den Quickreport Test.';
   AktZeile := 1;
  Form2.Quickrep1.Preview;
end;
In Form2 nimmst du Form1 in der implementation uses Anweisung auf (und umgekehrt Form2 in Form1)

Jetzt noch die OnNeddData Methode in Form2:
Delphi-Quellcode:
procedure TForm2.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
var
   zeile   : String;
begin
   MoreData := Form1.GetNextLine(zeile);
  if MoreData then
     qrZeile.Caption := zeile;
end;
Und feddich
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat