Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Ausdruck von Memo in Delphi will nicht klappen!!!

Thor_Delta / 4 Antworten / Baumansicht Nickles

Hallo DelphiFreaks!!

Ich programmiere jetzt seit genau 28 Tagen in Delphi rum und habe nun ein kleines Textverarbeitungs programm mit allen möglichen Feautures programmiert. z.B. einen best. Text mehrfach eifügen, memoText in word einfügen, MemoInhalt copieren, Feste begrüßungen zum einfügen, speicerhn, laden usw.

Das einzige, was jetzt noch fehlt, aber einfach nich klappen will ist, den Text auszudrucken. ich habe schon drei verschiedene Bücher consultiert, den Inhalt der DelphiHilfe direkt Übernommen, aber jedes mal kommt irgendwas von "Undeklared identifier".

eigentlich muss das noch ganz einfach gehen. Damit ihr noch mal besser gucken könnt íst hier der Quelltext der Hauptunit:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Menus;

type
TForm1 = class(TForm)
FontDialog1: TFontDialog;
ComboBox1: TComboBox;
MainMenu1: TMainMenu;
Datei1: TMenuItem;
Beenden1: TMenuItem;
Bearbeiten1: TMenuItem;
Schrift1: TMenuItem;
Memolschen1: TMenuItem;
SaveDialog1: TSaveDialog;
Speichern1: TMenuItem;
Bndigkeit1: TMenuItem;
WiederholenderText1: TMenuItem;
EigenerGru1: TMenuItem;
MemotoClipboard1: TMenuItem;
Memo1: TMemo;
Memocopieren1: TMenuItem;
Drucken1: TMenuItem;
PrintDialog1: TPrintDialog;
OpenDialog1: TOpenDialog;
Dateiffnen1: TMenuItem;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure ComboBox1Click(Sender: TObject);
procedure Memo1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure Memo1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure Beenden1Click(Sender: TObject);
procedure Schrift1Click(Sender: TObject);
procedure Memolschen1Click(Sender: TObject);
procedure FileSaveAs(Sender: TObject);
procedure Bndigkeit1Click(Sender: TObject);
procedure WiederholenderText1Click(Sender: TObject);
procedure EigenerGru1Click(Sender: TObject);
procedure MemotoClipboard1Click(Sender: TObject);
procedure Copy(Sender: TObject);
procedure OpenFile(Sender: TObject);



private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2, Unit3, comobj;

