Announcement

Collapse
No announcement yet.

Memo mit Printer.Canvas.Textout drucken

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

  • Memo mit Printer.Canvas.Textout drucken

    Hallo Delphi-Freunde,
    ich möchte folgende Befehlszeile per Programm steuern:
    Printer.Canvas.TextOut(x,y,memo1.Lines[0]);

    Mein Gedanke ist, den Parameter "memo1.Lines[0]" als Variable zu übergeben z.B.: Merker:='memo1.Lines[0]'

    Das würde so aussehen: Printer.Canvas.TextOut(x,y,Merker);

    Leider funktioniert das nicht. Es wird 'Merker' ausgedruckt und nicht der Zeileninhalt des Memo1.

    Wo ist mein Gedankenfehler?
    Würde mich über Hilfe freuen, danke.
    Gruß Klaus

  • #2
    http://www.marquardtnet.info/cecke/q...quicky_30.html

    Das sollte sich nach Delphi übernehmen lassen
    Zuletzt editiert von Christian Marquardt; 28.07.2011, 07:26.
    Christian

    Comment


    • #3
      Originally posted by Klaus230850 View Post
      Das würde so aussehen: Printer.Canvas.TextOut(x,y,Merker);

      Leider funktioniert das nicht. Es wird 'Merker' ausgedruckt und nicht der Zeileninhalt des Memo1.
      Bist du ganz sicher, dass da nicht
      [highlight=pascal]
      Printer.Canvas.TextOut(x,y,'Merker');
      [/highlight]

      steht?
      Ich habs gleich!
      ... sagte der Programmierer.

      Comment


      • #4
        Memo mit Printer.Canvas.Textout drucken

        Hallo tinof,
        da steht wirklich nur merker. In merker ist der Befehl memo1.lines[0] als String hinterlegt.


        Das Beispiel von Christian Marquardt hilft mir auch nicht weiter, da in C geschrieben.
        Gruß
        Klaus

        Comment


        • #5
          Ok, dann poste bitte deinen Codeabschnitt einmal 1:1 hier,
          mal sehen ob wir dann was finden.

          Grüße
          Tino
          Ich habs gleich!
          ... sagte der Programmierer.

          Comment


          • #6
            Memo mit Printer.Canvas.Textout drucken

            Hallo Tino,
            herzlichen Dank für Deine Turboantwort.
            Ich habe letztendlich meine Procedure gründlich ausgemistet und etwas strukturiert und siehe da: Es funktioniert!
            Hätte mich auch sehr gewundert.
            Trotzdem den Ausschnitt des Programmes. Vielleicht etwas verbesserungswürdig, oder?


            procedure TForm1.Button2Click(Sender: TObject);
            var x,y,breite,hoehe,groesse,Linienabstand:integer; Merker:string;
            begin
            groesse:=67;x:=150;y:=-120;Linienabstand:=65;

            Printer.Orientation:=poLandscape; // Hochformat Portrait (poLandscape = Querformat)

            Printer.BeginDoc;
            SetMapMode(printer.canvas.handle,MM_LOMETRIC); // Einstellung in mm
            SetTextAlign(handle,TA_CENTER+TA_TOP); // Nullpunkt setzen
            with printer.canvas do
            begin
            breite := getdevicecaps(handle,horzsize)*10; // Höhe des Papiers ermitteln
            hoehe := getdevicecaps(handle,vertsize)*10; // Breite des Papiers ermitteln
            Label3.Caption:=inttostr(breite);
            Label14.Caption:=inttostr(hoehe);

            Merker:=memo1.Lines[0] ; // zum Test eine Befehlszeile in String laden

            Printer.Canvas.Font.Name:='Arial'; // Schriftart
            Printer.Canvas.Font.Height:=groesse; // Schrifthöhe
            Printer.Canvas.Font.Style:=[fsBold]; // Fettschrift
            Printer.Canvas.TextOut(x,y,Merker); // Übergabe des Merkerinhaltes (aus String)
            y:=y-Linienabstand;
            Printer.Canvas.TextOut(x,y,memo1.Lines[1]);
            y:=y-Linienabstand;
            Printer.Canvas.TextOut(x,y,memo1.Lines[2]);
            y:=y-Linienabstand;
            end;
            Printer.EndDoc;
            end;


            Vielen Dank Tino

            Comment


            • #7
              Originally posted by Klaus230850 View Post
              Vielleicht etwas verbesserungswürdig, oder?
              Man kann immer irgendwas anders machen - beim Programmieren schon gleich gar.

              Einen 'wichtigen' Einwand hätte ich: Es sollte geprüft werden, ob das Memo auch wirklich 3 Zeilen enthält - sonst bekommt man bei memo.lines[xxx] einen Laufzeitfehler

              Schön, dass es jetzt klappt, viel Erfolg weiterhin!
              Tino
              Ich habs gleich!
              ... sagte der Programmierer.

              Comment


              • #8
                Memo mit Printer.Canvas.Textout drucken

                Hallo Tino,
                vielen Dank für den Hinweis. Habe das schon berücksichtigt.
                Habe aber noch einen Frage:

                Merker:='memo1'; als String deklariert und möchte diesen String in folgende Zeile einfügen:
                Printer.Canvas.TextOut(100,100,merker.Lines[3]);

                Es wird ein Fehler gemeldet. [Fehler] Unit1.pas(43): Record, Objekt oder Klassentyp erforderlich
                Vermutlich lassen sich hier keine Variablen einsetzen.
                Gibt es evt. eine andere Lösung?
                Gruß Klaus

                Comment


                • #9
                  Merker:='memo1'; als String deklariert
                  Du kannst aus keinem String eine Klasse aus dem nichts erzeugen.

                  Bloß weil der String memo1 heisst und es auch im System irgendwo eine Klasse diesen Names gibt, bedeutet das nicht, das der String nun etwas mit der Klasse zu tun hat.

                  Wie soll auch ein String nun die Eigenschaften der Klasse besitzen?

                  Selbstverständlich können an der Stelle Variablen eingesetzt werden, jedoch hat die Klasse String nicht die Eigenschaft "Lines".

                  Gibt es evt. eine andere Lösung?
                  Übergib die Instanz der Klasse memo1 an deine Prozedur
                  Zuletzt editiert von Christian Marquardt; 30.07.2011, 09:01.
                  Christian

                  Comment


                  • #10
                    Memo mit Printer.Canvas.Textout drucken

                    Hallo Christian,
                    habe mich mittlerweile mit dem Thema Klassen und Instanzen beschäftigt, wodurch mir manches klarer wurde. Allerdings wird mich dieses Thema die nächsten Wochen sehr beschäftigen.
                    Da ich kein Vollblutprogammer bin, wird's noch etwas dauern. Danach werde ich hoffentlich keine so blöde Fragen ins Forum stellen.

                    Comment


                    • #11
                      In Interpretersprachen ist das von dir gewünschte Konstrukt möglich..
                      Christian

                      Comment

                      Working...
                      X