Delphi-5 nyomtatás USB nyomtatóval

Üdv Mindenkinek!

Kezdőként Delphi-5-öt használok. Párhuzamos porttal
rendelkező nyomtatóval nincs problémám.
USB-s nyomtató a következő programrész futtatásakor
csak egy üres lapot dob ( párhuzamos portos nyomtató
a grafikus képernyő tartalmát nyomtatja ki).
...
prnrect:=rect(250,200,4750,3450);
imagerect:=rect(0,0,1016,734);
with printer do begin
printscale:=poprinttofit;
begindoc;
canvas.CopyRect
(prnrect,Unit1.Elso_kep.canvas,imagerect);
enddoc;
end;

Segítséget kérek. Van-e valakinek ötlete, hogy tudnám
USB porton keresztül a képernyő tartalmát kinyomtatni?

Köszi.

Nyomtatás Delphi 7-ben.

Sajnos senki nem tudott segíteni,
ezért áttértem a Delphi 7-re.
Az USB porton keresztül itt sem megy
a képernyő tartalom nyomtatása.
Delphi-ben programozók nem találkoztatok
még ezzel a problémával ?

Cs.G.

Az a helyzet, hogy a Windows

Az a helyzet, hogy a Windows 2000 óta csak driver-en keresztül lehet a portokat elérni, közvetlenül nem. Ha USB akarsz használni akkor erre találsz a freepascal.extra.hu -n komponenst, de ez csak az USB vezérlésére jó. Ha a nyomtató fel van telepítve akkor mi szükség lenne mással nyomtatni? A nyomtatásra pedig már van a fórumon megoldás feltéve.
Üdv.: Totó

Delphi-7 nyomtatás USB nyomtatóval

Az a helyzet, hogy tudom a portokat csak driver-en keresztül lehet elérni, a soros portok elérésére én is használok egy ComPort nevű driver-t. Én az USB portot nem akarom vezérelni!
A meglévő programot, ami egy hagyományos párhuzamos porttal rendelkező nyomtatóval tökéletesen nyomtat, egy USB-portos nyomtatóval szeretném használni. Csak azzal nem működik. Ezt tulajdon képpen a Windows-nak kellene biztosítani.

Cs.G.

RE: Nyomtatás Delphi 7-ben

Szia,

Fura, de nem kéne köze legyen az USB-nek a nyomtatáshoz. Esetleg arra tudok gondolni, hogy a nyomtató drivere nem támogat valami olyan dolgot, amit te szeretnél vele csinálni.

Figyu, amikor én így közvetlenül írogattam nyomtatóra, én mindig megrajzoltam előtte egy image-ra (TImage) osztály, és utána StretchDraw-val rárajzoltam a nyomtatóra. Nem hinném hogy olyan égbekiáltó különbség lenne, de egy próbát megér. A CopyRect-et nem próbáltam, szintén megérné kipróbálni StretchDraw-val.

Nyugi, most én azzal szívok, hogy egyik ügyfelünk vett kéttálcás nyomtatót, és most szeretné ha a programunkból lehetne választani melyik tálcára nyomtasson.

Itt van egy ezeréves programrészletem, 2001-ben csináltam a Honvédségnek egy szolgálatvezénylő programot, az nyomtatott így közvetlenül: (régi kód, de másként csinálnék már benne jópár dolgot... :-D ) (remélem nem csúszik szét a kód)

Menyus


var Rec: TRect;
Mar, Akt, Mekkora : longint ;
imSeged : TImage ;
begin
if printdialog.Execute then begin
screen.cursor := crHourGlass ;
Mar := Im.Picture.Graphic.Height ; Akt := 0 ;
Printer.BeginDoc;
while Mar > 0 do begin
imSeged := TImage.Create(Application) ;
imSeged.Visible := false ;
if Mar >= 1022 then
Mekkora := 1022 else Mekkora := Mar ;

Rec.Top := (Printer.PageHeight-trunc(1022*2.8)) div 2 ;
Rec.Left := (Printer.PageWidth-trunc(Im.Picture.Graphic.Width*2.8)) div 2 ;
Rec.Right := Rec.Left + trunc(Im.Picture.Graphic.Width * 2.8) ;
Rec.Bottom := Rec.Top + trunc(Mekkora * 2.8) ;

try
imSeged.Width := im.picture.graphic.width ;
imSeged.Height := Mekkora ;
imSeged.Canvas.CopyRect(rect(0,0,im.picture.graphic.width,Mekkora),
im.canvas,rect(0,Akt,im.picture.graphic.width,Akt+Mekkora)) ;
imSeged.picture.Bitmap.PixelFormat := pf24bit ;
imSeged.Canvas.pen.color := clblack ;
imSeged.Canvas.pen.width := 1 ;
imSeged.Canvas.MoveTo(0,0) ;
imSeged.Canvas.LineTo(imSeged.Width-1,0) ;
imSeged.Canvas.LineTo(imSeged.Width-1,imSeged.Height-1) ;
imSeged.Canvas.LineTo(0,imSeged.Height-1) ;
imSeged.Canvas.LineTo(0,0) ;

Printer.Canvas.StretchDraw(Rec,imSeged.Picture.Graphic);
if Mar >= 1022 then
begin Akt := Akt + 1022 ; Mar := Mar - 1022 ;end else
begin Akt := Akt + Mar ; Mar := 0 ; end ;
if Mar > 0 then Printer.NewPage else Printer.EndDoc ;
imSeged.Free ;
except
Printer.Abort;
Printer.EndDoc ;
Screen.Cursor := crDefault ;
imSeged.Free ;
raise;
end;
end ;
end ;
Screen.Cursor := crDefault ;
end;

Nyomtatás Delphi7-ben

Szia,
Köszi a segítséget. A nyomtatókkal nincs baj. Minden USB-s nyomtató így viselkedik. A fenti programrész jól bevált eddig.
Tökéletesen nyomtatott a hagyományos nyomtatókkal. Tulajdon képpen ezzel a képernyőn megrajzolt grafikát "másolom rá" a nyomtatóra. Az USB-s nyomtatók is látszólag nyomtatni akarnak, de csak egy üres lap jön ki minden féle hibaüzenet nélkül. Nem hiszem, hogy az általad megadott programrész másként viselkedne, de ki fogom próbálni.

Cs.G.

Könyvajánló

Programozzunk Turbo Delphi Rendszerben