var grus: array[1..5] of string = (\'Hallo\', \'Guten Tag!\',
\'Sehr geehrter Herr\',
\'Sehr geehrte Frau\',
\'Mit freundlichen Grüßen\');
word : variant;

{$R *.DFM}






procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
for i := 1 to High(grus) do ComboBox1.Items.Add(grus[i]);
Form1.Memo1.Clear;
ComboBox1.ItemIndex := 0;
end;

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
ComboBox1.BeginDrag(False);
end;

procedure TForm1.Memo1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if Source is TComboBox then Accept := True;
end;

procedure TForm1.Memo1DragDrop(Sender, Source: TObject; X, Y: Integer);
var i: Integer;
begin
i := (Source as TComboBox).ItemIndex;
Memo1.Lines.Add ((Source as TComboBox).Items[i]);
end;


procedure TForm1.Beenden1Click(Sender: TObject);
begin
Close
end;

procedure TForm1.Schrift1Click(Sender: TObject);
var Font: TFont;
Color: TColor;
Size: Integer;
Style: TFontStyle;
Char: TFontCharset;
begin
FontDialog1.Execute;
Font := FontDialog1.Font;
Color := FontDialog1.Font.Color;
Size := FontDialog1.Font.Size;
Char := FontDialog1.Font.Charset;
Memo1.Font := FontDialog1.Font;
Memo1.Font.Color := FontDialog1.Font.Color;
Memo1.Font.Size := FontDialog1.Font.Size;
Memo1.Font.Charset := FontDialog1.Font.Charset;
Memo1.Font.Style := FontDialog1.Font.Style;
end;


procedure TForm1.Memolschen1Click(Sender: TObject);
begin
Memo1.Clear;
end;

procedure TForm1.FileSaveAs(Sender: TObject);
begin
If SaveDialog1.Execute then
begin
If FileExists(SaveDialog1.FileName) then
If MessageDlg(\'Die Datei\' +SaveDialog1.FileName
+ \'existiert bereits. Überschreiben?\',
mtConfirmation, [mbYes, mbNo], 0) mrYes then
Exit;
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
Memo1.Modified := False;
end;
end;

procedure TForm1.Bndigkeit1Click(Sender: TObject);
begin
Form2.Show
end;

procedure TForm1.WiederholenderText1Click(Sender: TObject);
begin
Form3.Show
end;

procedure TForm1.EigenerGru1Click(Sender: TObject);
begin
ComboBox1.Items.Add(InputBox(\'Gruß einfügen\',
\'Geben Sie den neuen Gruß ein!\', \'\'))
end;

procedure TForm1.MemotoClipboard1Click(Sender: TObject);
begin
try
word := CreateOleObject(\'Word.Application\');
except
ShowMessage(\'Word konnte nicht gestartet werden!\');
end;
word.Visible := True;
word.Visible := True;
word.Documents.Add;
If word.ActiveWindow.View.SplitSpecial 0 Then word.ActiveWindow.Panes[2].Close;
If (word.ActiveWindow.ActivePane.View.Type = 1) Or
(word.ActiveWindow.ActivePane.View.Type = 2) Or
(word.ActiveWindow.ActivePane.View.Type = 5) Then
word.ActiveWindow.ActivePane.View.Type := 3;
word.Selection.TypeText(Text:= Memo1.Text);

end;



procedure TForm1.Copy(Sender: TObject);
begin
Memo1.CopyToClipboard;
end;

procedure TForm1.OpenFile(Sender: TObject);
begin
If OpenDialog1.Execute then
try
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
except
begin
MessageDlg(\'Datei konnte nicht geöffnet werden\',
mtInformation, [mbOK], 0);
end;
end;
end;

end.


Danke für alle Hilfe,

Thor Delta


bei Antwort benachrichtigen
Borlander Thor_Delta „Ausdruck von Memo in Delphi will nicht klappen!!!“
Optionen

Hallo Thor_Delta,
zum Drucken benötigst Du auf jeden Fall die Unit Printers.
Den Quelltext zum Drucken kann ich in Deinem Posting leider nicht finden. Ich kann also auch nach keinem Fehler suchen.

Hier noch Anmerkungen zum Programm:

var grus: array[1..5] of string = (\'Hallo\', \'Guten Tag!\',
\'Sehr geehrter Herr\',
\'Sehr geehrte Frau\',
\'Mit freundlichen Grüßen\');
[...]
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
for i := 1 to High(grus) do ComboBox1.Items.Add(grus[i]);
Form1.Memo1.Clear;
ComboBox1.ItemIndex := 0;
end;


Die Items einer ComboBox kannst Du wesentlich einfacher über die Eigenschaft Items im Objektinspektor zuweisen.


procedure TForm1.FileSaveAs(Sender: TObject);
begin
If SaveDialog1.Execute then
begin
If FileExists(SaveDialog1.FileName) then
If MessageDlg(\'Die Datei\' +SaveDialog1.FileName
+ \'existiert bereits. Überschreiben?\',
mtConfirmation, [mbYes, mbNo], 0) mrYes then
Exit;
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
Memo1.Modified := False;
end;
end;


Auch hier gehts Einfacher: Über den Objektinspektor in Options die Option ofOverwritePrompt auf TRUE setzen.


Übrigens wird der Quelltext durch Einrückungen wesentlich übersichtlicher:
">procedure ...
begin
if ...
then ...
else begin
...
...
end;
end;




CU Borlander
bei Antwort benachrichtigen
Borlander Nachtrag zu: „Hallo Thor_Delta, zum Drucken benötigst Du auf jeden Fall die Unit Printers....“
Optionen

Das Einrücken ist leider nicht richtig rüber gekommen. Ist bei Dir wohl auch der Fall?!

bei Antwort benachrichtigen
Thor_Delta Borlander „Das Einrücken ist leider nicht richtig rüber gekommen. Ist bei Dir wohl auch...“
Optionen

Hi Borlander!

eingerückt habe ich natürlich!! Ansonsten blickt man ja gar nicht mehr
durch. das ist beim kopieren verloren gegangen.

Wegen dem Drucken:
Wenn ich das richtig gesehen habe, muss ich eine unit Printers machen, aber wie genau kann ich das dann dann machen??

erst eine Unit Printer, in der dann ja wohl der ganze Druckablauf rein soll. danach Für das OnKlick ereignis der schaltfläche einfach die in der Printer Unit abgegebene procedur aufrufen, oder muss z.B.
PrintDialog.Execute in die HauptUnit?????????


procedure TForml.FilePrint(Sender: TObject);
var n, m, maxText: word;
begin

If printDialogl.Execute Then
Begin
printer.Title := FFileName;
Printer.BeginDoc;
m := 0;
n := 0;
Printer.NewPage;
while m begin Printer.Canvas.TextOut(50, 50 + n, Memol.Lines [m]);

maxText :=
Printer.Canvas.TextHeight(Memol.Lines[m]);
inc(n,maxText);
If n >= Printer.PageHeight - 100
Then
begin
Printer.NewPage;
n := 0;
end;
inc(m);
end;
Printer.EndDoc;
end;
end;


So steht es einem der Bücher. Wenn ich dich richtig verstehe, dann ist das jetzt die printerUnit??

wie muss ich dann die procedur in der hauptunit einrichten??
ich habs glaub ich grad im buch gefunden, ich probiers gleich nochmal, eine anrwort wäre trotzdem nützlich..

Danke, Thot

bei Antwort benachrichtigen
Borlander Thor_Delta „Ausdruck von Memo in Delphi will nicht klappen!!!“
Optionen

Du musst die Unit printers in die USES-Klausel am Anfang der Unit einfügen in der Du auch den Druckcode plazieren willst. Wo Du den Druckcode plazierts ist also wirklich egal.

z.B.:
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Menus, printers;

Durch die Einbindung der printers-Unit kannst Du dann das TPrinter-Objekt verwenden.


CU Borlander

bei Antwort benachrichtigen