Avatar billede kennethv Nybegynder
19. maj 2005 - 23:44 Der er 12 kommentarer og
1 løsning

Default Printer

Jeg har lavet et lille program som skal printe nogle labels ud. De informationer jeg skal bruge får jeg leveret i en fil. I den fil står printerens navn. Også er det bare at lave nedenstående:

  printer.PrinterIndex := printer.Printers.IndexOf(LabelPrint);
  printer.Copies := 1;
  printer.Orientation := poLandscape;
  printer.BeginDoc;
  printer.Canvas.Font.Name := 'Times New Roman';
  printer.Canvas.Font.Size := 16;
  printer.Canvas.Font.Style := [fsBold];
  printer.Canvas.TextOut(40,100,Dato.Caption);
  printer.EndDoc;

LabelPrint er en variable.

Det der sker er, at jeg kan ikke printe noget ud, hvis jeg ikke vælger labelprinteren som default printer dvs. på selve printer ikonet. Hvis den er valgt som default printer er der ingen problemer, men det er ikke det der målet.

/Kenneth
Avatar billede doc404 Novice
20. maj 2005 - 00:13 #1
Hvis PrinterIndex sættes til -1 vælges default printer automatisk. Og det bliver den, hvis din Printer.Printers.IndexOf(LabelPrint) går 'galt'. Indholdet af label print SKAL være nøjagtigt som det, der står i Printer.Printers(). Er den det?
Avatar billede kennethv Nybegynder
20. maj 2005 - 13:49 #2
Jeg har lavet et lille prg der skulle fortælle mig, hvordan printer.printerindex forventer at navnet skal se ud. Når jeg kører dette lille prg laver jeg en copy&paste og fortæller at sådan skal informationen på printeren se ud i den fil jeg modtager. Med mindre at mit lille giver mig nogle forkerte oplysninger.

Smid en Memo og en button på en form.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  memo1.Lines.AddStrings(printer.Printers);
end;

end.
Avatar billede kroning Nybegynder
20. maj 2005 - 15:19 #3
Det er måske ikke til meget hjælp men jeg har prøvet din kode og det ser ud til at virke fint her.
Avatar billede doc404 Novice
20. maj 2005 - 18:46 #4
Har du checket indholdet af LabelPrint?
Avatar billede kennethv Nybegynder
20. maj 2005 - 21:26 #5
Indholdet af LabelPrint ved jeg er den rigtige printer. Har debugget!
Avatar billede kennethv Nybegynder
22. maj 2005 - 07:29 #6
Men kan det have noget at gøre med at det er en standard tcp/ip port at printeren er sat op til?
Avatar billede kennethv Nybegynder
24. maj 2005 - 23:47 #7
Er der ellers nogen der har et bud? De printere har fysisk et netværkskort installeret. Kan det have noget med det at gøre? Er der noget man skal være opmærksom på?
Avatar billede kroning Nybegynder
25. maj 2005 - 08:37 #8
Det burde vel ikke have noget at sige hvordan de er koblet til da det hele foregår (tror jeg) via printer driveren.
Avatar billede kennethv Nybegynder
25. maj 2005 - 10:07 #9
Ja, det ville jeg også tro. Men et eller andet sker der ihvertfald ikke.
Avatar billede kennethv Nybegynder
25. maj 2005 - 23:20 #10
Jeg fatter ikke en paphat af det her. Jeg har 3 labelprintere installeret på min pc. A, B og C. Ingen af dem er default.

Hvis jeg kører mit program fra min pc kommer der print ud på alle 3 labelprintere. TImage er ikke det bedste, men det kommer ud.

En anden pc, hvor der også er installeret de samme 3 labelprintere på A, B og C.
Hvis jeg kører det fra den pc kommer der print ud på A, men ikke på B og C. Der kommer papiret bare ud uden skrift. På A er der en lille forskydningen i positionen af teksten. Men hvad skal jeg gøre?
Avatar billede kennethv Nybegynder
26. maj 2005 - 23:33 #11
Nu bliver det mere mystisk det her. På en windows 2003 server er der installeret 3 labelsprintere og en almindelig printer. A, B og C er labelprinter. D er den alm printer. Labelprinter A har labels der er dobbelt så stor som B og C. Dvs. B og C har samme type label. Nu kommer det underlige.

