[C++ Builder] Sterownik drukarki

0

Czy można zastosować parametry drukowania przy przesyłaniu danych do drukowaniu do sterownika drukarki?

0

możesz jaśniej

0

Wysyłam do sterownika komunikat drukuj tekst "" ale nie wiem jak i czy można wysłać komunikat jak ma wydrukować ten tekst. Od lewej, od góry, czcionka itp.

0

yyy a która to drukarka ma rozkaz drukuj tekst "". Może jak poczytasz jak się w ogóle drukuje to Ci się rozjaśni trochę.

0
char *cSendBuf = "123";
RawDataToPrinter( L"\\\\AGO\\Oki ML 520 Elite (IBM)", cSendBuf, strlen(cSendBuf) ) );

Tak wysyłam "drukuj tekst"

0

W sumie, odpowiem w stylu w jakim zadałeś pytanie:
Można.

0
  1. RawDataToPrinter to nie jest ani procedura BCB ani systemowa więc gdzieś musi być opisana - może ma już wbudowane metody do tego
  2. wnioskuję, że jest to drukarka igłowa więc trzeba sobie poszukać kodów sterujących do konkretnego modelu i "bawić się" w ozdabianie tekstu - tzn trzeba odpowiednie kody powstawiać w odpowiednie miejsca w cSendBuf
0
Misiekd napisał(a)

1...- tzn trzeba odpowiednie kody powstawiać w odpowiednie miejsca w cSendBuf

Jak wysłać wraz z tekstem np CR (Carriage Return), ESC 5, itp. Jakie miejsca masz na myśli?

char *cSendBuf = "123\CR";

// drukuje: 123CR

0

w delphi można zbudować string tak

s := #27'5jakiś tekst'

co skutkuje wysłaniem ESC 5 jakiś tekst
w c++ jest coś takiego http://cpp.comsci.us/etymology/literals.html

Jakie miejsca masz na myśli?

jak masz tekst np. ala ma kota i ma chcesz mieć np. kursywą to przed ma trzeba wstawić kod sterujący włączający kursywę a za wyłączający

0
Misiekd napisał(a)

w delphi można zbudować string tak

s := #27'5jakiś tekst'

co skutkuje wysłaniem ESC 5 jakiś tekst
w c++ jest coś takiego http://cpp.comsci.us/etymology/literals.html

Nie daje rady. Drukuje mi kod, który wpisuję. Nie wiem czym oddzielić tekst od kodu.

0

a co wysyłasz?

0

Jak wynika z Twojego odnośnika pojedyńcze komendy można dodać na końcu tekstu np: '\n', '\f'.
Ale jak chcę wydrukować od lewej strony tekst: "test". ( Komenda: ASCII ESC % 9 n lub Decimal 27 37 57 n ( n = 0 do 127 ) ) to nie wiem jak połączyć tekst z komendą.

0
  1. gdzie tam jest napisane, że tylko na końcu?????
  2. to nie są żadne komendy tylko znaki sterujące
  3. wątpię, że robisz to na jakieś zaliczenie albo dla zabawy więc zostaje tylko możliwość, że robisz to dla jakiejś firmy. Jak nie potrafisz to zleć to komuś
  4. char *cSendBuf = "\0x1b%9123";
0
Misiekd napisał(a)
  1. wątpię, że robisz to na jakieś zaliczenie albo dla zabawy więc zostaje tylko możliwość, że robisz to dla jakiejś firmy. Jak nie potrafisz to zleć to komuś

Jestem bardzo ciekaw na jakiej podstawie tak przypuszczasz?

0

na takiej, że na studiach zapewne nawet nie wiedzą co to drukarka igłowa a dla zabawy/do nauki to by wypadało zacząć od podstaw. No chyba, że chodzi ci o fragment, że nie potrafisz no ale to widać po postach.

0

Muszę czasami wypełniać druk w formacie A4 przez kalkę (kilka stron). Zszyty jest on jak książka i nazywa się karnet TIR. W drukarce igłowej przy standardowej instrukcji Print() (TPrint) papier jest wypluwany po skończonym druku. Mnie zależało żeby wałek przewinął włożoną kartkę do początku. Czyli wkładam kartkę do drukarki drukuję do określonego miejsca teksty w różnych polach i wracam do początku strony. Dlatego funkcja Print() jest mi nie przydatna. Szukałem rozwiązania i trafiłem na funkcje opisaną wyżej. Widzę jednak, że nie jest to proste. Po wywołaniu RawDataToPrinter() z najprostszą formą tekstu typu *char cSendBuf = "text" drukarka kończy drukowanie i koniec jej pracy, nie przewija papieru. To mogłoby tak zostać bo ręcznie też mogę kartkę wykręcić. Ale głównie chodzi mi o to jak wstrzelić się w konkretne pola formularza z określonym tekstem. I to jest cały powód tego wątku.
Zapis, który mi tu podałeś w żaden sposób nie działa na drukarkę

