Avatar billede j-johansen Nybegynder
10. juni 2002 - 15:59 Der er 14 kommentarer og
1 løsning

Print fra Delphi program.. Hvordan?

Hej!

Jeg er ved at lave et lille program hvor det er nødvendigt at kunne printe, men hvordan?

Det skal foregå på den måde at når jeg trykker på en knap (Button1) skal den åbne printer dialogen (prindialog1) og udskrive indholdet af et textfelt (memo1)

Håber i kan hjælpe...!
Avatar billede borrisholt Novice
10. juni 2002 - 16:07 #1
Database eller ej ?

Jens B
Avatar billede j-johansen Nybegynder
10. juni 2002 - 16:10 #2
nej, bare fra memo1
Avatar billede j-johansen Nybegynder
10. juni 2002 - 16:39 #3
Er der slet ingen der kan svare på det spørgsmål?
Avatar billede krab Praktikant
10. juni 2002 - 16:56 #4
Jeg har prøvet at spørge før men ingen kan svare!!!
Avatar billede j-johansen Nybegynder
10. juni 2002 - 16:58 #5
det kan være der er nogen der kan svare nu... 200points :-)
Avatar billede hermandsen Juniormester
10. juni 2002 - 17:15 #6
Kig på AssignPrn proceduren...

Fra hjælpen:

Assigns a text-file variable to the printer.

Unit

Printers

Category

text file routines

procedure AssignPrn(var F: Text);

Description

Call AssignPrn to cause all information written to the text file variable F to be directed to the printer. After the variable is assigned, the application must call the Rewrite procedure.


Eksempel fra hjælpen:

This code prints a line of text on the printer when the user clicks the button on the form:

procedure TForm1.Button1Click(Sender: TObject);
var
  MyFile: TextFile;
begin
  AssignPrn(MyFile);
  Rewrite(MyFile);
  Writeln(MyFile, 'Print this text');
  System.CloseFile(MyFile);
end;

Så er det bare at bruge Writeln fra din memo med et for-loop... ;)
Avatar billede hermandsen Juniormester
10. juni 2002 - 17:18 #7
Et lille udbygget eksempel på hvordan du kan gøre det:

procedure TForm1.Button1Click(Sender: TObject);
var
  MyFile: TextFile;
  I: Integer;
begin
  AssignPrn(MyFile);
  Rewrite(MyFile);
  for I := 0 to Memo1.Lines.Count-1 do
    Writeln(MyFile, 'Print this text');
  System.CloseFile(MyFile);
end;
Avatar billede j-johansen Nybegynder
10. juni 2002 - 17:36 #8
det virker ikke :-(
Avatar billede hermandsen Juniormester
10. juni 2002 - 17:52 #9
Prøv lige at smide en

if PrintDialog1.Execute then
begin
  ...
end;

ind, og så vælg den rigtige printer... ;)
Avatar billede hermandsen Juniormester
10. juni 2002 - 17:53 #10
Ups... Sidste procedure skal vist lige laves lidt om! ;)

procedure TForm1.Button1Click(Sender: TObject);
var
  MyFile: TextFile;
  I: Integer;
begin
  AssignPrn(MyFile);
  Rewrite(MyFile);
  for I := 0 to Memo1.Lines.Count-1 do
    Writeln(MyFile, Memo1.Lines.Strings[I]);
  System.CloseFile(MyFile);
end;

Det var bedre! :)
Avatar billede hermandsen Juniormester
10. juni 2002 - 17:58 #11
Hvad er det der ikke virker?

Husk at indsætte Printers under uses...
Avatar billede hermandsen Juniormester
10. juni 2002 - 18:02 #12
Det virker fint for mig... Her er min kode:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    PrintDialog1: TPrintDialog;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  MyFile: TextFile;
  I: Integer;
begin
  if not PrintDialog1.Execute then Exit;
  AssignPrn(MyFile);
  Rewrite(MyFile);
  for I := 0 to Memo1.Lines.Count-1 do
    Writeln(MyFile, Memo1.Lines.Strings[I]);
  System.CloseFile(MyFile);
end;

end.
Avatar billede j-johansen Nybegynder
10. juni 2002 - 18:49 #13
Det virker når jeg tager hele koden, jeg tror det var fordi der ikke stod:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Printers;

men:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

points på vej :-)
Avatar billede eht Nybegynder
10. juni 2002 - 19:12 #14
Hej j-johansen
Du har  fået svar men jeg har alligevel et andef forslag til print af memo.
De anvisninger du har fået er OK hvis du ikke vil have kontrol over hvordan din udprintning bliver skrevet på papiret.

Her en måde der giver mere konrtol

Indsæt Memo1, PrintDialog1 og Button1 på Form1.

Indsæt følgende kode:

uses
  Printers;

procedure TForm1.Button1Click(Sender: TObject);
var
  I, XPixelsPrTomme, YPixelsPrTomme, Margen,
  LinieHoejde, LinieTaeller: Integer;

begin
  if PrintDialog1.Execute then
  begin
    Printer.Canvas.Font := Memo1.Font;
    XPixelsPrTomme := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
    Margen := XPixelsPrTomme; // - altså én tomme
    YPixelsPrTomme := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
    LinieHoejde := Round(Abs(Printer.Canvas.Font.Size) / 72 *
                        YPixelsPrTomme * 1.40);

    LinieTaeller := 3;
    Printer.BeginDoc;
//Erik


    for I := 0 to Memo1.Lines.Count - 1 do
    begin
      Inc(LinieTaeller);
      Printer.Canvas.TextOut(Margen, LinieTaeller * LinieHoejde, Memo1.Lines.Strings[I]);
    end;
    Printer.EndDoc;
  end;
end;

Læs i øvrigt Per Amdal Steffens bog: Delphi4 Programmering. Der er virkelig mange gode eksempler og forklaringer på alt det grundlæggende i Delphi.
Avatar billede hermandsen Juniormester
10. juni 2002 - 19:15 #15
>>eht
Hey!!! Der er en der har læst bogen... Skide god, ik'!!! :)

Jeg tænkte ikke lige på det, men brugte bare et hurtigt eksempel af hvad jeg nu kunne huske! ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester