Drukowanie w Lazarusie.

0

Witam.

Próbuje wydrukować coś (właściwie to potrzebuje wydrukować StringGrida, ale na początek próbuje cokolwiek), ale mi nie idzie...

W Uses dodałem "printers".
W inspektorze projektu dodałem printers4lazarus do wymaganych komponentów (wyczytąłem gdzieś w necie że tak trzeba zrobić.
Do akcji przycisku dodałem:

procedure TForm1.Button7Click(Sender: TObject);
var
    Drukarka: TPrinter;
begin
  Drukarka := TPrinter.Create;
  Drukarka.BeginDoc;
  Drukarka.Canvas.TextOut(0, 0, 'Jakiś tam tekst');
  Drukarka.EndDoc;
end;                            
 
Wciśnięcie buttona daje błąd:
Project project1 raised exception class 'Exception' with message:
TPrinter is an abstract base class. Please use a printer implementation like the package printers4lazarus.

In file 'printers.pas' at line 303

Podpowiedzcie mi proszę co robię nie tak...

0

Próbujesz wywołać abstrakcyjną metodę. Powinieneś użyć konkretnej implementacji.

0

A mogę poprosić o jakieś naprowadzenie ?

0

Po skopiowaniu przykładu z wiki, nie wiem czemu za pierwszym razem wydrukowało mi cały kod programu a nie "I Printed My Very First Text On 2012-11-16 1915", no ale działa ;).

Teraz będę kombinował jak wydrukować danego StringGrida ....

0
hipekk napisał(a):

Teraz będę kombinował jak wydrukować danego StringGrida ....

No widzisz, gdybyż kombinował, to już byś znalazł i ten art na wiki co ci Patryk podesłał, i gotowy kod drukujący StringGrid. No ale niestety, nie wszyscy umieją korzystać z google i kończy się to wymyślaniem koła od nowa i głupimi pytaniami na forum.

0

Udało mi się napisać kod który drukuje stringgrida w "tekstowym" stylu:
|-----------|----------|---------|

1 2 3
4 5 6
----------- ---------- ---------
Chciałem zastąpić "-" znakiem ASCI 205 - jednak zamiast tego znaku Lazarus drukuje mi znaki zapytania.... Czemu?
0

Chciałem zastąpić "-" znakiem ASCI 205 - jednak zamiast tego znaku Lazarus drukuje mi znaki zapytania.... Czemu?

Oj, kodowania to może być ciężka sprawa w Lazarusie, zwłaszcza jeżeli mówimy o czymś mniej przewidywalnym. Znaki zapytania zazwyczaj wynikają z błędu konwersji kodowań (np. UTF8->ANSI), spróbuj to nadać w UTF8 bo to jest domyślne kodowanie kontrolek. Poza tym, są różne interpretacje czym jest #205, nie kierowałbym się kodowaniem ASCII >127.

0

Dla próby wstawiłem na formatkę Label i przypisałem do niego "ansitoutf8(#205+#205+#205+#205+#205)" - na formatce wyświetliła się linia taka jak chciałem, lecz z wydrukiem już jest problem... (drukują się jakieś znaczki ;) ).

Próbuję narysować ramki za pomocą canvas.lineto.... możecie mi podpowiedzieć jak wyliczyć położenie i "wymiary" tekst (o ile w ogóle się da ;) )

0
hipekk napisał(a)

Próbuję narysować ramki za pomocą canvas.lineto.... możecie mi podpowiedzieć jak wyliczyć położenie i "wymiary" tekst (o ile w ogóle się da )

Prócz tego co nie można, to raczej wszystko się da;


Żeby prowadzić linię przez Canvas.LineTo trzeba najpierw umieścić kursor graficzny w odpowiednim miejscu przez Canvas.MoveTo; Jak wyliczyć rozmiar tekstu? bardzo łatwo - ustalasz atrybuty czcionki kanwy i pobierasz szerokość tekstu przez Canvas.TextWidth oraz wysokość przez Canvas.TextHeight;

Zauważ, że drukarki obsługują różną rozdzielczość wydruku, więc na różnych drukarkach proporcje mogą być inne; Trzeba pobrać rozdzielczość i elegancko wyliczyć szerokość i wysokość danej kartki w pikselach dzięki prostej arytmetyce; Jest to opisane w linku jaki podał Ci @Patryk27;

Nic tylko testować, testować, testować;

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