![]() |
Memo text ausdrucken
Hey,
ich schreib grad eine art texteditor, eigentlich eine Memo componente und ein paar buttons. Auf jedenfall will ich jetzt den Text in der Memo ausdrucken. Dann kommt immer ein Fehler und eine verlinkung auf printers.pas
Code:
ich habs auch mal ganz simple gemacht und aus dem Lazarusforum den example code rauskopiert.
//Raise error if Printer.Printing is not Value
procedure TPrinter.CheckPrinting(Value: Boolean); begin if Printing<>Value then begin if Value then raise EPrinter.Create('Printer is not printing') else raise Eprinter.Create('Printer is printing'); end; end; ![]()
Code:
gleicher Fehler!!!
procedure TForm1.PrintBtnClick(Sender: TObject);
const LEFTMARGIN = 100; HEADLINE = 'I Printed My Very First Text On '; var YPos, LineHeight, VerticalMargin: Integer; SuccessString: String; begin with Printer do try BeginDoc; Canvas.Font.Name := 'Courier New'; Canvas.Font.Size := 10; Canvas.Font.Color := clBlack; LineHeight := Round(1.2 * Abs(Canvas.TextHeight('I'))); VerticalMargin := 4 * LineHeight; // There we go YPos := VerticalMargin; SuccessString := HEADLINE + DateTimeToStr(Now); Canvas.TextOut(LEFTMARGIN, YPos, SuccessString); finally EndDoc; end; end; kann mir einer sagen warum? im vorraus vielen dank für die antwort (hoffentlich);D lg Finki |
AW: Memo text ausdrucken
Zitat:
|
AW: Memo text ausdrucken
Sicher.
Da kommt einfach eine Meldung das ein Fehler in printers.pas in Zeile 504 aufgetreten ist. |
AW: Memo text ausdrucken
Und lautet der Fehler
Zitat:
Zitat:
|
AW: Memo text ausdrucken
OK, mutmaßen wir mal weiter. Du kannst dein Projekt erst gar nicht kompilieren, weil ein Fehler in der Printers.pas in Zeile 504 auftritt, von dem Du uns nun sicher auch noch die Compiler-Fehlermeldung mitteilen willst.
|
AW: Memo text ausdrucken
Sry, also komplementieren geht Programm startet auch.
Aber wenn ich dann was drucken will kommt ein Dialog wo darauf hin gewissen wird das ein error in printers.pas in 504 aufgetreten ist mehr nicht. |
AW: Memo text ausdrucken
Tu Dir und uns mal einen Gefallen: wenn die Fehlermeldung kommt, drückst Du STRG+C, erstellst hier einen neuen Beitrag und drückst dort STRG+V. Damit sehen wir dann den ganz genauen Wortlaut.
|
AW: Memo text ausdrucken
Ich kann nix aus der Fehler Meldung raus kopieren. Aber ich kann euch ein Bild (Screenshot) hochladen. Oder was is besser kann beides erst daheim machen (in 15min).
|
AW: Memo text ausdrucken
Liste der Anhänge anzeigen (Anzahl: 1)
Also hier ist die Meldung
|
AW: Memo text ausdrucken
Interessant, das sieht nach Speicherfehler aus. Die Printer-Instanz ist aber gültig, oder muss die in Lazarus von Hand instanziert werden?
|
AW: Memo text ausdrucken
????????
was meinst du damit? die printers.pas ist vorgegeben da hab ich nix geändert |
AW: Memo text ausdrucken
Ich meinte: wenn ich in Delphi auf Printer zugreife, wird eine Instanz von TPrinter erstellt, sofern es sie vorher noch nicht gab. Sollte das unter Lazarus nicht so sein (was ich allerdings nicht glaube), dann greifst Du auf ein Objekt zu, das gar nicht da ist. Ich weiß nicht, ob das Folgende funktioniert, aber einen Versuch wäre es wert:
Delphi-Quellcode:
var
MyPrinter: TPrinter; begin MyPrinter := TPrinter.Create; try MyPrinter.BeginDoc; try MyPrinter.Canvas.TextOut(100, 100, 'Testdruck'); finally MyPrinter.EndDoc; end; finally MyPrinter.Free; end; end; |
AW: Memo text ausdrucken
Liste der Anhänge anzeigen (Anzahl: 1)
Hey (cool) jetzt kommt der Fehler weiter vornen in der printers.pas
in Zeile 303
Code:
also ich denke Lazarus mach das von allein, oder? :D
constructor TPrinter.Create;
begin if ClassType=TPrinter then raise Exception.Create('TPrinter is an abstract base class.' +' Please use a printer implementation like the package printers4lazarus.'); Inherited Create; fPrinterIndex:=-1; //By default, use the default printer fCanvas:=nil; fPaperSize:=nil; fTitle:=''; end; |
AW: Memo text ausdrucken
Achso, dann gibt es also Ableitungen von TPrinter. Nun weiß ich leider nicht weiter, da ich kein Lazarus installiert habe, da muss jemand Anderes einspringen.
|
AW: Memo text ausdrucken
Gut du hast es versucht dafür bin ich dir schon dankbar. Also vielen vielen dank.
|
AW: Memo text ausdrucken
also hier ist mal der code wie es aktuell ist wobei der besagte fehler auftritt
die uses
Code:
die procedure
uses
Classes, SysUtils, FileUtil, PrintersDlgs, Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls, Buttons, EditBtn, ExtCtrls, PopupNotifier, Printers, Windows, Menus, Grids;
Code:
der button btnPrinttype { TForm1 } TForm1 = class(TForm) PrintDialog1: TPrintDialog; btnPrint: TSpeedButton; procedure btnPrintClick(Sender: TObject);
Code:
und die procedure Drucken
procedure TForm1.btnPrintClick(Sender: TObject);
begin Drucken(Memo.Lines); end;
Code:
procedure TForm1.Drucken(sl: TStrings);
var zeile, x, y: integer; breite, hoehe, randlinks, randoben: integer; begin if PrintDialog1.Execute then begin Printer.BeginDoc; //Druckjob beginnen SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC); //Umstellen auf 1/10 mm //Schrift-Einstellungen: Printer.Canvas.Font.Name:='Courier New'; Printer.Canvas.Brush.Color:=clWhite; Printer.Canvas.Font.Height:=50; //5 mm //Blattgöße in 1/10 mm ermitteln: breite:=GetDeviceCaps(Printer.Canvas.Handle, HORZSIZE)*10; hoehe:=GetDeviceCaps(Printer.Canvas.Handle, VERTSIZE)*10; randlinks:=60; //0,6 cm randoben:=150; //1,5 cm x:=randlinks; y:=randoben*-1; for zeile:=0 to sl.Count-1 do begin if -y>(hoehe-2*randoben) then begin y:=randoben*-1; Printer.NewPage; end; if y=-randoben then begin Printer.Canvas.Font.Style:=[fsbold]; Printer.Canvas.TextOut(x, y, 'Seite '+ IntToStr(Printer.PageNumber)); Printer.Canvas.Font.Style:=[]; y:=y-Printer.Canvas.TextHeight(sl[zeile]); end; Printer.Canvas.TextOut(x, y, sl[zeile]); y:=y-Printer.Canvas.TextHeight(sl[zeile]); end; Printer.EndDoc; end; end; |
AW: Memo text ausdrucken
Da hast du dir echt einen tollen "Fehler" ausgesucht :lol:
Es sollte genügen, wenn du die TPrintersDialog Komponente (unter dem Reiter 'Dialoge') auf das Formular ziehst (nur 'PrintersDlgs' in die uses einzufügen klappt irgendwie nicht :?) |
AW: Memo text ausdrucken
Zitat:
Zitat:
|
AW: Memo text ausdrucken
Also .. bei mir klappt es wie's Brezelbacken :shock:
habe deinen Code 1:1 übernommen und ihm ein Memo1.Lines übergeben - Drucker Auswahl erschienen und ich konnte drucken. An welcher Stelle kommt denn der Fehler genau? einfach mal einen Brakepoint nach dem Begin setzen (in die Zeile klicken, F5 drücken) und dann durch den Code bewegen (F8) |
AW: Memo text ausdrucken
Kann es evtl daran liegen das meine memo componente erst während dem ausführen des Programms erstellt wird?
|
AW: Memo text ausdrucken
|
AW: Memo text ausdrucken
Zitat:
juhu bei mir funktioniert es auch wenn ich ein neues Programm mache allerdings immer noch nicht im anderen Programm :( bringt es euch was wenn ich mal den ganzen code reinstelle? |
AW: Memo text ausdrucken
vielleicht findet sich ja beim debuggen etwas :cyclops:
Und mich interessiert langsam, was da bei dir nicht klappt |
AW: Memo text ausdrucken
Also gut? Reicht der code?
Text_U
Code:
Frage_uunit Text_U; //Scrollen Hinzufügen {$mode objfpc}{$H+} interface uses * Classes, SysUtils, FileUtil, PrintersDlgs, Forms, Controls, Graphics, Dialogs, * StdCtrls, ComCtrls, Buttons, EditBtn, ExtCtrls, PopupNotifier, Printers, Windows, * Menus, Grids; type * { TForm1 } * TForm1 = class(TForm) *** btn1: TButton; *** btnNeu: TSpeedButton; *** ColorDialog1: TColorDialog; *** Image1: TImage; *** Memo: TMemo; *** OpenDialog1: TOpenDialog; *** btnEinfuegen: TSpeedButton; *** OpenDialog2: TOpenDialog; *** PopUp: TPopupNotifier; *** PrintDialog1: TPrintDialog; *** SaveDialog1: TSaveDialog; *** btnOeffnen: TSpeedButton; *** btnTxtFarbe: TSpeedButton; *** btnSave: TSpeedButton; *** btnPrint: TSpeedButton; *** TabCon: TTabControl; *** TBar: TToolBar; *** procedure btn1Click(Sender: TObject); *** procedure btnEinfuegenClick(Sender: TObject); *** procedure btnNeuClick(Sender: TObject); *** procedure btnOeffnenClick(Sender: TObject); *** procedure btnSaveClick(Sender: TObject); *** procedure btnTxtFarbeClick(Sender: TObject); *** procedure FormCreate(Sender: TObject); *** procedure btnPrintClick(Sender: TObject); *** procedure TabConChange(Sender: TObject); * private *** { private declarations } * public * procedure Drucken(sl: TStrings); *** { public declarations } * end; var * Form1: TForm1; * MyDataFile : string ; * MyDataFile2 : string ; * merk : boolean; * Memo: TMemo; * Printer: TPrinter; implementation uses * Frage_U; {$R *.lfm} { TForm1 } //ERSTELLEN procedure TForm1.FormCreate(Sender: TObject); begin * merk:=false; * Memo.Caption := ''; * Memo.SetBounds(0,TabCon.Height,Form1.Width,Form1.Height-TabCon.Height); //TabCon * TabCon.SetBounds(0,0,Form1.Width,73); * TBar.SetBounds(0,0,Form1.Width,40); //btn1 * btn1.SetBounds(100,100,50,50); * btn1.Visible:=false; //btnTxtFarbe * btnTxtFarbe.SetBounds(0,0,75,38); * btnTxtFarbe.Visible:=false; * btnTxtFarbe.Caption:='Farbe'; //btnEinfügen * btnEinfuegen.SetBounds(0,0,75,38); * btnEinfuegen.Visible:=false; * btnEinfuegen.Caption:='Bild'; //btnSave * btnSave.SetBounds(btnNeu.BoundsRect.Right+1,0,75,38); //btnÖffnen * btnOeffnen.SetBounds(btnSave.BoundsRect.Right+1,0,75,38); * btnOeffnen.Caption:='Öffnen'; //btnPrint * btnPrint.SetBounds(btnOeffnen.BoundsRect.Right+1,0,75,38); * btnPrint.Caption:='Drucken'; end; procedure TForm1.btnPrintClick(Sender: TObject); begin Drucken(Memo.Lines); end; procedure TForm1.Drucken(sl: TStrings); var zeile, x, y: integer; breite, hoehe, randlinks, randoben: integer; begin if PrintDialog1.Execute then begin ** Printer.BeginDoc; //Druckjob beginnen ** SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC); //Umstellen auf 1/10 mm ** //Schrift-Einstellungen: ** Printer.Canvas.Font.Name:='Courier New'; ** Printer.Canvas.Brush.Color:=clWhite; ** Printer.Canvas.Font.Height:=50; //5 mm ** //Blattgöße in 1/10 mm ermitteln: ** breite:=GetDeviceCaps(Printer.Canvas.Handle, HORZSIZE)*10; ** hoehe:=GetDeviceCaps(Printer.Canvas.Handle, VERTSIZE)*10; ** randlinks:=60; //0,6 cm ** randoben:=150; //1,5 cm ** x:=randlinks; ** y:=randoben*-1; ** for zeile:=0 to sl.Count-1 do **** begin ****** if -y>(hoehe-2*randoben) then ********* begin ********* y:=randoben*-1; ********* Printer.NewPage; ********* end; ****** if y=-randoben then ********* begin ********* Printer.Canvas.Font.Style:=[fsbold]; ********* Printer.Canvas.TextOut(x, y, 'Seite '+ ********* IntToStr(Printer.PageNumber)); ********* Printer.Canvas.Font.Style:=[]; ********* y:=y-Printer.Canvas.TextHeight(sl[zeile]); ********* end; **** Printer.Canvas.TextOut(x, y, sl[zeile]); **** y:=y-Printer.Canvas.TextHeight(sl[zeile]); **** end; ** Printer.EndDoc; end; end; //LEISTE procedure TForm1.TabConChange(Sender: TObject); begin * btnSave.Visible:=false; * btnNeu.Visible:=false; * btnEinfuegen.Visible:=false; * btnOeffnen.Visible:=false; * btnTxtFarbe.Visible:=false; * btnPrint.Visible:=false; ** case TabCon.TabIndex of ** 0: begin ****** btnNeu.Visible:=true; ****** btnOeffnen.Visible:=true; ****** btnSave.Visible:=true; ****** btnPrint.Visible:=true; ***** end; ** 1: begin ****** btnEinfuegen.Visible:=true; ***** end; ** 2: begin ****** btnTxtFarbe.Visible:=true; ***** end; ** end; end; //NEU procedure TForm1.btnNeuClick(Sender: TObject); var * Form2: TForm; begin //Form2 Erstellen Form2 := TForm2.Create(Self); try * //Wenn Memo vorhanden * if merk=false then **** begin ******** Form2.ShowOnTop; ******** Form2.SetBounds(840-200,525-50,400,100); ******** Form1.Enabled:=false; **** end * //Wenn Memo nicht vorhanden * else *** begin * merk:=false; * Memo.Caption := ''; * Memo.SetBounds(0,TabCon.Height,Form1.Width,Form1.Height-TabCon.Height); *** end; finally end; end; //ÖFFNEN procedure TForm1.btnOeffnenClick(Sender: TObject); begin //Nur .txt Dateien werden angezeigt OpenDialog2.Filter := 'Text|*.txt' ; //Öffnen befehl if OpenDialog2.Execute then ** begin MyDataFile2 := OpenDialog2.FileName ; ** end; //Memo wird erstellt Memo.SetBounds(0,Form1.Top-TabCon.BoundsRect.Bottom,Form1.Width,Form1.Height-TabCon.Height); Memo.Lines.LoadFromFile(MyDataFile2); merk:=false; end; //SAVE procedure TForm1.btnSaveClick(Sender: TObject); begin * SaveDialog1.Execute; * Memo.Lines.SaveToFile( Form1.SaveDialog1.Filename + '.txt'); end; //FARBE procedure TForm1.btnTxtFarbeClick(Sender: TObject); begin * ColorDialog1.Execute; *// Memo.Font.Color:=ColorDialog1.Color; end; //BILD EINFÜGEN procedure TForm1.btnEinfuegenClick(Sender: TObject); var * Image: TImage; begin * OpenDialog1.Filter := 'Bilder|*.jpg;*.png;*.jpeg;*.bmp' ; * if OpenDialog1.Execute then **** begin * MyDataFile := OpenDialog1.FileName ; * Image:=TImage.Create(Self); * Image.Parent := Self; * Image.AutoSize:=true; * Image.Picture.LoadFromFile(MyDataFile); * Image.Enabled:=true; **** end; end; //SINNLOSER BUTTON procedure TForm1.btn1Click(Sender: TObject); begin //PopUp * { if klaus=true then ***** begin ******* PopUp.Destroy; ******* klaus:=false; ***** end ** else ** begin ** PopUp.ShowAtPos(Form1.BoundsRect.Left+btn1.BoundsRect.Right-5,Form1.BoundsRect.Top+btn1.BoundsRect.Top-50); ** PopUp.Text:='dieser Button hat keinen Sinn :D'; ** PopUp.Title:='Hilfe zu' + ' ' + btn1.Name; ** klaus:=true; ** end; } end; end. {var * Button: TButton; begin * Button:=TButton.Create(Self); * Button.Parent := Self; * Button.Caption := 'Alter Titel'; * Button.Left := 100; * Button.Top := 100; * Button.OnClick := Button2Click; end;*** }
Code:
unit Frage_u; {$mode objfpc}{$H+} interface uses * Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons, EditBtn, ExtCtrls; type * { TForm2 } * TForm2 = class(TForm) *** btnNein: TSpeedButton; *** btnJa: TSpeedButton; *** procedure btnJaClick(Sender: TObject); *** procedure btnNeinClick(Sender: TObject); *** procedure FormCreate(Sender: TObject); * private *** { private declarations } * public *** { public declarations } * end; var * Form2: TForm2; * lblSpeichern: TLabel; implementation * uses *** Text_U; {$R *.lfm} { TForm2 } procedure TForm2.FormCreate(Sender: TObject); begin ** Form2.SetBounds(840-200,525-50,400,100); //** Form2.SetBounds(840-200,525-50,400,100); ** Form2.Caption:='Speichern?'; ** lblSpeichern:=TLabel.Create(Self); ** lblSpeichern.Parent := Self; ** lblSpeichern.SetBounds(30,25,350,25); ** lblSpeichern.Caption:='Sie hab noch ein Dokument offen. Wollen sie dieses zuerst speichern?'; ** btnJa.SetBounds(135,60,60,30); ** btnJa.Caption:='&Ja'; ** btnNein.SetBounds(btnJa.BoundsRect.Right+10,60,60,30); ** btnNein.Caption:='&Nein'; end; procedure TForm2.btnNeinClick(Sender: TObject); begin //** Form1 := TForm1.Can; ** Form1.Enabled:=true; ** Form1.ShowOnTop; ** Close; * // Form2.Visible:=false; end; procedure TForm2.btnJaClick(Sender: TObject); var * var1: integer; begin ** for var1:=1 to 1 do ** begin **** Form1.SaveDialog1.Execute; **** Form1.Memo.Lines.SaveToFile( Form1.SaveDialog1.Filename + '.txt'); **** merk:=true; ** end; **** Form1.Memo.Caption:=''; **** Form1.Enabled:=true; **** Form1.ShowOnTop; **** merk:=false; * {** Form1.Memo:=TMemo.Create(Self); **** Form1.Memo.Parent := Form1; **** Form1.Memo.Caption := '';* } **** Form1.Memo.SetBounds(0,Form1.TabCon.Height,Form1.Width,Form1.Height-Form1.TabCon.Height); **** Close; end; end. |
AW: Memo text ausdrucken
Die globale Variable "Memo" wegmachen, denn du hast schon eine Variable mit dem Namen "Memo" in Form1.
|
AW: Memo text ausdrucken
Zitat:
So weit ich sehen kann, hast du Text_U nicht in den uses deiner Frage_U eingebunden :?: Eigentlich dürfte er dann aber schon im Compiler meckern .. trotzdem könnte es daran liegen, dass er auf ein nicht vorhandenes Memo zugreifen will. Probiere es einfach mal das Memo Feld nicht erst zur Laufzeit zu erzeugen (sofern das nicht einen tieferen Sinn hat) |
AW: Memo text ausdrucken
Ja weis ich ich hatte anfangs die memo erst im Programm Verlauf erstellt. Aber das ändert nichts oder?
|
AW: Memo text ausdrucken
Zitat:
Delphi-Quellcode:
ist eingebunden.
Text_U
@Finki Bitte entferne doch die ganzen * in dem Code und benutze die Delphi-Tags
Code:
dann sieht das so aus
[DELPHI]
procedure Foo; begin end; [/DELPHI]
Delphi-Quellcode:
procedure Foo;
begin end; |
AW: Memo text ausdrucken
Zitat:
|
AW: Memo text ausdrucken
Delphi-Quellcode:
unit Text_U; //Scrollen Hinzufügen {$mode objfpc}{$H+} interface uses * Classes, SysUtils, FileUtil, PrintersDlgs, Forms, Controls, Graphics, Dialogs, * StdCtrls, ComCtrls, Buttons, EditBtn, ExtCtrls, PopupNotifier, Printers, Windows, * Menus, Grids; type * { TForm1 } * TForm1 = class(TForm) *** btn1: TButton; *** btnNeu: TSpeedButton; *** ColorDialog1: TColorDialog; *** Image1: TImage; *** Memo: TMemo; *** OpenDialog1: TOpenDialog; *** btnEinfuegen: TSpeedButton; *** OpenDialog2: TOpenDialog; *** PopUp: TPopupNotifier; *** PrintDialog1: TPrintDialog; *** SaveDialog1: TSaveDialog; *** btnOeffnen: TSpeedButton; *** btnTxtFarbe: TSpeedButton; *** btnSave: TSpeedButton; *** btnPrint: TSpeedButton; *** TabCon: TTabControl; *** TBar: TToolBar; *** procedure btn1Click(Sender: TObject); *** procedure btnEinfuegenClick(Sender: TObject); *** procedure btnNeuClick(Sender: TObject); *** procedure btnOeffnenClick(Sender: TObject); *** procedure btnSaveClick(Sender: TObject); *** procedure btnTxtFarbeClick(Sender: TObject); *** procedure FormCreate(Sender: TObject); *** procedure btnPrintClick(Sender: TObject); *** procedure TabConChange(Sender: TObject); * private *** { private declarations } * public * procedure Drucken(sl: TStrings); *** { public declarations } * end; var * Form1: TForm1; * MyDataFile : string ; * MyDataFile2 : string ; * merk : boolean; * Memo: TMemo; * Printer: TPrinter; implementation uses * Frage_U; {$R *.lfm} { TForm1 } //ERSTELLEN procedure TForm1.FormCreate(Sender: TObject); begin * merk:=false; * Memo.Caption := ''; * Memo.SetBounds(0,TabCon.Height,Form1.Width,Form1.Height-TabCon.Height); //TabCon * TabCon.SetBounds(0,0,Form1.Width,73); * TBar.SetBounds(0,0,Form1.Width,40); //btn1 * btn1.SetBounds(100,100,50,50); * btn1.Visible:=false; //btnTxtFarbe * btnTxtFarbe.SetBounds(0,0,75,38); * btnTxtFarbe.Visible:=false; * btnTxtFarbe.Caption:='Farbe'; //btnEinfügen * btnEinfuegen.SetBounds(0,0,75,38); * btnEinfuegen.Visible:=false; * btnEinfuegen.Caption:='Bild'; //btnSave * btnSave.SetBounds(btnNeu.BoundsRect.Right+1,0,75,38); //btnÖffnen * btnOeffnen.SetBounds(btnSave.BoundsRect.Right+1,0,75,38); * btnOeffnen.Caption:='Öffnen'; //btnPrint * btnPrint.SetBounds(btnOeffnen.BoundsRect.Right+1,0,75,38); * btnPrint.Caption:='Drucken'; end; procedure TForm1.btnPrintClick(Sender: TObject); begin Drucken(Memo.Lines); end; procedure TForm1.Drucken(sl: TStrings); var zeile, x, y: integer; breite, hoehe, randlinks, randoben: integer; begin if PrintDialog1.Execute then begin ** Printer.BeginDoc; //Druckjob beginnen ** SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC); //Umstellen auf 1/10 mm ** //Schrift-Einstellungen: ** Printer.Canvas.Font.Name:='Courier New'; ** Printer.Canvas.Brush.Color:=clWhite; ** Printer.Canvas.Font.Height:=50; //5 mm ** //Blattgöße in 1/10 mm ermitteln: ** breite:=GetDeviceCaps(Printer.Canvas.Handle, HORZSIZE)*10; ** hoehe:=GetDeviceCaps(Printer.Canvas.Handle, VERTSIZE)*10; ** randlinks:=60; //0,6 cm ** randoben:=150; //1,5 cm ** x:=randlinks; ** y:=randoben*-1; ** for zeile:=0 to sl.Count-1 do **** begin ****** if -y>(hoehe-2*randoben) then ********* begin ********* y:=randoben*-1; ********* Printer.NewPage; ********* end; ****** if y=-randoben then ********* begin ********* Printer.Canvas.Font.Style:=[fsbold]; ********* Printer.Canvas.TextOut(x, y, 'Seite '+ ********* IntToStr(Printer.PageNumber)); ********* Printer.Canvas.Font.Style:=[]; ********* y:=y-Printer.Canvas.TextHeight(sl[zeile]); ********* end; **** Printer.Canvas.TextOut(x, y, sl[zeile]); **** y:=y-Printer.Canvas.TextHeight(sl[zeile]); **** end; ** Printer.EndDoc; end; end; //LEISTE procedure TForm1.TabConChange(Sender: TObject); begin * btnSave.Visible:=false; * btnNeu.Visible:=false; * btnEinfuegen.Visible:=false; * btnOeffnen.Visible:=false; * btnTxtFarbe.Visible:=false; * btnPrint.Visible:=false; ** case TabCon.TabIndex of ** 0: begin ****** btnNeu.Visible:=true; ****** btnOeffnen.Visible:=true; ****** btnSave.Visible:=true; ****** btnPrint.Visible:=true; ***** end; ** 1: begin ****** btnEinfuegen.Visible:=true; ***** end; ** 2: begin ****** btnTxtFarbe.Visible:=true; ***** end; ** end; end; //NEU procedure TForm1.btnNeuClick(Sender: TObject); var * Form2: TForm; begin //Form2 Erstellen Form2 := TForm2.Create(Self); try * //Wenn Memo vorhanden * if merk=false then **** begin ******** Form2.ShowOnTop; ******** Form2.SetBounds(840-200,525-50,400,100); ******** Form1.Enabled:=false; **** end * //Wenn Memo nicht vorhanden * else *** begin * merk:=false; * Memo.Caption := ''; * Memo.SetBounds(0,TabCon.Height,Form1.Width,Form1.Height-TabCon.Height); *** end; finally end; end; //ÖFFNEN procedure TForm1.btnOeffnenClick(Sender: TObject); begin //Nur .txt Dateien werden angezeigt OpenDialog2.Filter := 'Text|*.txt' ; //Öffnen befehl if OpenDialog2.Execute then ** begin MyDataFile2 := OpenDialog2.FileName ; ** end; //Memo wird erstellt Memo.SetBounds(0,Form1.Top-TabCon.BoundsRect.Bottom,Form1.Width,Form1.Height-TabCon.Height); Memo.Lines.LoadFromFile(MyDataFile2); merk:=false; end; //SAVE procedure TForm1.btnSaveClick(Sender: TObject); begin * SaveDialog1.Execute; * Memo.Lines.SaveToFile( Form1.SaveDialog1.Filename + '.txt'); end; //FARBE procedure TForm1.btnTxtFarbeClick(Sender: TObject); begin * ColorDialog1.Execute; *// Memo.Font.Color:=ColorDialog1.Color; end; //BILD EINFÜGEN procedure TForm1.btnEinfuegenClick(Sender: TObject); var * Image: TImage; begin * OpenDialog1.Filter := 'Bilder|*.jpg;*.png;*.jpeg;*.bmp' ; * if OpenDialog1.Execute then **** begin * MyDataFile := OpenDialog1.FileName ; * Image:=TImage.Create(Self); * Image.Parent := Self; * Image.AutoSize:=true; * Image.Picture.LoadFromFile(MyDataFile); * Image.Enabled:=true; **** end; end; //SINNLOSER BUTTON procedure TForm1.btn1Click(Sender: TObject); begin //PopUp * { if klaus=true then ***** begin ******* PopUp.Destroy; ******* klaus:=false; ***** end ** else ** begin ** PopUp.ShowAtPos(Form1.BoundsRect.Left+btn1.BoundsRect.Right-5,Form1.BoundsRect.Top+btn1.BoundsRect.Top-50); ** PopUp.Text:='dieser Button hat keinen Sinn :D'; ** PopUp.Title:='Hilfe zu' + ' ' + btn1.Name; ** klaus:=true; ** end; } end; end. {var * Button: TButton; begin * Button:=TButton.Create(Self); * Button.Parent := Self; * Button.Caption := 'Alter Titel'; * Button.Left := 100; * Button.Top := 100; * Button.OnClick := Button2Click; end;*** }
Delphi-Quellcode:
unit Frage_u;
{$mode objfpc}{$H+} interface uses * Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons, EditBtn, ExtCtrls; type * { TForm2 } * TForm2 = class(TForm) *** btnNein: TSpeedButton; *** btnJa: TSpeedButton; *** procedure btnJaClick(Sender: TObject); *** procedure btnNeinClick(Sender: TObject); *** procedure FormCreate(Sender: TObject); * private *** { private declarations } * public *** { public declarations } * end; var * Form2: TForm2; * lblSpeichern: TLabel; implementation * uses *** Text_U; {$R *.lfm} { TForm2 } procedure TForm2.FormCreate(Sender: TObject); begin ** Form2.SetBounds(840-200,525-50,400,100); //** Form2.SetBounds(840-200,525-50,400,100); ** Form2.Caption:='Speichern?'; ** lblSpeichern:=TLabel.Create(Self); ** lblSpeichern.Parent := Self; ** lblSpeichern.SetBounds(30,25,350,25); ** lblSpeichern.Caption:='Sie hab noch ein Dokument offen. Wollen sie dieses zuerst speichern?'; ** btnJa.SetBounds(135,60,60,30); ** btnJa.Caption:='&Ja'; ** btnNein.SetBounds(btnJa.BoundsRect.Right+10,60,60,30); ** btnNein.Caption:='&Nein'; end; procedure TForm2.btnNeinClick(Sender: TObject); begin //** Form1 := TForm1.Can; ** Form1.Enabled:=true; ** Form1.ShowOnTop; ** Close; * // Form2.Visible:=false; end; procedure TForm2.btnJaClick(Sender: TObject); var * var1: integer; begin ** for var1:=1 to 1 do ** begin **** Form1.SaveDialog1.Execute; **** Form1.Memo.Lines.SaveToFile( Form1.SaveDialog1.Filename + '.txt'); **** merk:=true; ** end; **** Form1.Memo.Caption:=''; **** Form1.Enabled:=true; **** Form1.ShowOnTop; **** merk:=false; * {** Form1.Memo:=TMemo.Create(Self); **** Form1.Memo.Parent := Form1; **** Form1.Memo.Caption := '';* } **** Form1.Memo.SetBounds(0,Form1.TabCon.Height,Form1.Width,Form1.Height-Form1.TabCon.Height); **** Close; end; end. |
AW: Memo text ausdrucken
@Finki
Du kannst deine Beiträge 24h bearbeiten und die * haben im Quelltext doch auch nichts verloren (oder braucht dein Compiler das?) |
AW: Memo text ausdrucken
Ich hab da auch gar keine Sternchen in meinem Quellcode weis nicht woher die kommen
|
AW: Memo text ausdrucken
Nimm folgende 2 globalen Variaben raus :
Delphi-Quellcode:
var
Form1: TForm1; MyDataFile : string ; MyDataFile2 : string ; merk : boolean; // Memo: TMemo; <- WEG DAMIT // Printer: TPrinter; <- WEG DAMIT |
AW: Memo text ausdrucken
Zitat:
(ok, man könnte den Beitrag bearbeiten und diese Sternchen entfernen, aber das wäre zu einfach) |
AW: Memo text ausdrucken
Ich mache daheim man die leerzeichen raus dann müsste es ja gehen
|
AW: Memo text ausdrucken
Sodächen hier hammers ja
Delphi-Quellcode:
unit Text_U;
//Scrollen Hinzufügen {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, PrintersDlgs, Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls, Buttons, EditBtn, ExtCtrls, PopupNotifier, Printers, Windows, Menus, Grids; type { TForm1 } TForm1 = class(TForm) btn1: TButton; btnNeu: TSpeedButton; ColorDialog1: TColorDialog; Image1: TImage; Memo: TMemo; OpenDialog1: TOpenDialog; btnEinfuegen: TSpeedButton; OpenDialog2: TOpenDialog; PopUp: TPopupNotifier; PrintDialog1: TPrintDialog; SaveDialog1: TSaveDialog; btnOeffnen: TSpeedButton; btnTxtFarbe: TSpeedButton; btnSave: TSpeedButton; btnPrint: TSpeedButton; TabCon: TTabControl; TBar: TToolBar; procedure btn1Click(Sender: TObject); procedure btnEinfuegenClick(Sender: TObject); procedure btnNeuClick(Sender: TObject); procedure btnOeffnenClick(Sender: TObject); procedure btnSaveClick(Sender: TObject); procedure btnTxtFarbeClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btnPrintClick(Sender: TObject); procedure TabConChange(Sender: TObject); private { private declarations } public procedure Drucken(sl: TStrings); { public declarations } end; var Form1: TForm1; MyDataFile : string ; MyDataFile2 : string ; merk : boolean; Printer: TPrinter; implementation uses Frage_U; {$R *.lfm} { TForm1 } //ERSTELLEN procedure TForm1.FormCreate(Sender: TObject); begin merk:=false; Memo.Caption := ''; Memo.SetBounds(0,TabCon.Height,Form1.Width,Form1.Height-TabCon.Height); //TabCon TabCon.SetBounds(0,0,Form1.Width,73); TBar.SetBounds(0,0,Form1.Width,40); //btn1 btn1.SetBounds(100,100,50,50); btn1.Visible:=false; //btnTxtFarbe btnTxtFarbe.SetBounds(0,0,75,38); btnTxtFarbe.Visible:=false; btnTxtFarbe.Caption:='Farbe'; //btnEinfügen btnEinfuegen.SetBounds(0,0,75,38); btnEinfuegen.Visible:=false; btnEinfuegen.Caption:='Bild'; //btnSave btnSave.SetBounds(btnNeu.BoundsRect.Right+1,0,75,38); //btnÖffnen btnOeffnen.SetBounds(btnSave.BoundsRect.Right+1,0,75,38); btnOeffnen.Caption:='Öffnen'; //btnPrint btnPrint.SetBounds(btnOeffnen.BoundsRect.Right+1,0,75,38); btnPrint.Caption:='Drucken'; end; procedure TForm1.btnPrintClick(Sender: TObject); begin Drucken(Memo.Lines); end; procedure TForm1.Drucken(sl: TStrings); var zeile, x, y: integer; breite, hoehe, randlinks, randoben: integer; begin if PrintDialog1.Execute then begin Printer.BeginDoc; //Druckjob beginnen SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC); //Umstellen auf 1/10 mm //Schrift-Einstellungen: Printer.Canvas.Font.Name:='Courier New'; Printer.Canvas.Brush.Color:=clWhite; Printer.Canvas.Font.Height:=50; //5 mm //Blattgöße in 1/10 mm ermitteln: breite:=GetDeviceCaps(Printer.Canvas.Handle, HORZSIZE)*10; hoehe:=GetDeviceCaps(Printer.Canvas.Handle, VERTSIZE)*10; randlinks:=60; //0,6 cm randoben:=150; //1,5 cm x:=randlinks; y:=randoben*-1; for zeile:=0 to sl.Count-1 do begin if -y>(hoehe-2*randoben) then begin y:=randoben*-1; Printer.NewPage; end; if y=-randoben then begin Printer.Canvas.Font.Style:=[fsbold]; Printer.Canvas.TextOut(x, y, 'Seite '+ IntToStr(Printer.PageNumber)); Printer.Canvas.Font.Style:=[]; y:=y-Printer.Canvas.TextHeight(sl[zeile]); end; Printer.Canvas.TextOut(x, y, sl[zeile]); y:=y-Printer.Canvas.TextHeight(sl[zeile]); end; Printer.EndDoc; end; end; //LEISTE procedure TForm1.TabConChange(Sender: TObject); begin btnSave.Visible:=false; btnNeu.Visible:=false; btnEinfuegen.Visible:=false; btnOeffnen.Visible:=false; btnTxtFarbe.Visible:=false; btnPrint.Visible:=false; case TabCon.TabIndex of 0: begin btnNeu.Visible:=true; btnOeffnen.Visible:=true; btnSave.Visible:=true; btnPrint.Visible:=true; end; 1: begin btnEinfuegen.Visible:=true; end; 2: begin btnTxtFarbe.Visible:=true; end; end; end; //NEU procedure TForm1.btnNeuClick(Sender: TObject); var Form2: TForm; begin //Form2 Erstellen Form2 := TForm2.Create(Self); try //Wenn Memo vorhanden if merk=false then begin Form2.ShowOnTop; Form2.SetBounds(840-200,525-50,400,100); Form1.Enabled:=false; end //Wenn Memo nicht vorhanden else begin merk:=false; Memo.Caption := ''; Memo.SetBounds(0,TabCon.Height,Form1.Width,Form1.Height-TabCon.Height); end; finally end; end; //ÖFFNEN procedure TForm1.btnOeffnenClick(Sender: TObject); begin //Nur .txt Dateien werden angezeigt OpenDialog2.Filter := 'Text|*.txt' ; //Öffnen befehl if OpenDialog2.Execute then begin MyDataFile2 := OpenDialog2.FileName ; end; //Memo wird erstellt Memo.SetBounds(0,Form1.Top-TabCon.BoundsRect.Bottom,Form1.Width,Form1.Height-TabCon.Height); Memo.Lines.LoadFromFile(MyDataFile2); merk:=false; end; //SAVE procedure TForm1.btnSaveClick(Sender: TObject); begin SaveDialog1.Execute; Memo.Lines.SaveToFile( Form1.SaveDialog1.Filename + '.txt'); end; //FARBE procedure TForm1.btnTxtFarbeClick(Sender: TObject); begin ColorDialog1.Execute; // Memo.Font.Color:=ColorDialog1.Color; end; //BILD EINFÜGEN procedure TForm1.btnEinfuegenClick(Sender: TObject); var Image: TImage; begin OpenDialog1.Filter := 'Bilder|*.jpg;*.png;*.jpeg;*.bmp' ; if OpenDialog1.Execute then begin MyDataFile := OpenDialog1.FileName ; Image:=TImage.Create(Self); Image.Parent := Self; Image.AutoSize:=true; Image.Picture.LoadFromFile(MyDataFile); Image.Enabled:=true; end; end; //NOCH SINNLOSER BUTTON procedure TForm1.btn1Click(Sender: TObject); begin end; end. {var Button: TButton; begin Button:=TButton.Create(Self); Button.Parent := Self; Button.Caption := 'Alter Titel'; Button.Left := 100; Button.Top := 100; Button.OnClick := Button2Click; end; }
Delphi-Quellcode:
unit Frage_u;
{$mode objfpc}{$H+} interface usesClasses, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons, EditBtn, ExtCtrls; type { TForm2 } TForm2 = class(TForm)btnNein: TSpeedButton;btnJa: TSpeedButton; procedure btnJaClick(Sender: TObject); procedure btnNeinClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { private declarations } public { public declarations } end; var Form2: TForm2; lblSpeichern: TLabel; implementation uses Text_U; {$R *.lfm} { TForm2 } procedure TForm2.FormCreate(Sender: TObject); begin Form2.SetBounds(840-200,525-50,400,100); // Form2.SetBounds(840-200,525-50,400,100); Form2.Caption:='Speichern?'; lblSpeichern:=TLabel.Create(Self); lblSpeichern.Parent := Self; lblSpeichern.SetBounds(30,25,350,25); lblSpeichern.Caption:='Sie hab noch ein Dokument offen. Wollen sie dieses zuerst speichern?'; btnJa.SetBounds(135,60,60,30); btnJa.Caption:='&Ja'; btnNein.SetBounds(btnJa.BoundsRect.Right+10,60,60,30); btnNein.Caption:='&Nein'; end; procedure TForm2.btnNeinClick(Sender: TObject); begin // Form1 := TForm1.Can; Form1.Enabled:=true; Form1.ShowOnTop; Close; // Form2.Visible:=false; end; procedure TForm2.btnJaClick(Sender: TObject); var var1: integer; begin for var1:=1 to 1 do begin Form1.SaveDialog1.Execute; Form1.Memo.Lines.SaveToFile( Form1.SaveDialog1.Filename + '.txt'); merk:=true; end; Form1.Memo.Caption:=''; Form1.Enabled:=true; Form1.ShowOnTop; merk:=false; { Form1.Memo:=TMemo.Create(Self); Form1.Memo.Parent := Form1; Form1.Memo.Caption := ''; } Form1.Memo.SetBounds(0,Form1.TabCon.Height,Form1.Width,Form1.Height-Form1.TabCon.Height); Close; end; end. |
AW: Memo text ausdrucken
Zitat:
Delphi-Quellcode:
var
//Printer: TPrinter; <- WEG DAMIT ! |
AW: Memo text ausdrucken
Ja sry war mein Fehler
Ich habs draussen gehabt aber dann kam ein anderer Fehler. hätte ich vielleicht dazu schreiben sollen |
AW: Memo text ausdrucken
Zitat:
|
AW: Memo text ausdrucken
Zitat:
Delphi-Quellcode:
und dann irgendwo danach
var
Printer : TPrinter;
Delphi-Quellcode:
dann ist es doch mehr als logisch, dass dir da eine Zugriffsverletzung um die Ohren gehauen wird.
Printer.BeginDoc;
Oder hast du irgendwo in deinem Code der Variablen eine Instanz zugewiesen? Automatisch passiert das nämlich nicht. :!: Diese Printer-Variable muss weg, definitiv |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz