Autor Beitrag
PatrickJ
Hält's aus hier
Beiträge: 12

Win XP
Delphi 2005
BeitragVerfasst: So 06.08.06 17:13 
Hi zusammen,

bin grad am Programmieren und komm nicht weiter. Vielleicht weiß ja einer von euch ne Lösung.

In dem Programm wird ein Dialog-Fenster modal aufgerufen. In dem Fenster sind ein paar GroupBox-Elemente mit einigen Labels, nen Image-Element und noch nen paar Labels. Der gesamte Inhalt des Fensters soll ausgedruckt werden können.
Ich hab es mit Form2.Print versucht, jedoch gibts in der Exe bei jedem Druckversuch nur ne Fehlermeldung. Ich hab auch schon versucht mit Form2.GetFormImage nen Bitmap zu erstellen und das dann mit dem Drucker ausgeben zu lassen, jedoch gibts auch hier nur ne Fehlermeldung.
Ich glaube, da Form2.Print ja auf GetFormImage zurückgreift, wird das Problem daran liegen.

Hat einer von euch vielleicht ne Idee, wie ich den gesamten Fensterinhalt ausdrucken lassen kann?
Wär toll, wenn mir da einer weiterhelfen könnte.

Thanks

Moderiert von user profile iconChristian S.: Titel geändert.
Moderiert von user profile iconChristian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 06.08.2006 um 18:58
thkerkmann
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 20

Windows 7
Delphi 2010 Professional
BeitragVerfasst: So 06.08.06 17:44 
Hi,

wäre genauso toll, wenn Du uns mal die Fehlermeldung nennst. Normalerweise geht das nämlich mit Form.Print hervorragend.

Gruss

Thomas.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: So 06.08.06 17:49 
Wenn GetFormBitmap selbs geht, kann durchaus auch an falschen Druckereinstellungen liegen. Wie gesagt, sag mal welcher Fehler.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
PatrickJ Threadstarter
Hält's aus hier
Beiträge: 12

Win XP
Delphi 2005
BeitragVerfasst: So 06.08.06 17:54 
Hi,

wenn ich das Programm starte und dann drucken will, kommt bei mir jetzt die Fehlermeldung "Der Druckvorgang läuft."

ausblenden Delphi-Quelltext
1:
2:
3:
Printer.BeginDoc;
Form2.Print;
Printer.EndDoc;
jensenwb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: So 06.08.06 18:04 
Ich mache das bei mir immer nur mit

ausblenden Delphi-Quelltext
1:
form2.print;					


Und das klappt bei mir immer.
PatrickJ Threadstarter
Hält's aus hier
Beiträge: 12

Win XP
Delphi 2005
BeitragVerfasst: So 06.08.06 18:10 
Ich habs auch schon mal nur mit Form2.Print versucht. Jedoch kam da die Fehlermeldung:
"Zugriffsverletzung bei Adresse 0043F236 in Modul 'Projekt.exe'. Lesen von Adresse 00000000."

Wenn ichs mit Printer.BeginDoc und EndDoc mache, kommt dann die Meldung: "Der Druckvorgang läuft." Es befindet sich dann auch ein Dokument in der Warteschlange, das nach Beenden des Programms "gedruckt" wird, jedoch leer ist.
PatrickJ Threadstarter
Hält's aus hier
Beiträge: 12

Win XP
Delphi 2005
BeitragVerfasst: So 06.08.06 18:18 
ausblenden Delphi-Quelltext
1:
2:
img := Form2.GetFormImage;
img.SaveToFile(ExtractFilePath(Application.ExeName)+'Test.bmp');


Hab noch mal probiert, mit GetFormImage nen Bitmap zu bekommen. Kommt aber wieder die selbe Fehlermeldung, wie wenn ich versuche nur mit Form2.Print das Ganze zu drucken.
jensenwb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: So 06.08.06 18:46 
Ich habe es jetzt erstmal so versucht und es kommt zumindest erstmal das Formular auf Papier, jetzt muß man nur noch die Größe einstellen usw

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
  img: TBitmap;
  imgaus: TBitmap;
begin
  img := TBitMap.Create;
  img := Form1.GetFormImage;
  img.SaveToFile(ExtractFilePath(Application.ExeName)+'Test.bmp');
  imgaus := TBitMap.Create;
  imgaus.LoadFromFile('test.bmp');
  Printer.BeginDoc;
  Printer.Canvas.Draw(0, 0, imgaus);
  Printer.EndDoc;
end;


Ist vielleicht nicht die beste Lösung, aber funktioniert erstmal
PatrickJ Threadstarter
Hält's aus hier
Beiträge: 12

Win XP
Delphi 2005
BeitragVerfasst: So 06.08.06 19:06 
Ich habe es jetzt mal mit deiner Variante probiert und beim ersten Versuch vergessen aus Form1 Form2 zu machen und da hat es funktioniert und hat Form1 ausgedruckt. Ich hab es dann zu Form2 geändert und noch einmal probiert, was leider nicht funktioniert hat und das Programm reagierte nicht mehr.
jensenwb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: So 06.08.06 19:10 
Kannst du das mal mit Einzelschritt machen und dann sagen bei welcher Zeile er hängen bleibt.
PatrickJ Threadstarter
Hält's aus hier
Beiträge: 12

Win XP
Delphi 2005
BeitragVerfasst: So 06.08.06 19:40 
Es hängt an der Zeile "img := Form2.GetFormImage;".
Hab dann die Fehlermeldung "Im Projekt Projekt.exe ist eine Exception der Klasse ExceptionViolation mit der Meldung 'Zugriffsverletzung bei der Adresse 0043F276 in Modul 'Projekt.exe'. Lesen von Adresse 00000000' aufgetreten."
jensenwb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: So 06.08.06 19:47 
Hast du deine Form2 als Formular oder als Dialog erstellt.
PatrickJ Threadstarter
Hält's aus hier
Beiträge: 12

Win XP
Delphi 2005
BeitragVerfasst: So 06.08.06 19:54 
Ich hab Form2 als Dialog erstellt.
jensenwb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: So 06.08.06 19:58 
Ich werde es mal mit einen Dialogfenster probieren.
jensenwb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: So 06.08.06 20:03 
ich habe es jetzt mit einem DialogFenster probiert, bei mir geht es aber. Heißt dein Dialogfenster auch Form2
PatrickJ Threadstarter
Hält's aus hier
Beiträge: 12

Win XP
Delphi 2005
BeitragVerfasst: So 06.08.06 20:07 
Der Name ist Form2.
Könnte es vielleicht daran liegen, dass es modal erzeugt wird?
jensenwb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: So 06.08.06 20:09 
Ich habe es ja auch mit showmodal aufgerufen.

kannst du mal denn ganzen code deines dialogfenster geben.
PatrickJ Threadstarter
Hält's aus hier
Beiträge: 12

Win XP
Delphi 2005
BeitragVerfasst: So 06.08.06 20:18 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  ExtCtrls, StdCtrls, IniFiles, printers;

type
  TForm2 = class(TForm)
    Label0: TLabel;
    GroupBox1: TGroupBox;
    Zutat1: TLabel;
    Zutat2: TLabel;
    Zutat3: TLabel;
    Zutat5: TLabel;
    Zutat4: TLabel;
    Zutat0: TLabel;
    Zutat6: TLabel;
    Zutat7: TLabel;
    Zutat8: TLabel;
    Zutat9: TLabel;
    GroupBox3: TGroupBox;
    Deko1: TLabel;
    Deko2: TLabel;
    Deko3: TLabel;
    Deko4: TLabel;
    Deko0: TLabel;
    Label1: TLabel;
    Image1: TImage;
    Label2: TLabel;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

