W preferencjach drukarki możesz ustawić domyślne drukowanie w poziomie (z poziomu systemu nie programu), wtedy każdorazowe wywołanie okna dialogowego spowoduje ustawienie domyślnego drukowania w poziomie. Jeżeli do wywołania użyjesz obiektu typu TPrintDialog to z poziomu tego okna dialogowego użytkownik nie będzie mógł zmienić orientacji drukowania o ile nie wejdzie we właściwości wybranej drukarki.
Zastanawiam się dlaczego używasz wogóle okna dialogowego właściwości drukowania? Skoro masz tylko jedna drukarkę to nie może chodzić o wybór drukarki. Orientację strony ustawiasz na sztywno w programie, więc nie może chodzić o zmianę orientacji drukowania. Pozostaje więc tylko wybranie liczby kopii, ale to można rozwiązać za pomocą jakiegoś własnego okienka z określaniem liczby kopii, potem w pętli wystarczy wywołać funkcję drukującą określoną liczbę razy.
Zamiast dostępnych komponentów TPrintDialog i TPrinterSetupDialog możesz jeszcze wypróbować funkcję wywołującą okno dialogowe PrintDlg:
KOD cpp: UKRYJ
void __fastcall TForm1::Button1Click(TObject *Sender)
{
PRINTDLG pd;
ZeroMemory(&pd, sizeof(pd));
pd.lStructSize = sizeof(pd);
pd.hwndOwner = this->Handle;
pd.hDevMode = NULL;
pd.hDevNames = NULL;
pd.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC;
pd.nCopies = 1;
pd.nFromPage = 1;
pd.nToPage = 1;
pd.nMinPage = 1;
pd.nMaxPage = 1;
if(PrintDlg(&pd) == TRUE)
{
// tutaj wstaw funkcję drukującą
DeleteDC(pd.hDC);
}
}
{
PRINTDLG pd;
ZeroMemory(&pd, sizeof(pd));
pd.lStructSize = sizeof(pd);
pd.hwndOwner = this->Handle;
pd.hDevMode = NULL;
pd.hDevNames = NULL;
pd.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC;
pd.nCopies = 1;
pd.nFromPage = 1;
pd.nToPage = 1;
pd.nMinPage = 1;
pd.nMaxPage = 1;
if(PrintDlg(&pd) == TRUE)
{
// tutaj wstaw funkcję drukującą
DeleteDC(pd.hDC);
}
}