problem z drukowaniem

0

Cześć,
Czy ma ktoś pojęcie dlaczego nie udaje mi się drukować używając:

procedure TForm1.Label2Click(Sender: TObject);
var
drukarka : TPrinter;
begin
drukarka.BeginDoc;
drukarka.Canvas.Font.Color := clBlack;
drukarka.Canvas.Font.Size := 15;
drukarka.Canvas.TextOut(20,20,'test');
drukarka.Free;
drukarka.EndDoc;
end;

Oczywiście drukarka jest sprawna, drukowanie z notatnika idzie bez problemu, a tutaj dostaję 'Canvas not allowed in RAW Mode, albo jakieś inne komunikaty.

0

procedure TForm1.Label2Click(Sender: TObject);
begin
Printer.BeginDoc;
Printer.Canvas.Font.Color := clBlack;
Printer.Canvas.Font.Size := 15;
Printer.Canvas.TextOut(20,20,'test');
Printer.Free;
Printer.EndDoc;
end;

i do uses Printers

0
Misiekd napisał(a)

Printer.Free;
Printer.EndDoc;

ehhh ten CopyPaste ;-)
ciezko byloby wykonac jakas operacje na zwolnionym obiekcie.
no i tego Printer.Free w ogole chyba nie powinno tam byc.

0

:P

ale idea jest uchwycona :)

0

dzięki, faktycznie .Free nie na miejscu ;-)
Teraz już ładnie drukuje, tak przy okazji,
drukarka.paperSize.PaperName := 'A5';
spowoduje że bedzie drukować w formacie a5?

0

I jeszcze jedna prośba bo na razie robię to na pałe niszcząc zasoby wydruków :)
Program drukuje w 3 miejscach na gotowym formularzu A5 Dane: Imię, Nazwisko, Stanowisko.

Imię jest w linii (od góry: 6cm, od lewej: 4,2cm)
Nazwisko (od góry 6,5 cm, od lewej: 4,2cm)
Stanowisko (od góry 7cm, od lewej 4,2cm)

Jak to obliczyć (przeliczyć cm/px żeby dokładnie za pomocą px określić gdzie ma się wydrukować dany tekst)

0
  1. pobrać DPI drukarki (jest w serwisie)
  2. 1 cm = 1/2,54 cala
  3. 1 cal = DPI punktów
  4. 1cm = dpi / 2,54 punktów
0

A czego jeszcze mogę nie mieć w uses jeżeli wywołując:

rozdzX:=GetDeviceCaps(drukarka,LogPixelSX); // liczba pikseli na cal w poziomie
rozdzY:=GetDeviceCaps(drukarka,LogPixelSY); // liczba pikseli na cal w poziomie

podczas kompilacji dostaję, Identifier not found GetDeviceCaps?

0

najedź na GetDeviceCaps i kliknij magiczny przycisk F1

0

zrobiłem to inaczej:
drukarka.xdpi i .ydpi

0

Mam jeszcze jeden bardzo diwny problem, mianowicie, pobrałem rozdzielczość X/Y drukarki (600dpi/600dpi).
ObliczX := round(rozdzX / 2.54);
ObliczX := ObliczX * 10;
ObliczY := round(rozdzY / 2.54);
ObliczY := ObliczY * 10;

więc odległość X,Y od 0,0 powinna być równa, i wynosić około 10cm+/-. Jednakże po wydrukowaniu za pomocą tych współrzędnych wydrukowany tekst jest od góry przesunięty o 10,5 cm, a od lewej już o 13,5cm, skad wynika tak duża różnica?

0

jak pobierzesz przez
rozdzX:=GetDeviceCaps(drukarka,LogPixelSX); // liczba pikseli na cal w poziomie
rozdzY:=GetDeviceCaps(drukarka,LogPixelSY); // liczba pikseli na cal w poziomie
to zobaczysz, że fizycznie nie jest to 600x600

0

no tylko że ciągle nie wiem czemu w LAzarusie GetDeviceCaps nie działa, nawet jak najade na GetDeviceCaps i dam F1, to pokazuje ze nie ma żadnej pomocy dla unit1.pas :/

0

GetDeviceCaps jest w Delphi w module Windows

0

drukarka := Printer;

teraz jak wywołam GetDeviceCaps(drukarka, LOGPIXELSX);
to dostaje błąd kompilacji:
unit1.pas(179,34) Error: Incompatible type for arg no. 1: Got "TPrinter", expected "LongWord"

błąd rozumiem, tylko nie bardzo wiem dlaczego on oczekuje jakiegoś LongWorda

0

Printer.Handle

0

unit1.pas(179,34) Error: identifier idents no member "Handle"

:-/ albo jestem aż tak lewy albo ciagle coś nie chce działać z tym topornym DPI.
ani:
drukarka.Handle, Printer.Handle, drukarka, Printer, nie działają zwracając powyższy błąd

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