Znów drukowanie...

0

Taki problem: wysyłam z programu na drukarkę różne teksty, tym razem za pomocą kodu typu:

[code]int Szer = PageWidth;
int Wys = PageHeight;
Printer()->BeginDoc();
Printer()->Canvas->TextOut(Szer/10, Wys/10, "Wiersz pierwszy");
Printer()->Canvas->TextOut(Szer/10, 2 * Wys/10, "Wiersz drugi");
Printer()->Canvas->TextOut(Szer/10, 3 * Wys/10, "Wiersz trzeci");
Printer()->EndDoc();[/code]
Specjalnie do pozycjonowania używam wartości obliczanych z rozmiaru strony a nie konkretnych wartości pixeli, aby (mam nadzieję) uniknąć problemów. Jednak problemy są. Program musi drukować na atramentówce i igłówce i oto co się dzieje w kolejności:

  • uruchamiam program
  • wydruk na atramecie - OK
  • potem wydruk na igłach - źle (za duże odstępy między wierszami)
  • drugi wydruk na igłach - już jest OK
  • znów wydruk na atramencie (po igłach) - źle (za małe odstępy między wierszami)
  • ponowny wydruk na atramencie - już jest OK

Czyli generalnie na atramencie zawsze by dobrze drukowało, gdyby nie igły. Po przejściu na igły, czy to po atramencie czy zaraz po uruchomieniu programu (czyli jakby nie było w ogóle atramentówki) zawsze jest źle za pierwszym razem. Za drugim razem na igłach jest już dobrze.
Tam gdzie jest źle wygląda to tak, że są złe odstepy między wierszami, zaś rozmiar liter jest właściwie bez zmian.

Jeszcze taka ciekawostka: załóżmy że mam tylko atrament, bez igłówki. Gdy drukuje w normalnym trybie to jest OK. Jeśli zaś przełączę w tryb oszczędny atramentu to zawsze drukuje z tymi dużymi odstępami, jak na igłach za pierwszym razem. Co za cholera z tymi drukarkami! :-8
Nie podaję nazw drukarek bo przecież nie ma to znaczenia - program musi być uniwersalny. Jeśli ktoś może mi pomóc to bardzo proszę.
Dzięki dla wszystkich, którzy pomagają!

0

A może masz problem ze sterownikami... Zrób podobną sekwencję wydruków (do tej którą przedstawiłeś) np. w WinWord i sprawdź jak wyjdzie...

PS> Sam kod działa... I myślę, że problem może być właśnie w dwóch pierwszych liniach... Tam masz PageWidth i PageHeight. Skąd pobierasz te dane? Bo z twojego opisu wynika, że problem może leżeć w tym, że te wartości ulegają zmianie.

Sam kod działa jak 'trza', możesz sprawdzić na Canvie z TImage:

int Szer = Image1->Width;
int Wys = Image1->Height;
Image1->Canvas->TextOut(Szer/10, Wys/10, "Wiersz pierwszy");
Image1->Canvas->TextOut(Szer/10, 2 * Wys/10, "Wiersz drugi");
Image1->Canvas->TextOut(Szer/10, 3 * Wys/10, "Wiersz trzeci");
0

Sorki, parametry strony biorę z obiektu Printer, czyli:
[code]int Szer = Printer()->PageWidth;
int Wys = Printer()->PageHeight;[/code]

0

trudno mi cokolwiek powiedzieć na pewno (atrament - pusty, igłówki żadnej w pobliżu), ale może po przejściu na drukarkę igłową rozmiary Page są zmieniane przez nią, a później z jakichś powodów nie są odświeżane po ponownym przejściu na atramentówkę...

Spróbuj wprowadzić (dla testu) jakieś dane z góry (np. takie jakie masz na atramentówce PageWidth) i sprawdź co się będzie działo...

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