wysyłanie tekstu na igłówkę

0

Problem jest następujący:
chcę wysłać tekst na drukarkę igłową (system XP i nie można go zmienić na 98).
Robię to tak:

printer.begindoc;
printer.canvas.textout(0,0,'Linia 1');
printer.canvas.textout(0,0,'Linia 2');
printer.enddoc;

no i teraz problem występuje przy przejściu głowicy drukarki z lini pierwszej do następnej.
Standardowo znak ten to #13#10 (CR LF)
Jeśli dopioszę #13#10 do linijki drukującej tekst "Linia 1":
printer.canvas.textout(0,0,'Linia 1'#13#10);
to linia druga i tak jest drukowana w tej samej lini.
Jak dam do wydruku 100 linijek to każda następna jest drukowana na poprzedniej [stuk]
Próbowałem też najpierw przypisać stringa którego chcę drukować razem ze znakami przejscia do jakiejś zmienej i potem wydrukować tę zmienną ale też nic nie wychodzi.
W systemie mam zainstalowaną drukarkę Generic/Text only a używam drukarki Panasonic KX-P1081 (ale to tylko do prób bo później będzie jeszcze inna OKI chyba ale tez igłówka.)

http://4programmers.net/Forum/viewtopic.php?id=29603#31388
w tym miejscu znalazłem inne rozwiązania drukowania tekstowego w delphi ale mi niestety nie chcą drukować w ogóle te przykłady.
Ma ktoś pomysł jak wymusić na drukarce przejście do następnego wiersza ?
[glowa]

0

Hmm.. zastanów się co chcesz osiągnąć i jakich do do tego celu narzędzi użyjesz.....

Otóż z założenia, wszystkie drukarki mają w sobie wbudowaną tablicę znaków (tak jak np karta graficzna ma w trybie tekstowym). Jeżeli chcesz drukować tylko tekst (i to nie skalowany i nie fikuśny, kolorowy itd..) to najlepiej drukować właśnie za pomocą zwykłego wysyłania znaków na port drukarki. Drukarka działą o dziwo bardzo podobnie do monitora, tzn możesz pracować w trybie grafcznym, albo tekstowym. Ty na siłę chcesz używać trybu graficznego, i to jeszcze z błędem. Otóż :

printer.begindoc;
printer.canvas.textout(0,0,'Linia 1');
printer.canvas.textout(0,0,'Linia 2');
printer.enddoc;

powoduje utworzenie wirtualnego Canvasu w pamięci PC'ta... następnie ty rysujesz na nim tekst (zaznaczam - RYSUJESZ) a następnie całość jest wysyłana do drukarki. Jak wiadomo igłówki dość słabo radzą sobie z wszelkiego rodzaju rysunkami, a ty na siłę próbujesz właśnie rysunek wydrukować. Teoretycznie to też powinno działać, ale zauważ co robisz :
printer.canvas.textout(0,0,'Linia 1');
printer.canvas.textout(0,0,'Linia 2');
rysujesz jedną i drugą linijkę dokładnie w tym samym miejscu!
Radzę poczytać troche o TCanvas i procedurze TextOut().
Poza tym aby mniej więcej rozplanować twój wydruk, radzę abyś najpierw porysował po zwykłym Canvasie formy, a dopiero potem drukował.. szkoda papieru.

--
Tu masz ładną procedurkę drukującą TEXTOWO w delphi,
http://delphi.cartall.com.pl/Pytania/pyt7.htm

0
  1. No że ten canvas to bardziej graficznie to wiem, ale sam się zdziwiłem jak wrzuciwszy poprzez canvasa na igłówce idzie to bardzo sprawnie. W takim przypadku dwa pierwsze parametry wywołania tej funkcji sąchyba pomijane bo ich zmiana nic mi nie daje, więc linijki
    printer.canvas.textout(0,0,'To jest tylko próba')
    printer.canvas.textout(100,100,'To tylko próba')
    są w tym przypadku równoważne.
    Jeśli będę drukował na atramencie to wtedy idzie to jako grafika i nie są równoważne i działa bardzo dobrze.

  2. co do tych adresów to własnie coś mi się chrzani i kilka błędów wyskakuje mi w tych procedurach. Próbowałem ich jeszcze przed tym rozwiązaniem które ja zastosowałem.

Tak więc problem pozostał bo nijak nie mogę dojsć do tego aby zmusić karetkę do powrotu na początek linijki i przejścu do następnego wiersza (przesuniecia rolki z papierem)

chyba zastosuję tutaj rozwiazanie z wysyłeniem pliku tekstowego bezposrednio na port lpt poprzez funkcję copy (sztuczka jeszcze z dosa :-) ), ale jak na mnie jest to rozwiązanie mało eleganckie.

może popróbuję jeszcze z tymi procedurkami.

0

Moment... Nie znam się za bardzo na igłówkach (kto jeszcze na tym drukuje?? ;p ), ale wydaje mi się, że do drukarki trzeba wysłać jakąś całość tekstu... może spróbuj wydrukować taki tekst: 'Linia 1'+#13+#10+'linia 2'. Może to zadziała...
P.S. Możesz zamiast drukarki na drugim kompie walnąć jakąś symulację i połączyć kablem LPT... Może to ci pozwoli zaoszczędzić papier ;p
[dopisane]
A nie ma jakiejś instrukcji sprzętowej do drukarki, przesuwającej linijkę papieru?

0

O papier to mi za bardzo nie chodzi bo przecież na jednej kartce mogę próbować ze 30 razy :-D

A wysyłanie w jednym stringu całego tekstu to tez troszkę kiepsko.
W końcowym programie będę wysyłać na drukarkę calutki plik tekstowy który może zajmować nawet 1,5MB.

Chciałem to jakoś elegancko zrobić czytając linijka po linijce z tego pliku i bach na drukarę.

A co do tego czy jeszcze ktoś na tym drukuje ;p
Oczywiście że tak, igłówka dla faktur to idealna sprawa, jeszcze nie widziałem lasera na papier z traktorem :-D he he
albo przelewy które też drukuje się przez traktor :)
[cya]

Dopisane:
Zapomniałem dodać że z wysyłaniem tekstu na drukarkę w jednym stringu podzielonego poprzez znaki #13#10 też próbowałem i nic nie dało ;-|

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