uses Unit1;
{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
var
  sl: TStringList;
  anz,i: integer;
  cocktail: string;
  ini: TIniFile;
begin
  sl := TStringList.Create;
  try
    anz := Form1.ListBox2.Items.Count;
    for i := 0 to anz-1 do
      if Form1.ListBox2.Selected[i]
        then Label0.Caption := Form1.ListBox2.Items.Strings[i];
  finally
    sl.Free;
  end;
  cocktail := Label0.Caption;
  ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Cocktails.ini');
  try
    if (ini.ReadString(cocktail,'Zutat0Mass','') = '')
      then Zutat0.Caption := ini.ReadString(cocktail,'Zutat0','')
      else Zutat0.Caption := ini.ReadString(cocktail,'Zutat0Mass','')+' '+ini.ReadString(cocktail,'Zutat0','');
    if (ini.ReadString(cocktail,'Zutat1Mass','') = '')
      then Zutat1.Caption := ini.ReadString(cocktail,'Zutat1','')
      else Zutat1.Caption := ini.ReadString(cocktail,'Zutat1Mass','')+' '+ini.ReadString(cocktail,'Zutat1','');
    if (ini.ReadString(cocktail,'Zutat2Mass','') = '')
      then Zutat2.Caption := ini.ReadString(cocktail,'Zutat2','')
      else Zutat2.Caption := ini.ReadString(cocktail,'Zutat2Mass','')+' '+ini.ReadString(cocktail,'Zutat2','');
    if (ini.ReadString(cocktail,'Zutat3Mass','') = '')
      then Zutat3.Caption := ini.ReadString(cocktail,'Zutat3','')
      else Zutat3.Caption := ini.ReadString(cocktail,'Zutat3Mass','')+' '+ini.ReadString(cocktail,'Zutat3','');
    if (ini.ReadString(cocktail,'Zutat4Mass','') = '')
      then Zutat4.Caption := ini.ReadString(cocktail,'Zutat4','')
      else Zutat4.Caption := ini.ReadString(cocktail,'Zutat4Mass','')+' '+ini.ReadString(cocktail,'Zutat4','');
    if (ini.ReadString(cocktail,'Zutat5Mass','') = '')
      then Zutat5.Caption := ini.ReadString(cocktail,'Zutat5','')
      else Zutat5.Caption := ini.ReadString(cocktail,'Zutat5Mass','')+' '+ini.ReadString(cocktail,'Zutat5','');
    if (ini.ReadString(cocktail,'Zutat6Mass','') = '')
      then Zutat6.Caption := ini.ReadString(cocktail,'Zutat6','')
      else Zutat6.Caption := ini.ReadString(cocktail,'Zutat6Mass','')+' '+ini.ReadString(cocktail,'Zutat6','');
    if (ini.ReadString(cocktail,'Zutat7Mass','') = '')
      then Zutat7.Caption := ini.ReadString(cocktail,'Zutat7','')
      else Zutat7.Caption := ini.ReadString(cocktail,'Zutat7Mass','')+' '+ini.ReadString(cocktail,'Zutat7','');
    if (ini.ReadString(cocktail,'Zutat8Mass','') = '')
      then Zutat8.Caption := ini.ReadString(cocktail,'Zutat8','')
      else Zutat8.Caption := ini.ReadString(cocktail,'Zutat8Mass','')+' '+ini.ReadString(cocktail,'Zutat8','');
    if (ini.ReadString(cocktail,'Zutat9Mass','') = '')
      then Zutat9.Caption := ini.ReadString(cocktail,'Zutat9','')
      else Zutat9.Caption := ini.ReadString(cocktail,'Zutat9Mass','')+' '+ini.ReadString(cocktail,'Zutat9','');
    if (ini.ReadString(cocktail,'Deko0Mass','') = '')
      then Deko0.Caption := ini.ReadString(cocktail,'Deko0','')
      else Deko0.Caption := ini.ReadString(cocktail,'Deko0Mass','')+' '+ini.ReadString(cocktail,'Deko0','');
    if (ini.ReadString(cocktail,'Deko1Mass','') = '')
      then Deko1.Caption := ini.ReadString(cocktail,'Deko1','')
      else Deko1.Caption := ini.ReadString(cocktail,'Deko1Mass','')+' '+ini.ReadString(cocktail,'Deko1','');
    if (ini.ReadString(cocktail,'Deko2Mass','') = '')
      then Deko2.Caption := ini.ReadString(cocktail,'Deko2','')
      else Deko2.Caption := ini.ReadString(cocktail,'Deko2Mass','')+' '+ini.ReadString(cocktail,'Deko2','');
    if (ini.ReadString(cocktail,'Deko3Mass','') = '')
      then Deko3.Caption := ini.ReadString(cocktail,'Deko3','')
      else Deko3.Caption := ini.ReadString(cocktail,'Deko3Mass','')+' '+ini.ReadString(cocktail,'Deko3','');
    if (ini.ReadString(cocktail,'Deko4Mass','') = '')
      then Deko4.Caption := ini.ReadString(cocktail,'Deko4','')
      else Deko4.Caption := ini.ReadString(cocktail,'Deko4Mass','')+' '+ini.ReadString(cocktail,'Deko4','');
    Label1.Caption := ini.ReadString(cocktail,'Rezept','');
    if (ini.ReadString(cocktail,'Bild','') = '')
      then Label2.Visible := true
      else Image1.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'Bilder\'+ini.ReadString(cocktail,'Bild',''));
  finally
    ini.Free;
  end;
end;

procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
var
  img: TBitmap;
  imgaus: TBitmap;
begin
  if Key = 'z' then
    begin
      img := TBitMap.Create;
      img := Form2.GetFormImage;
      img.SaveToFile(ExtractFilePath(Application.ExeName)+'Test.bmp');
      imgaus := TBitMap.Create;
      imgaus.LoadFromFile('test.bmp');
      Printer.BeginDoc;
      Printer.Canvas.Draw(0, 0, imgaus);
      Printer.EndDoc;
    end;
end;

end.


Zuletzt bearbeitet von PatrickJ am So 06.08.06 20:37, insgesamt 1-mal bearbeitet
jensenwb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: So 06.08.06 20:30 
Ich kann da nichts feststellen warum es nicht gehen soll, ich habe auch meinen jetzt mal auf form2 geändert und es geht. Versuche mal ob einen anderen Namen für den Dialogfenster zu nehmen.
PatrickJ Threadstarter
Hält's aus hier
Beiträge: 12

Win XP
Delphi 2005
BeitragVerfasst: So 06.08.06 20:44 
Habs mal probiert, aber leider auch Fehlanzeige.