Zmiana domyślnej drukarki nie działa prawidłowo

0

Witam serdecznie,

od razu zaznaczam, że jestem jeszcze raczkujący :) w temacie programowania i potrzebuje pomocy w jednym temacie, którego nie potrafię rozwiązać. Napisałem program w Delphi ułatwiający wydruk kuponów/biletów i wszystko pięknie tylko za Chiny nie potrafię z programu zmienić drukarki, która będzie wykorzystywana. Daję printerDialoga, po kliknięciu na przycisk pojawia się okienko z wyborem drukarki, lecz po wyborze i tak drukuje się na defaultowej...

Proszę o rozwiązanie problemu. Poniżej program.

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin, XiButton, ComCtrls, ComObj,ShellAPI;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    rzedy: TSpinEdit;
    Label2: TLabel;
    Label3: TLabel;
    miejsce_pocz: TSpinEdit;
    Label4: TLabel;
    miejsce_kon: TSpinEdit;
    Label5: TLabel;
    sala1: TRadioButton;
    sala2: TRadioButton;
    sala3: TRadioButton;
    sala4: TRadioButton;
    XiButton1: TXiButton;
    data_seansu: TDateTimePicker;
    drukarka: TPrintDialog;
    Label6: TLabel;
    Label7: TLabel;
    godzina: TSpinEdit;
    minuta: TSpinEdit;
    Label8: TLabel;
    drukarka2: TPrinterSetupDialog;
    procedure XiButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.XiButton1Click(Sender: TObject);
var zmienna,licznik,i:integer;
    bilety: OleVariant;
begin
         drukarka2.Execute; //wybór drukarki

        bilety:=CreateOleObject('Excel.Application');
        bilety.Workbooks.Open('c:\kupony\wydruk.xlsx');

        label6.Visible:=true;
        zmienna:=miejsce_kon.Value-miejsce_pocz.Value+1;
        label6.Caption:='Wydrukowanych zostanie: ' + inttostr(zmienna) + ' biletów';
        if zmienna=1 then
        label6.Caption:='Wydrukowany zostanie: ' + inttostr(zmienna) + ' bilet';
        if (zmienna=2) or (zmienna=3) or (zmienna=4)  then
        label6.Caption:='Wydrukowanych zostanie: ' + inttostr(zmienna) + ' bilety';

        licznik:=0;

        for i:=1 to zmienna do
        begin

          bilety.cells[1,1].value:=edit1.Text;
          bilety.cells[1,2].value:=data_seansu.date;

          if sala1.Checked=true then
             begin
                 if minuta.Value=0 then bilety.cells[1,3].value:= 'Sala 1,  ' + inttostr(godzina.Value) + ':' +  inttostr(minuta.Value)+'0'
                    else
                   bilety.cells[1,3].value:= 'Sala 1,  ' + inttostr(godzina.Value) + ':' +  inttostr(minuta.Value);
             end;
          if sala2.Checked=true then
             begin
                 if minuta.Value=0 then bilety.cells[1,3].value:= 'Sala 2,  ' + inttostr(godzina.Value) + ':' +  inttostr(minuta.Value)+'0'
                    else
                   bilety.cells[1,3].value:= 'Sala 2,  ' + inttostr(godzina.Value) + ':' +  inttostr(minuta.Value);
             end;
          if sala3.Checked=true then
             begin
                 if minuta.Value=0 then bilety.cells[1,3].value:= 'Sala 3,  ' + inttostr(godzina.Value) + ':' +  inttostr(minuta.Value)+'0'
                    else
                   bilety.cells[1,3].value:= 'Sala 3,  ' + inttostr(godzina.Value) + ':' +  inttostr(minuta.Value);
             end;
          if sala4.Checked=true then
             begin
                 if minuta.Value=0 then bilety.cells[1,3].value:= 'Sala 4,  ' + inttostr(godzina.Value) + ':' +  inttostr(minuta.Value)+'0'
                    else
                   bilety.cells[1,3].value:= 'Sala 4,  ' + inttostr(godzina.Value) + ':' +  inttostr(minuta.Value);
             end;

           licznik:=miejsce_pocz.Value +i-1;
           bilety.cells[1,4].value:= 'Rząd: ' +inttostr(rzedy.Value) +',  Miejsce: ' +inttostr(licznik);

           bilety.Worksheets.PrintOut(); //drukowanie

         end;



        bilety.DisplayAlerts := False;
        bilety.ActiveWorkBook.SaveAs('c:\kupony\wydruk.xlsx');
        bilety.quit;

end;

end.

Pozdrawiam,
Przemo

0

Dodaj opcje zmiany domyślnej drukarki i po problemie ( oczywiście gdzieś z poziomu menu/opcji )

1

Przydało by się trochę poprawić kod i formatowanie. Np.

          bilety.cells[1,1].value:=edit1.Text;
          bilety.cells[1,2].value:=data_seansu.date;

wpisujesz raz więc nie musi być w pętli. Jak masz kilka radiobuttonów to możesz też dać RadioGroup i napisać jeden Case z odpowiednim formatowaniem tekstu. Kod byłby mniejszy i ładniejszy. Chwila roboty ale nie mam niestety czasu w tej chwili. Odnośnie problemu, dodajesz do uses Printers i modyfikujesz kod:

bilety.Worksheets.PrintOut(,,,,Printer.Printers[Printer.PrinterIndex]); //drukowanie

1 użytkowników online, w tym zalogowanych: 0, gości: 1