char *cSendBuf = "text\0x1b%9123";

Tzn. drukarka drukuje text za każdym razem z większym odstępem od lewej. Domyślam się, że 0x1b jest inną formą ESC?

0

1b to jest esc (27) ale szesnastkowo a 0x mówi kompilatorowi, że po x jest liczba zapisana szesnastkowo
a teraz zacznijmy od tego, że w kodach sterujących IBM nie ma takiej sekwencji jak ESC % 9 czy też ESC 9 natomiast przy emulacji EPSON ESC % przełącza pomiędzy zestawami znaków więc może najpierw napisz co chcesz zrobić. Przeszukałem kody sterujące zarówno IBM jak i EPSON i nigdzie nie widzę możliwości przewinięcia do góry strony

0

W przewodniku "Oki 520 521 user manual guide" jest strona Okidata MICROLINE Standard Commands, na której są podane komendy Okidata gdzie występuje ESC % 9 n. Ale może nie jest to istotne teraz. Proszę, żebyś mi napisał jak wydrukować tekst od określonego miejsca np 10 znaków od lewej i 10 mm od góry potem przewinąć stronę do kolejnej pozycji X,Y.

0
  1. a masz ustawioną drukarkę w takim trybie? Tzn. możesz mieć np. włączoną na niej emulację IBM lub EPSON - aby to sprawdzić pewnie trzeba wydrukować konfigurację.
  2. ESC % 9 n to jest Line Spacing czyli odstęp między liniami.
  3. drukarka igłowa jest drukarką wierszową - drukuje wiersz po wierszu - nie możesz wydrukować czegoś 10cm od góry - możesz wydrukować coś 3 wiersze od góry. Aby wydrukować coś 10 znaków od lewej wystarczy jej wysłać 10 spacji i potem właściwy tekst. Tutaj podstawową jednostką nie jest cm czy mm ale wiersz i znak. Musisz jeszcze wziąć pod uwagę, że wiersze mogą być różnej wysokości LPI a znaki różnej szerokości CPI.
  4. jest też ESC % 5 n które potrafi wysunąć stronę o max 0,88 cala (127/144) natomiast nie spotkałem się z drukarką, która potrafiła by cofnąć wysunięcie.
  5. co do formularzy urzędowych (np. PITy) to są one tak projektowane, żeby dało się łatwo "wstrzelić" w odpowiednie kratki na drukarce igłowej
0

Jeżeli chodzi o emulację to ustawiona jest na EPSON FX.

0

no to jak masz ustawioną emulację epson to nie będą działać komendy nie wchodzące w skład komend sterujących epson

0

Czy ta sama zasada tyczy się IBM gdybym chciał zmienić emulację? Jeżeli tak to nie ma sensu jej zmieniać.
Czy istnieją komendy rozszerzone poza standardowymi, który można znaleźć w instrukcja obsługi drukarki?
Czy te standardowe są wspólne dla wszystkich emulacji?

0

Każdy zestaw (IBM, EPSON, OKI) ma swoje własne komendy. Poszczególne polecenia mogą się pokrywać ale nie muszą. Koniec, kropka. Jak masz ustawioną emulację na IBM to drukarka przyjmuje TYLKO te komendy, które ta emulacja obejmuje. Nie ma czegoś takiego jak komendy standardowe ani rozszerzone.

0

To jak traktować te komendy z instrukcji obsługi Oki "Okidata MICROLINE Standard Commands"? Czy one dotyczą OKI, EPSON czy IBM?

0

jak wyłączysz emulację EPSON to będzie reagowała na komendy z tej instrukcji

0

Znalazłem w necie stronę z kodami epson fx "Epson FX Printer Codes". Wydaje mi się, że żaden z kodów, które próbuję zastosować nie działa. Np "Set left margin" ESC 1 n. to w jak wysłać tekst z takim kodem?
char *cSendBuf = "text\0x1b 6C 1";

0

const char* buf = "\0x1bl\0x01"; // na oko tak

\0x1b ESC
l po prostu l
\0x01 nr kolumny

0
krwq napisał(a)

const char* buf = "\0x1bl\0x01"; // na oko tak

\0x1b ESC
l po prostu l
\0x01 nr kolumny

A gdzie umieścić tekst "ala ma kota"? Za kodem: tekstu nie drukuje. Przed kodem tekst nie będzie ustawiony na kolumnie określonej w kodzie.
Czy tylko w ten sposób można zadrukować formularz?

char *cSendBuf = "                   text\ntext1               text3         text4\ntext5";
0

pokaż w jaki sposób wysyłasz, że "tekstu nie drukuje"

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