Senario 1.
Hvis jeg sætter D, som default printer og skriver ud på alle 3 labelprintere sker der det, at på A kommer der print ud, men med en positionforskydning af tekst. På B og C kommer der ikke skrift på labelen, men labels bliver spyttet ud.

Senario 2.
Hvis jeg sætter C, som default printer og skriver ud på alle 3 labelprintere sker der det, at på A kommer der print ud, men i halv størrelse. Samme størrelse som det print der kommer ud på B og C.

Dette er koden som jeg bruger.  Er der nogen ting som jeg ikke opmærksom på? Sætter gerne flere points på opgaven.

procedure TForm1.ProcessCmdLineParameters;
var Count : Byte;
begin
  For count := 1 to ParamCount do
  Begin
    Case ParamStr(Count)[2] Of
      'F','f' : FileName := Copy ( ParamStr(Count), 4, Length ( ParamStr(Count)) - 3);
      'T','t' : TestAktiv := true;
      'P','p' : begin
                  TestPrinterSat := true;
                  LabelPrint := Copy ( ParamStr(Count), 4, Length ( ParamStr(Count)) - 3);
                end;
    end;
  End;
end;

procedure TForm1.BarcodeSetup;
begin
  Barcode1 := TAsBarcode.Create(self);
  Barcode1.Top := 5;
  Barcode1.Left := 3;
  Barcode1.Typ := bcCode_2_5_industrial;
  Barcode1.Modul := 2;
  Barcode1.Ratio := 2.0;
  Barcode1.Height := 25;
  Barcode1.OnChange := Self.Barcode1Change;
  Barcode1.Text := '12345';
end;

procedure TForm1.Barcode1Change(Sender: TObject);
begin
  Image2.Picture := nil;
    Barcode1.DrawBarcode(Image2.Canvas);
end;

procedure TForm1.ItemLabelPrint;
begin
  printer.PrinterIndex := printer.Printers.IndexOf(LabelPrint);
  printer.Copies := 1;
//  printer.Orientation := poLandScape;
  printer.Orientation := poPortrait;
  printer.BeginDoc;
  printer.Canvas.Font.Name := 'Times New Roman';
  printer.Canvas.Font.Size := 16;
  printer.Canvas.Font.Style := [fsBold];
  if PrintOn then
  begin
    Printer.Canvas.TextOut(60,70,'Genuine');
    Printer.Canvas.TextOut(40,120,'spare parts');
  end;
  if LogoOn then
    printer.Canvas.Draw(280,40,Image1.Picture.Graphic);
  printer.Canvas.Font.Size := 12;
  Printer.Canvas.TextOut(40,215,'Item no.:');
  Printer.Canvas.TextOut(40,250,'Description:');
  Printer.Canvas.TextOut(40,285,'Quantity:');
  printer.Canvas.Font.Size := 10;
  printer.Canvas.Font.Style := [fsBold];
  printer.Canvas.TextOut(280,215,ItemNo.Caption);
  printer.Canvas.TextOut(280,250,Description.Caption);
  printer.Canvas.TextOut(280,285,Quantity.Caption);
  printer.Canvas.Font.Size := 10;
  printer.Canvas.Font.Style := [];
  Printer.Canvas.TextOut(40,340,'Alsis product:');
  Printer.Canvas.TextOut(40,370,'Alsis scope:');
  Printer.Canvas.TextOut(40,400,'Alteq ref.:');
  Printer.Canvas.TextOut(40,430,'Country of origin:');
  printer.Canvas.TextOut(280,340,AlsisProduct.Caption);
  printer.Canvas.TextOut(280,370,AlsisScope.Caption);
  printer.Canvas.TextOut(280,400,AlteqRef.Caption);
  printer.Canvas.TextOut(280,430,Country.Caption);
  printer.Canvas.MoveTo(15,470);
  printer.Canvas.LineTo(785,470);
  printer.Canvas.TextOut(40,480,FirmName.Caption);
  printer.Canvas.TextOut(40,510,FirmAdress.Caption);
  printer.Canvas.TextOut(40,540,FirmPhone.Caption);
  printer.EndDoc;
end;

