Announcement

Collapse
No announcement yet.

Dynamisches öffnen von Reports mittels Procedure

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dynamisches öffnen von Reports mittels Procedure

    Hi,
    <br>
    <br>wie kann man den folgenden Code dynamisch gestalten?
    <br>
    <pre>
    If rpt = nil Then
    rpt := Trpt.Create(Self);
    rpt.Preview;
    rpt.Free;
    rpt := nil;
    </pre>
    <br>So sollte es ungefähr aussehen:
    <pre>
    Procedure ShowReport(Trpt : ??? oder so)
    Var
    rpt : ???
    Begin
    If rpt = nil Then
    rpt := Trpt.Create(Self);
    rpt.Preview;
    rpt.Free;
    rpt := nil;
    End;
    </pre>
    <br>
    <br>D.h. ich möchte später im Code nur ShowReport(xyz) schreiben und der Report wird mittels ShowReport geöffnet.
    <br>
    <br>Vielen Dank schon mal.
    <br>
    <br>mfg
    <br>PS

  • #2
    Hallo Patrick, ist das hier was du willst?

    <pre>
    Procedure ShowReport(rpt:Trpt);
    Begin
    If rpt = nil Then
    rpt := Trpt.Create(Self);
    rpt.Preview;
    rpt.Free;
    rpt := nil;
    End;

    </pre>

    mfG

    Agustin Angele

    Comment


    • #3
      Hallo Agustin,
      <br>
      <br>ich möchte den Typ bzw. die Klasse Trpt dynamisch übergeben, so daß man mit der obigen Procedure jeden beliebigen Report öffnen kann.
      <br>
      <br>mfg
      <br>P

      Comment


      • #4
        Ist zwar schon ziemlich lange her, daß diese Frage gestellt wurde, aber nach dem Motto "Besser spät als nie"... ;-)<br>
        Ach ja, ich gehe davon aus, daß alle deine Reporttypen wie Trpt dieselbe Vorfahrklasse haben (ich nenne sie mal TXYZ), die bereits die Methode preview deklariert hat, sonst funktioniert das nämlich nicht...<br>

        <pre>
        interface

        uses classes; //erweitern um die Unit, in der TXYZ deklariert ist

        type
        TBasisReport=class
        private
        FReport:TXYZ;
        public
        procedure preview;
        destructor destroy; override;
        end;

        TReport=class(TBasisReport)
        public
        constructor create; override;
        end;

        TAnotherReport=class(TBasisReport)
        public
        constructor create; override;
        end;

        TAndStillAnotherReport=class(TBasisReport)
        public
        constructor create; override;
        end;

        implementation

        procedure TBasisReport.preview;
        begin
        FReport.preview;
        end;

        destructor TBasisReport.destroy;
        begin
        FReport.Free;
        end;

        constructor TReport.create;
        begin
        FReport:=TReport1.create(nil);
        end;

        constructor TAnotherReport.create;
        begin
        FReport:=TReport2.create(nil);
        end;

        constructor TAndStillAnotherReport.create;
        begin
        FReport:=TReport3.create(nil);
        end;
        </pre>

        Deine ShowReport-Routine würde dann folgendermaßen aussehen:<br>
        <pre>
        procedure ShowReport(rpt:TBasisReport);
        begin
        rpt.preview;
        end;
        </pre>
        und könnte folgendermaßen aufgerufen werden...<br>
        <pre>
        procedure Choose_ReportType_To_Preview(index:byte);
        var Report:TBasisReport;
        begin
        case index of
        0 : Report:=TReport.create;
        1 : Report:=AnotherReport.create;
        2 : Report:=AndStillAnotherReport.create;
        end;
        ShowReport(Report);
        Report.destroy;
        end;
        </pre>

        Ich hoffe, es ist einigermaßen deutlich geworden, wie ich es meine...<br>
        Gruß<br>
        Patric

        Comment

        Working...
        X