[ erc kragujevac @ 22.05.2007. 10:43 ] @
Ima li neko resenje? Txt stampa u Delfiju6 pravi probleme na stampacima sa usb prikljuckom-nece da posalje stampanu informaciju koja se vidi na stampanje. Molim vas za pomoc! Neki tutorijal ili komanda koja ce ga naterati da prepozna stampac( sa ranijom komandom za stare stampace radi kao doksa).
[ savkic @ 22.05.2007. 13:24 ] @
> Ima li neko resenje? Txt stampa u Delfiju6 pravi probleme na stampacima sa usb
> prikljuckom-nece da posalje stampanu informaciju koja se vidi na stampanje. Molim
> vas za pomoc! Neki tutorijal ili komanda koja ce ga naterati da prepozna
> stampac( sa ranijom komandom za stare stampace radi kao doksa).

Razjasni pitanje. Šta znači prepoznati štampač, ne šalje štampanu informaciju i kako štampaš?
[ nikola.j @ 23.05.2007. 10:47 ] @
Ako imas mogucnosti da snimis temp fajl, mozes da posaljes komandu "notepad.exe /p ime_fajla.txt" sto ce odstampati fajl na default stampacu
[ erc kragujevac @ 23.05.2007. 14:06 ] @
u pitanju je Delfi. U kodu postoji komanda koja txt stampu salje na LPT i to radi savrsenu. korisnicki ekran predvidja unos parametara na osnovu koji ih se pokupe podaci i na sledecoj formi koja je napravljena za potrbe stampe ti podaci se prikazuju. Postavljen je direktorijum u koji se smesta i iz koga se poziva txt stampa koja se prikazuje na navedenoj formi.Klikom na dugme STAMPA korisnik salje informaciju na stampu. Problem je sto kod stampaca sa USB prikluckom ta komanda ne reaguje. Putanja kojom se salje na LPT je u redu,treba mi naredba kao za LPT kojom cu stampu poslati na USB port. Inace fajl mogu da prozovem iz sacuvanog direktorijuma,ali ovo treba da koriste ljudi koji sve rade na klik i ne interesuje ih gde sam ja sta cuvao. Pozdrav
[img]
[ Srki_82 @ 23.05.2007. 14:16 ] @
Zasto jednostavno ne bi uzeo device context stampaca i sam iscrtao tekst, ili koristi neki report... ko zna na koji stampac ce neko da spampa... mozda ce stampati na neki virtualni (pdf, e-mail sender,...) stampac?
[ savkic @ 23.05.2007. 15:22 ] @
> koji se smesta i iz koga se poziva txt stampa koja se prikazuje na navedenoj
> formi.Klikom na dugme STAMPA korisnik salje informaciju na stampu. Problem je
> sto kod stampaca sa USB prikluckom ta komanda ne reaguje. Putanja kojom se
> salje na LPT je u redu,treba mi naredba kao za LPT kojom cu stampu poslati na USB port.

Pretpostavljam da kod LPT štampe samo kopiraš sadržaj txt fajla na LPT port? Taj pristup ne može funkcionisati kod Win only štampača (kakva je većina sada), imaš nekoliko alternativa:
1) Moraš sam raditi štampanje, Printer.BeginDoc, PRinter.TextOut i sl. Ili AssignPrn (koji interno radi na prethodni način).
2) Probaj neki report alat, beše FastReport ima nešto za štampanje txt fajlova.
3) Neki specijalizovan alat za štampanje txt fajlova iz DOS programa (tj. na način kako se ranije radilo), tu je ruski dosprn ili Printing (www.wings.co.yu/download).
4) Zavisno od štampača, čak i kod USB možeš pokušati sa raw slanjem teksta, preko Win Spooler funkcija. Ovo možeš probati i sa DPrintom, komand line verzijom Printinga.
[ Miloš Baić @ 23.05.2007. 18:44 ] @
U sklopu JEDI projekta imaš par primera.
Ako ne uspeš, probaj u projekat uključiti TPrinterSetupDialog i/ili TPrinterDialog.

BTW, nemam trenutno instaliran JEDI projekat, ali mislim da se nešto može odraditi i sa TJvgReport!?!

[Ovu poruku je menjao Miloš Baić dana 23.05.2007. u 20:31 GMT+1]
[ obucina @ 24.05.2007. 23:26 ] @
Ako ostajes pri LPT, za ovo moraš da koristiš poseban program. A sad, za inat, ne mogu da se setim imena.

Evo:

http://www.google.com/search?q=USB+LPT+print
[ erc kragujevac @ 25.05.2007. 10:54 ] @
Deo koda izgleda ovako(na Click dugmeta Stampa)

AssignFile(F, 'a.tmp');
Rewrite(F);


Write (F, Chr(10), Chr(12)); {reset printera}
Write (F, Chr(27), Chr(64)); {reset printera}
Write (F, Chr(27), Chr(54)); {STAMPA KARAKTERE 128 - 159}
{write (F, Chr(27), Chr(54), Chr(27), Chr(64));}
Case frmPPra.RadioGroup1.ItemIndex Of
0: latinica(0);
1: latinica(1);
2: cirilica;
End;

CloseFile(F);
SCREEN.Cursor := crDefault;

FreeMem(Buf, BufSize);

S := Windows.GetVersion;
If S > 0 Then Komanda := 'cmd /c copy "a.tmp" lpt1:/b'
Else Komanda := 'command.com /c copy "a.tmp" lpt1:/b';

Problem je sta da stavim umesto zadnje dve linije koda,a da mi on stampu posalje na Usb stampac.
Hvala za svu dosadasnju pomoc,ali bi posebno molio ako neko moze da mi primeni ideju sa
notepad.exe /p ime_fajla.txt izmenama u kodu.Dobrodosla je i bilo koja druga izmena!
HVALA!!!
[ nikola.j @ 25.05.2007. 11:50 ] @
Kada želiš da kopiraš na LPT port koristiš "lpt:" u kodu. Jesi li probao da kopiraš na "USB001:" ili kako se već zove port na koji pokušavaš da štampaš?

Drugo, pošto već imaš fajl snimljen (a.tmp) startuj (WinExec ili bolje CreateProcess) "notepad.exe /p a.tmp".

Predlažem ti da ostaviš i jednu i drugu opciju u programu, pa korisnik neka podesi.

Pošto će verovatno uslediti pitanje za CreateProcess, iskoristi ovo:
Code:

function RunAndWait(FileName:String; Visibility : integer): integer;
var
  zAppName:array[0..512] of char;
  StartupInfo:TStartupInfo;
  ProcessInfo:TProcessInformation;
begin
  StrPCopy(zAppName,FileName);
  FillChar(StartupInfo,Sizeof(StartupInfo),#0);
  StartupInfo.cb := Sizeof(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := Visibility;
  if not CreateProcess(nil, zAppName, nil, nil, false, CREATE_NEW_CONSOLE or
    NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
  Result := -1
  else begin
    WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess,cardinal(Result));
    CloseHandle( ProcessInfo.hProcess );
    CloseHandle( ProcessInfo.hThread );
  end;
end;


Ili pošto već imaš:
Komanda := 'cmd /c copy "a.tmp" lpt1:/b'
prepravi u/dodaj :
Komanda := 'cmd /c notepad.exe /p "a.tmp"'