procedure TForm1.PackageLabelPrint;
begin
  printer.PrinterIndex := printer.Printers.IndexOf(LabelPrint);
  printer.Copies := 1;
  printer.Orientation := poLandscape;
  printer.BeginDoc;
  printer.Canvas.Font.Name := 'Times New Roman';
  printer.Canvas.Font.Size := 16;
  printer.Canvas.Font.Style := [fsBold];
  printer.Canvas.TextOut(40,100,Dato.Caption);
  printer.Canvas.TextOut(40,525 - (printer.Canvas.TextHeight('BOX') Div 2),'BOX:');
  printer.Canvas.TextOut(40,635 - (printer.Canvas.TextHeight('KGS') Div 2),'KG(S):');
  printer.Canvas.TextOut(170,525 - (printer.Canvas.TextHeight(Box1.Caption) Div 2),Box1.Caption);
  printer.Canvas.TextOut(240,525 - (printer.Canvas.TextHeight(Box2.Caption) Div 2),Box2.Caption);
  printer.Canvas.TextOut(200,635 - (printer.Canvas.TextHeight('of') Div 2),KGS.Caption);
  printer.Canvas.Draw(715,20,Image1.Picture.Graphic);

  printer.Canvas.Font.Size := 10;
  printer.Canvas.Font.Style := [];
  printer.Canvas.TextOut(40,210,'Our ref:');
  printer.Canvas.TextOut(40,300,'Your ref:');
  printer.Canvas.TextOut(40,390,'Tracking No:');
  printer.Canvas.TextOut(340,210,'TO:');
  printer.Canvas.TextOut(340,480,'Shipping Marks:');
  printer.Canvas.TextOut((printer.PageWidth Div 2) - (printer.Canvas.TextWidth(AdrFrom1.Caption) Div 2),700,AdrFrom1.Caption);
  printer.Canvas.TextOut((printer.PageWidth Div 2) - (printer.Canvas.TextWidth(AdrFrom2.Caption) Div 2),730,AdrFrom2.Caption);
  printer.Canvas.TextOut((printer.PageWidth Div 2) - (printer.Canvas.TextWidth(AdrFrom3.Caption) Div 2),760,AdrFrom3.Caption);

  printer.Canvas.Font.Size := 12;
  printer.Canvas.Font.Style := [fsBold];
  printer.Canvas.TextOut(40,245,OurRef.Caption);
  printer.Canvas.TextOut(40,335,YourRef.Caption);
  printer.Canvas.TextOut(40,425,TrackNo.Caption);
  printer.Canvas.TextOut(400,210,AdrTo1.Caption);
  printer.Canvas.TextOut(400,250,AdrTo2.Caption);
  printer.Canvas.TextOut(400,290,AdrTo3.Caption);
  printer.Canvas.TextOut(400,320,AdrTo4.Caption);
  printer.Canvas.TextOut(400,360,AdrTo5.Caption);
  printer.Canvas.TextOut(340,515,ShipMark1.Caption);
  printer.Canvas.TextOut(340,550,ShipMark2.Caption);
  printer.Canvas.TextOut(340,585,ShipMark3.Caption);
  printer.Canvas.TextOut(340,620,ShipMark4.Caption);
  printer.Canvas.TextOut(200,525 - (printer.Canvas.TextHeight('of') Div 2),'of');

  printer.Canvas.Pen.Width := 2;
  printer.Canvas.MoveTo(15,200);
  printer.Canvas.LineTo(printer.PageWidth-15,200);
  printer.Canvas.MoveTo(15,290);
  printer.Canvas.LineTo(300,290);
  printer.Canvas.MoveTo(15,380);
  printer.Canvas.LineTo(300,380);
  printer.Canvas.MoveTo(15,470);
  printer.Canvas.LineTo(printer.PageWidth-15,470);
  printer.Canvas.MoveTo(15,580);
  printer.Canvas.LineTo(300,580);
  printer.Canvas.MoveTo(15,690);
  printer.Canvas.LineTo(printer.PageWidth-15,690);
  printer.Canvas.MoveTo(300,200);
  printer.Canvas.LineTo(300,690);
  printer.EndDoc;
end;

procedure TForm1.Udskriv;
var LabelFormat : integer;
begin
  if (LabelPrint = 'DKISPR0020') or (LabelPrint = 'DKISPR0021') then
    LabelFormat := 0
  else
    LabelFormat := 1;
  case LabelFormat of
    0 : begin
          ItemLabelPrint;
        end;
    1 : begin
          PackageLabelPrint;
        end;
  end;
end;

procedure TForm1.LabelText;
var count : integer;
  Tmp : string;
begin
  List := TStringList.Create;
  List.LoadFromFile(FileName);
  for count := 0 to List.Count-1 do
  begin
    if list.Strings[count] <> '' then
    begin
      Tmp := List.Strings[count];
      if Pos('PRINTER_A',Tmp) <> 0 then
      begin
        Dato.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        OurRef.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        YourRef.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        TrackNo.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        Box1.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        box2.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        KGS.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        AdrTo1.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        AdrTo2.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        AdrTo3.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        AdrTo4.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        AdrTo5.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        ShipMark1.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        ShipMark2.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        ShipMark3.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        ShipMark4.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        AdrFrom1.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        AdrFrom2.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        AdrFrom3.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        LabelPrint := Tmp;
        Delete(Tmp,1,length(Tmp));
      end;
      if (Pos('PRINTER_B',Tmp) <> 0) or (Pos('PRINTER_C',Tmp) <> 0) then
      begin
        ItemNo.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        Description.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        Quantity.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        Quantity.Caption := Quantity.Caption + ' ' + copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        AlsisProduct.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        AlsisScope.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        AlteqRef.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        Country.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        FirmName.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        FirmAdress.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        FirmPhone.Caption := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        LabelPrint := copy(Tmp,1,pos(',',Tmp)-1);
        Delete(Tmp,1,pos(',',Tmp));
        if Tmp <> '0' then
          LogoOn := true
        else
          LogoOn := false;
        if AlsisScope.Caption = 'A' then
          PrintOn := false
        else
          PrintOn := true;
      end;
    end;
    Udskriv;
  end;
  List.Free;
end;

procedure TForm1.TestLabels;
var stor : string;
begin
{  printer.PrinterIndex := printer.Printers.IndexOf(printer.Printers.Strings[printer.printerIndex]);}
  printer.Copies := 1;
  printer.Orientation := poportrait;
  printer.Canvas.Font.Name := 'Times New Roman';
  printer.Canvas.Font.Size := 16;
  printer.Canvas.Font.Style := [fsBold];
  printer.BeginDoc;
  printer.Canvas.Rectangle(0,0,printer.PageWidth,printer.PageHeight);
  printer.Canvas.Textout(printer.PageWidth div 2,printer.PageHeight div 2,'TEST');
  printer.Canvas.TextOut(10,10,'TEST');
  printer.Canvas.TextOut(printer.PageWidth - (printer.Canvas.TextWidth('TEST')+10),10,'TEST');
  printer.Canvas.TextOut(10,printer.PageHeight -(printer.Canvas.TextHeight('TEST')+10),'TEST');
  printer.Canvas.TextOut(printer.PageWidth - (printer.Canvas.TextWidth('TEST')+10),printer.PageHeight -(printer.Canvas.TextHeight('TEST')+10),'TEST');
  printer.Canvas.TextOut(10,printer.canvas.TextHeight('T'),'E');
  printer.Canvas.TextOut(10,(printer.canvas.TextHeight('TEST')*2),'S');
  printer.Canvas.TextOut(10,(printer.canvas.TextHeight('TEST')*3),'T');
  printer.EndDoc;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ProcessCmdLineParameters;
  BarcodeSetup;
  if TestAktiv then
  begin
    if PrintDialog1.Execute then
    begin
      TestLabels;
      MessageDlg('Printer Navn: ' + printer.Printers.Strings[printer.printerindex], mtInformation,[mbOk], 0);
    end
    else
    begin
      MessageDlg('Ingen testprinter valgt.', mtInformation,[mbOk], 0);
    end;
  end
  else LabelText;
  PostMessage(Self.Handle, WM_CLOSE, 0, 0);
end;
Avatar billede kennethv Nybegynder
28. maj 2005 - 01:57 #12
Problem løst.
Avatar billede kennethv Nybegynder
03. oktober 2005 - 14:05 #13
Svar til mig selv.
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