Ergebnis 1 bis 20 von 32

Thema: Programmvorbereitung - Hilfe benötigt!

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Zitat Zitat von PX Beitrag anzeigen
    Code:
    begin
            Printer.Canvas.TextOut(500, 1000 + I *
                  (Printer.Canvas.TextHeight('I') + 5), memText1.Lines[I], memText2-Lines[I]);
             end;
    So? Wofür wird denn eigentlich die Variable I eingesetzt?
    I steht immer für die aktuelle Zeile (beginnend bei 0) in meinem Code. Um auszurechnen wohin de Text kommen muss ist die Formel I*(ZeilenHöhe + 5), damit sich der Text nicht überschneidet. Die +5 ist nur damit die Zeilen nicht so aneinander kleben.

    Dein Code ist übrigens schwachsinn. Probiere es mal lieber so:

    Code:
    procedure TfrmMain.btnPrintClick(Sender: TObject);
    var
      I, J: Integer;
    begin
      if PrintDialog.Execute then
      begin
        try
          Printer.Copies := printDialog.Copies;
    
          Printer.Title := 'Document';
          Printer.BeginDoc;
          // Setze Schriftart
          Printer.Canvas.Font := FontDialog.Font;
          // Zeilenweißes drucken
          for I := 0 to memText.Lines.Count - 1 do
          begin
            Printer.Canvas.TextOut(500, 500 + I *
                  (Printer.Canvas.TextHeight('I') + 5), memText.Lines[I]);
          end;
    
          for J := 0 to memText2.Lines.Count - 1 do
          begin
            Printer.Canvas.TextOut(500, 500 + J * (Printer.Canvas.TextHeight('I') + 5) + I * (Printer.Canvas.TextHeight('I') + 5),
                  (Printer.Canvas.TextHeight('I') + 5), memText2.Lines[J]);
          end;
          // Und drucken:
          Printer.EndDoc;
        except
          MessageDlg('Error while printing!', mtError, [mbOk], 0);
        end;
      end;
    end;

  2. #2
    Das verursacht einen Fehler:

    Code:
    (Printer.Canvas.TextHeight('I') + 5), memText2.Lines[J]);
    Irgendein Problem zwischen String und Integer... Wieso tritt das bei I nicht auf?

  3. #3
    Zitat Zitat von PX Beitrag anzeigen
    Das verursacht einen Fehler:

    Code:
    (Printer.Canvas.TextHeight('I') + 5), memText2.Lines[J]);
    Irgendein Problem zwischen String und Integer... Wieso tritt das bei I nicht auf?
    Lösch "(Printer.Canvas.TextHeight('I') + 5)," dann gehts, hab den code übersehen.

  4. #4
    Vielen Dank für das mit dem Drucken, habe weitere Fragen. Zuerst die totale Noobfrage: Wie kann ich den Text, der in einer Memo dem Name der Memo angepasst wird, löschen? Dann eine Frage zu den Dialogs: Es gibt ja auch einen Save Dialog. Wie baue ich den ein, um die gesamte Form und alle Informationen als Datei abzuspeichern, bzw. mit dem Open Dialog zu laden?

  5. #5
    Zitat Zitat von PX Beitrag anzeigen
    Vielen Dank für das mit dem Drucken, habe weitere Fragen. Zuerst die totale Noobfrage: Wie kann ich den Text, der in einer Memo dem Name der Memo angepasst wird, löschen?
    Wie du dem Code entnehmen kannst greift man ist der Inhalt repräsentiert durch das Objekt Lines (TStrings).

    Zitat Zitat von PX Beitrag anzeigen
    Dann eine Frage zu den Dialogs: Es gibt ja auch einen Save Dialog. Wie baue ich den ein, um die gesamte Form und alle Informationen als Datei abzuspeichern, bzw. mit dem Open Dialog zu laden?
    Beide, Open- und Savedialog, können mit einer If-Abfrage und ihrer Funktion Execute ausgeführt werden. Der Rückgabewert ist dann bei Beiden in der property "FileName" zu finden. Beispielsweiße:
    Code:
    If SaveDialog.Execute then // Wenn User abgebrochen hat, dann nicht ausführen, sonst weiter
    begin
      SaveDialog.FileName := ChangeFileExt(SaveDialog.FileName, '.txt');
      // Nur zur sicherheit ändern, sonst gibts manchmal Fehler
      memText.Linex.SaveToFile(SaveDialog.FileName);
    end;
    Speichern einer kompletten Form kannst du natürlich als fertige Funktion vergessen, man kann nicht jedes Objekt einfach so in eine Datei speichern. Zu diesem Thema kannst du dir mal INI und XML ansehen. Auch typisierte Dateien ("records") lassen sich wunderbar speichern. Ist zwar ein wenig OldSchool und nur zu empfehlen wenn du sicher bist das nur (d)ein Delphi Programm die Daten jemals nutzen muss.

  6. #6
    An dieser Stelle moechte ich auch einfach mal auf die ausgezeichnete kontextsensitive Hilfe von Delphi verweisen. Meinerzeit habe ich ohne Handbuch, Tutorials oder Internet Delphi ausschliesslich ueber seine Hilfefunktion gelernt.

    Strg + F1 auf einem bestimmten Wort im Quelltext, einer Property im Object Inspector oder einem Icon in einem der Reiter und man hat eine wunderbare Hilfe mit Erklaehrung der funktionalitaet, aller Eigenschaften und Methoden und teilweise sogar Beispielquelltexte.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •