Autor |
Beitrag |
thorstenf01
      
Beiträge: 60
Win XP
D5 enterprise
|
Verfasst: So 31.08.03 11:56
Hy!
weiß jemand zufällig wie ich den Inhalt einer Paintbox
mit dem PrintDialog ausdrucken und mit SaveDoalog abspeichern kann?
Gruß
Thorsten
|
|
schneegurke
      
Beiträge: 19
Win XP
C# (VS 2003, 2005 Express)
|
Verfasst: So 31.08.03 17:30
Titel: paintbox speichern
speichern sollte so gehen, eine einfachere methode ist mir nicht bekannt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var Bmp: TBitmap; begin if SaveDialog1.Execute then begin Bmp := TBitmap.Create; Bmp.Width := PaintBox1.Width; Bmp.Height := PaintBox1.Height; Bmp.Canvas.Draw(0, 0, PaintBox1.Canvas); Bmp.SaveToFile(SaveDialog1.Filename); Bmp.Free; end; end; |
gruss
mark
|
|
Sandra
Hält's aus hier
Beiträge: 12
Win 98
D7 Pers
|
Verfasst: Di 04.01.05 01:44
Habe das so probiert und bekomme dabei die Fehlermeldung:
Inkompatible Typen: 'TGraphic' und 'TCanvas'
woran liegt das?
liebe grüße
sandra
|
|
Sprint
      
Beiträge: 849
|
Verfasst: Di 04.01.05 02:03
Sandra hat folgendes geschrieben: | Habe das so probiert und bekomme dabei die Fehlermeldung: |
Was willst du denn? TPaintBox/TBitmap speichern/drucken?
_________________ Ciao, Sprint.
|
|
Sandra
Hält's aus hier
Beiträge: 12
Win 98
D7 Pers
|
Verfasst: Di 04.01.05 10:55
Ich habe versucht die Paintbox zu speichern undzu dieser Zeile die Fehlermeldung
Bmp.Canvas.Draw(0, 0, PaintBox1.Canvas);
|
|
Sprint
      
Beiträge: 849
|
Verfasst: Di 04.01.05 18:19
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure SavePaintBoxToFile(const FileName: String; const APaintBox: TPaintBox); begin
with TBitmap.Create do begin try PixelFormat := pf32bit; Width := APaintBox.Width; Height := APaintBox.Height; Canvas.CopyRect(Rect(0, 0, Width, Height), APaintBox.Canvas, Rect(0, 0, APaintBox.Width, APaintBox.Height)); SaveToFile(FileName); finally Free; end; end;
end; |
_________________ Ciao, Sprint.
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Di 04.01.05 19:23
Oder benutz einfach BitBlt und kopiere dann direkt auf den Canvas des Bildes. Zum "einfachen Drucken" einfach auf die Leinwand Printer.Canvas kopieren, allerdings musst du schon die Größe der Auflösung des Druckers anpassen.
GRuß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
Sandra
Hält's aus hier
Beiträge: 12
Win 98
D7 Pers
|
Verfasst: Mi 05.01.05 13:07
Sprint, danke für deinen Code.
Ich will ja wirklich nicht nerven und er Code an sich funktioniert ja auch, aber ich habe Probleme, wenn ich Ihn mit einem Buttonclick verbinden will. Da es nicht direkt funltioniert, muss ich es über eine Buttonclick Procedure machen, aber dann bekomme ich die Fehlermeldung, dass nicht genügend wirkliche Parameter vorhanden sind.
Oder aber das Programm startet und stürzt dann beim klicken auf den speicher button ab und markiert dann die zeile 11: SaveToFile(FileName);
woran liegt das? außer dass ich wahrscheinlich zu doof dafür bin.
Habe es mittlerweile auch geschafft mit einem SaveDialog ein Bitmap zu speichern, aber dieses hat keinen Inhalt, weil bei mir eben
Delphi-Quelltext 1:
| Bitmap.Canvas.Draw(0,0,Paintbox1); |
eine Fehlermeldung verursacht. Wie kann ich dies umgehen, also den Inhalat der Paintbox auf das Bitmap übertragen ohne eine Fehlermeldung zu haben?
Das sollte doch dann mit dem Code von Sprint gehen, oder? Bräuchte man dazu dann keinen Savedialog?
|
|
Sprint
      
