Announcement

Collapse
No announcement yet.

labels zur laufzeit erstellen

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

  • labels zur laufzeit erstellen

    tach,

    ich sollte labels zur laufzeit erstellen, aber ich kann nicht sagen wieviele ich brauche, weil das immer unterschiedlich ist, wie macht man sowas ohne unnötig viele variabeln vom typ tqrlabel zu erstellen?

    gruß

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    tach,

    habe folgende prozedur gemacht:

    <pre>
    procedure QRCreateLabel (Name, Text,Schriftname : string; X,Y, Schriftsize : integer;owner:tcomponent);
    var
    L : TQRLabel;
    begin
    with Drucken_Rechnung do begin
    L := TQRLabel.create(owner);
    L.parent := Twincontrol(owner);
    L.caption := Text;
    L.Name := name;
    L.Top := Y;
    L.Left := X;
    L.Font.size := Schriftsize;
    L.Font.name := Schriftname;
    end;
    end;
    </pre>

    nachdem ich so deinen label erstellt habe, möchte ich seine höhe rausfinden!
    wie spricht man zur laufzeit erstellte labels ansschließend an?

    gruß

    marku
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

    Comment


    • #3
      <i>wie spricht man zur laufzeit erstellte labels ansschließend an?</i><br>
      Mach aus deiner Routine eine Funktion, die das erzeugte Label zurückliefert. Diese kannst du dann an geeigneter Stelle speichern (Array in der Formklasse oder so).
      <br>Oder du arbeitest mit FindComponent.
      <p>Außerdem würde ich für den Parameter "Owner" den Typ TWinControl nehmen, dann kannst du dir Casterei sparen und bleibst typsicher.
      <p>Uli

      Comment


      • #4
        tach,

        ich probiere mal ob ich das mit dem array hinbekomme!

        danke!

        gruß

        marku
        Herzliche Grüße

        Markus Lemcke
        barrierefreies Webdesign

        Comment


        • #5
          habe es so probiert:
          <pre>
          function TForm1.QRCreateLabel (Text,Schriftname : string; X,Y, Schriftsize : integer;owner:tcomponent):TQRLabel;
          var
          L : TQRLabel;
          begin
          with Drucken_Rechnung do begin
          L := TQRLabel.create(owner);
          L.parent := twincontrol(owner);
          L.caption := Text;
          L.Top := Y;
          L.Left := X;
          L.Font.size := Schriftsize;
          L.Font.name := Schriftname;
          end;
          result := l;
          end;

          procedure TForm1.Button1Click(Sender: TObject);
          var
          i,x,y : integer;
          L : TQRLabel;
          begin
          x := 50;
          y := 100;
          for i := 0 to 10 do begin
          l := QRCreateLabel('Test' + inttostr(i),'Arial',x,y,12,drucken_rechnung.qrband 1);
          y := y + l.Height;
          end;
          drucken_rechnung.show;
          end;
          </pre>

          aber in der for-schleife kracht es!
          wie funzt es richtig
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment


          • #6
            Kann ich dir jetzt auch nicht sagen - auf den ersten
            Blick schaut alles ganz gut aus. Vielleicht ist
            drucken_rechnung.qrband1 kein TWinControl? Dann geht
            der Cast in QRCreateLabel schief - siehe letzter Satz
            in meinem ersten Posting. :-)
            <p>Uli

            Comment


            • #7
              tach,

              habe mit twincontrol und tcomponent "rumgespielt" aber aus welchen gründen auch immer, klappt es ohne cast nicht!
              vielleicht muss ich es an den typ von qrband anpassen!

              gruß

              marku
              Herzliche Grüße

              Markus Lemcke
              barrierefreies Webdesign

              Comment


              • #8
                habe es nun so umgeschrieben:

                <pre>
                function TForm1.QRCreateLabel (Text,Schriftname : string; X,Y, Schriftsize : integer;owner:TQRCustomBand):TQRLabel;
                var
                L : TQRLabel;
                begin
                with Drucken_Rechnung do begin
                L := TQRLabel.create(owner);
                L.parent := twincontrol(owner);
                L.caption := Text;
                L.Top := Y;
                L.Left := X;
                L.Font.size := Schriftsize;
                L.Font.name := Schriftname;
                end;
                result := l;
                end;

                procedure TForm1.Button1Click(Sender: TObject);
                var
                i,x,y : integer;
                L : TQRLabel;
                begin
                x := 50;
                y := 100;
                for i := 0 to 10 do begin
                <b> l := QRCreateLabel('Test' + inttostr(i),'Arial',x,y,12,drucken_rechnung.qrband 1);</b>
                y := y + l.Height;
                end;
                drucken_rechnung.show;
                end;
                </pre>

                aber in der fettgedruckten zeile kracht es nach wie vor!

                gruß

                marku
                Herzliche Grüße

                Markus Lemcke
                barrierefreies Webdesign

                Comment


                • #9
                  tach,

                  habe nochmal gedebugged!
                  der eigentliche fehler ist wohl hier:

                  <pre>
                  function TForm1.QRCreateLabel (Text,Schriftname : string; X,Y, Schriftsize : integer;owner:TQRCustomBand):TQRLabel;
                  var
                  L : TQRLabel;
                  begin
                  with Drucken_Rechnung do begin
                  L := TQRLabel.create(owner);
                  <b>L.parent := twincontrol(owner);</b>
                  L.caption := Text;
                  L.Top := Y;
                  L.Left := X;
                  L.Font.size := Schriftsize;
                  L.Font.name := Schriftname;
                  end;
                  result := l;
                  end;

                  weiß jemand warum?

                  gruß

                  marku
                  Herzliche Grüße

                  Markus Lemcke
                  barrierefreies Webdesign

                  Comment


                  • #10
                    Hallo Markus,
                    ich glaube with Drucken_Rechnung do begin ist das Problem. Dadurch bezieht sich Owner auf den Owner von Drucken_Rechnung und nicht auf den übergabeparameter. Oder benenn den Parameter u

                    Comment


                    • #11
                      <i>Oder benenn den Parameter um</i><br>
                      Das auf jeden Fall, weil der Name "Owner" auch mit TForm1.Owner kollidiert.
                      <br>Pack aber zusätzlich noch das Übel an der Wurzel an und kick das "with" raus. Ist etwas Schreibarbeit (*), aber erspart dir solche Namenskonflikte.
                      <p>Zu (*): Ich hab mir nochmal deinen Code angeschaut - das with ist doch eh völlig überflüssig, oder? Also gar keine Schreibarbeit. :-)
                      <p>Uli

                      Comment


                      • #12
                        ich habe die reihenfolge geändert:

                        <pre>
                        procedure QRCreateLabel (Name, Text,Schriftname : string; X,Y, Schriftsize : integer;owner:tQrBand);
                        var
                        L : TQRLabel;
                        begin
                        with Drucken_Rechnung do begin
                        L := TQRLabel.create(owner);
                        L.caption := Text;
                        L.Name := name;
                        L.Top := Y;
                        L.Left := X;
                        L.Font.size := Schriftsize;
                        L.Font.name := Schriftname;
                        L.parent := twincontrol(owner);
                        end;
                        end;
                        </pre>

                        jetzt funzt es merkwürdiger weise!
                        ich würde auch gerne auf den type-cast verzichten, aber ich weis momentan nicht wie!

                        gruß

                        marku
                        Herzliche Grüße

                        Markus Lemcke
                        barrierefreies Webdesign

                        Comment


                        • #13
                          <i>jetzt funzt es merkwürdiger weise! ich würde auch gerne auf den type-cast verzichten, aber ich weis momentan nicht wie! </i><br>
                          Nimm doch mal dieses "with Drucken_Rechnung do begin" + zugeh. "end" weg und schau, was der Compiler dazu sagt.
                          <p>
                          Und dann würde ich auch mal nachschauen ob TQRBand wirklich ein TWinControl <b>ist</b> - was ich bezweifle. Wenn nicht, <b>muss</b> es ja krachen, wenn du es als Parent verwendest.
                          <p>Uli

                          Comment


                          • #14
                            Hi Markus,
                            <br>
                            <br>damit du nicht früher oder später eigenartige Fehlermeldungen bekommst würde ich noch beim Schließen des Reports alle erstellten Komponenten wieder "befreien".
                            <br>l.free;
                            <br>>jetzt funzt es merkwürdiger weise! ich würde auch gerne auf den type-cast verzichten, aber ich weis momentan nicht wie!
                            <br>
                            <br>Probier mal, wenn denn möglich die gesammte Procedure aus TForm1 in die Report Unit "Drucken_Rechnung" zu verschieben ist ohnehin wohl dort besser aufgehoben, da es ja zur Erstellung des Berichtes dient.
                            <br>
                            <br>mfg
                            <br>P

                            Comment


                            • #15
                              okay, danke ihr beiden
                              Herzliche Grüße

                              Markus Lemcke
                              barrierefreies Webdesign

                              Comment

                              Working...
                              X