Beiträge: 849
|
Verfasst: Mi 05.01.05 14:34
Sandra hat folgendes geschrieben: | Bräuchte man dazu dann keinen Savedialog? |
Wenn du vorher weißt wo die Datei gespeichert werden soll, dann brauchst du kein TSaveDialog.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button1Click(Sender: TObject); begin
if SaveDialog1.Execute then with TBitmap.Create do try PixelFormat := pf32bit; Width := PaintBox1.Width; Height := PaintBox1.Height; Canvas.CopyRect(Rect(0, 0, Width, Height), PaintBox1.Canvas, Rect(0, 0, PaintBox1.Width, PaintBox1.Height)); SaveToFile(SaveDialog1.FileName); finally Free; end;
end; |
_________________ Ciao, Sprint.
|
|
Sandra
Hält's aus hier
Beiträge: 12
Win 98
D7 Pers
|
Verfasst: Mi 05.01.05 15:07
danke, jetzt klappt das speichern
alerdings auch nicht so richtig.
habe jetzt zwar einbild mit der größe der paintbox und inhalt, allerdings ist dieser inhalt nicht der der paintbox.
die oberen 3/4 es bildes haben die selbe farbe, wie der hintergrund meines formulars und das untere viertel die hintergrundfarbe der paintbox. zuerst habe ich gedacht, dass vielleicht ein anderes rechteck dieser größe vom formular des programms gespeichert wird, allerdings kann das auch nicht sein, weil diese aufteilung nirgendwo so vorkommt.
es wird ja auch mit
Delphi-Quelltext 1:
| Canvas.CopyRect(Rect(0, 0, Width, Height), PaintBox1.Canvas, Rect(0, 0, PaintBox1.Width, PaintBox1.Height)); |
das rechteck gezeichnet und eigentlich müsste es ja auch den inhalt der paintbox haben, aber wieso funktioniert es immer noch nicht richtig?
|
|
Sandra
Hält's aus hier
Beiträge: 12
Win 98
D7 Pers
|
Verfasst: Do 06.01.05 15:36
Vielen Danke für euere Hilfe!!!
Habe jetzt eine Variante gefunden, die funktioniert, wollte sie nur kurz posten, falls noch jemand dieses Problem einmal haben sollte.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure Speichern(Sender: TObject); begin Bild:=TBitmap.Create; Bild.Height:=PaintBox1.Height; Bild.Width:=Paintbox1.Width; BitBlt(Bild.Canvas.Handle, 0, 0, PaintBox1.Width, PaintBox1.Height, PaintBox1.Canvas.Handle, 0, 0, SRCCOPY); if SaveDialog1.Execute then Bild.Savetofile(SaveDialog1.Filename) else exit; end; |
|
|
Luna
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 21.03.06 21:13
Hallo Leute,
die Frage zum Drucken der Paintbox hätte ich auch. Das was ich bisher gelesen habe, beschäftigt sich ja eher mit dem Speichern.
Ich habe zwar eine Lösung, die auch so weit funktioniert, allerdings wird sehr schwach gedruckt (also eher grau statt schwarz). Der Quellcode für diese Lösung ist:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TFraktale.druckenClick(Sender: TObject); var x,y:integer; begin if PrintDialog1.Execute then begin Printer.Title := Lbueberschrift.Caption; Printer.BeginDoc; for x:=0 to Paintbox1.Height-1 do for y:=0 to Paintbox1.Width-1 do Printer.Canvas.Pixels[5*x,5*y]:=Paintbox1.Canvas.Pixels[x,y]; Printer.EndDoc; end; end; |
Andere Algorithmen habe ich auch schon ausprobiert, aber entweder wird gar nichts gedruckt oder es gibt die übliche Fehlermeldung
Inkompatible Typen: 'TGraphic' und 'TCanvas'
diese Quellcodes wären:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TFraktale.druckenClick(Sender: TObject); var x,y: integer; graphic: TGraphic; begin if PrintDialog1.Execute then begin Printer.Title := Lbueberschrift.Caption; Printer.BeginDoc; BitBlt(Printer.Canvas.handle, 0, 0, Paintbox1.width, Paintbox1.height, Paintbox1.Canvas.handle, 0, 0, srccopy); Printer.EndDoc; end; end; |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TFraktale.druckenClick(Sender: TObject); var x,y: integer; graphic: TGraphic; begin if PrintDialog1.Execute then begin Printer.Title := Lbueberschrift.Caption; Printer.BeginDoc; Printer.Canvas.draw(0,0,Paintbox1.Canvas); Printer.EndDoc; end; end; |
Hat jemand vielleicht noch eine andere Lösung für mich? Ich bin echt am Ende mit meinem Latein.
Luna
|
|
|