Lazarus 2.0.8 (2020.04.16.)
Letöltés

file Nyomtatás linux alatt

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

EZT a linket most találtam, érdemes megnézni a forrásokat, tanulságos!

i5 3470
8GB
Win 10
CodeTyphon 7.0
#187

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

Jelentem, sikerült összehozni leírás alapján egy olyan Cairo-t használó egyszerű dolgot, amely Windows és Linux alatt is változatlanul működik (ha telepítve van a GTK+ és a Cairo a rendszerre)!
 
unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
  glib2, gdk2, gtk2, gtkdef, cairo, ExtCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Image1ChangeBounds(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
//ha már nincs a Free Pascalban, hát beleteszem a gdk_cairo_create-t
function gdk_cairo_create(drawable: PgdkDrawable):Pcairo_t; cdecl; external gdklib;
 
var
  Form1: TForm1; 
  ct: Pcairo_t;
  gdio: PGDIObject;
implementation
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  image1.Picture.Bitmap.Canvas.Brush.Color:= clWhite;
  image1.Picture.Bitmap.Width:= 300;
  image1.Picture.Bitmap.Height:=300;
  image1.Picture.Bitmap.Canvas.FillRect(0,0,300,300);
 
end;
 
procedure TForm1.Image1ChangeBounds(Sender: TObject);
begin
  image1.Picture.Bitmap.Canvas.FillRect(0,0,300,300);
  gdio:= PGDIObject(image1.Picture.Bitmap.Handle);
  ct:= gdk_cairo_create(gdio^.GDIBitmapObject);
 
  cairo_move_to (ct, 128.0, 25.6);
  cairo_line_to (ct, 230.4, 230.4);
  cairo_rel_line_to (ct, -102.4, 0.0);
  cairo_curve_to (ct, 51.2, 230.4, 51.2, 128.0, 128.0, 128.0);
  cairo_close_path (ct);
 
  cairo_move_to (ct, 64.0, 25.6);
  cairo_rel_line_to (ct, 51.2, 51.2);
  cairo_rel_line_to (ct, -51.2, 51.2);
  cairo_rel_line_to (ct, -51.2, -51.2);
  cairo_close_path (ct);
 
  cairo_set_line_width (ct, 10.0);
  cairo_set_source_rgb (ct, 0, 0, 1);
  cairo_fill_preserve (ct);
  cairo_set_source_rgb (ct, 0, 0, 0);
  cairo_stroke (ct);
 
  cairo_destroy(ct);
end;
 
 
initialization
  {$I unit1.lrs}
 
end.          

Tesztelve Windows alatt (telepített GTK+ és Cairo) és Linux alatt is.

i5 3470
8GB
Win 10
CodeTyphon 7.0
#186

  • hop
  • hop profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 53
  • Karma: 1
  • Köszönetek: 0

hop válaszolt a témára: Válasz:Nyomtatás linux alatt

Na eddig jutottam, lefordul, elindul, semmi hibaüzi, de csak egy üres form.
procedure TForm1.Form1Paint(Sender: TObject);
var
  cs: Pcairo_surface_t;
  ct: Pcairo_t;
  dpy: PDisplay;
  window: TWindow;
  screenid: LongInt;
  scr: PScreen;
begin
  dpy := GDK_WINDOW_XDISPLAY(Pointer(PGtkWidget(Form1.Handle)^.window));
  window := GDK_WINDOW_XWINDOW(Pointer(PGtkWidget(Form1.Handle)^.window));
  scr := XDefaultScreenOfDisplay(dpy);
  screenid := XScreenNumberOfScreen(scr);
  cs:= cairo_xlib_surface_create(dpy, window, DefaultVisual(dpy, screenid), 300, 300);
  ct:= cairo_create(cs);
  cairo_set_source_rgb (ct, 0, 1, 1);
 
  cairo_move_to (ct, 128.0, 25.6);
  cairo_line_to (ct, 230.4, 230.4);
  cairo_rel_line_to (ct, -102.4, 0.0);
  cairo_curve_to (ct, 51.2, 230.4, 51.2, 128.0, 128.0, 128.0);
  cairo_close_path (ct);
  cairo_stroke(ct);
 
  cairo_move_to (ct, 64.0, 25.6);
  cairo_rel_line_to (ct, 51.2, 51.2);
  cairo_rel_line_to (ct, -51.2, 51.2);
  cairo_rel_line_to (ct, -51.2, -51.2);
  cairo_close_path (ct);
 
  cairo_set_line_width (ct, 10.0);
  cairo_set_source_rgb (ct, 0, 0, 1);
  cairo_fill_preserve (ct);
  cairo_set_source_rgb (ct, 0, 0, 0);
  cairo_stroke (ct);
 
  cairo_destroy(ct);
  cairo_surface_destroy(cs);
end;

MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25
#175

  • hop
  • hop profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 53
  • Karma: 1
  • Köszönetek: 0

hop válaszolt a témára: Válasz:Nyomtatás linux alatt

Na igen, az xlib_surface_create paraméterei kicsit másak. :(
A display, drawable egyértelmű. A display a default x display, a drawable a komponens.Canvas.Handle, de mi a visual?

MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25
#173

  • hop
  • hop profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 53
  • Karma: 1
  • Köszönetek: 0

hop válaszolt a témára: Válasz:Nyomtatás linux alatt

Ennyi?
Na mindjárt kipróbázom linux alatt :)
Bár 2-3 napja néztem png képpel (ugye bármelyik cairo_surface-t tudom menteni png-be) és sokat javult a kezelése (nem esik szét a kép) viszont eszméletlen lassú.

MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25
#172

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

Windows alatt már teszteltem is:

...
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls, cairo, cairowin32;
...
TForm1 = class(TForm)
PaintBox1: TPaintBox;
procedure PaintBox1Paint(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
...
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
cs: Pcairo_surface_t;
ct: Pcairo_t;
begin
cs:= cairo_win32_surface_create(PaintBox1.Canvas.Handle);
ct:= cairo_create(cs);

cairo_move_to (ct, 128.0, 25.6);
cairo_line_to (ct, 230.4, 230.4);
cairo_rel_line_to (ct, -102.4, 0.0);
cairo_curve_to (ct, 51.2, 230.4, 51.2, 128.0, 128.0, 128.0);
cairo_close_path (ct);

cairo_move_to (ct, 64.0, 25.6);
cairo_rel_line_to (ct, 51.2, 51.2);
cairo_rel_line_to (ct, -51.2, 51.2);
cairo_rel_line_to (ct, -51.2, -51.2);
cairo_close_path (ct);

cairo_set_line_width (ct, 10.0);
cairo_set_source_rgb (ct, 0, 0, 1);
cairo_fill_preserve (ct);
cairo_set_source_rgb (ct, 0, 0, 0);
cairo_stroke (ct);

cairo_destroy(ct);
cairo_surface_destroy(cs);
end;

Enyenlőre, Linux alatt később.

i5 3470
8GB
Win 10
CodeTyphon 7.0
#171

  • hop
  • hop profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 53
  • Karma: 1
  • Köszönetek: 0

hop válaszolt a témára: Válasz:Nyomtatás linux alatt

csak azt nem tudom, hogyan érhetem egy-egy komponens megfelelő tulajdonságát :(
az igazán csodálatos lenne, ha mondjuk egy paintbox-ba tudnék cairoval rajzolni :)

MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25
#165

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

A Gdk a Windowsnál a HDC-t használja, Linux alatt + a GdkDrawable-t, végülis ahogy mondtad. Viszont a Gdk forrásában benne van, hogy a profik C-ben hogyan csinálták meg.
Milyen jó, hogy a nyilt forráskódba bele lehet nézni! :)

i5 3470
8GB
Win 10
CodeTyphon 7.0
#164

  • hop
  • hop profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 53
  • Karma: 1
  • Köszönetek: 0

hop válaszolt a témára: Válasz:Nyomtatás linux alatt

már átbogarásztam én is, és valóban a 2.8-as gdk-ban van csak.
elvileg a cairo_xlib_... fgv-ket lehetne használni, de nem bírok rájönni, hogy egy form-ba hogy tudnék pakolni tartalmat vele.
Pedig preview-hoz jól jönne. :)
Lazarusban a bitkép kezelése elég ratyi. :(

MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25
#163

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

Igen a kutya ott van!
A GDK-ba beépített gdk_cairo_create függvény egy burkoló, amely elfedi a Cairo felület és a kontextus létrehozását, ezzel könyebbé téve a Gtk-ból való használatot.

i5 3470
8GB
Win 10
CodeTyphon 7.0
#162

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

Igen nincs a Cairo Apiban, bocsesz, köszi!
Ok, akkor megnézem a Gdk forrását, hogy mit és hogyan csinál valójában a gdk_cairo_create függvény, valószínü ott van a kutya elásva.

i5 3470
8GB
Win 10
CodeTyphon 7.0
#161

  • hop
  • hop profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 53
  • Karma: 1
  • Köszönetek: 0

hop válaszolt a témára: Válasz:Nyomtatás linux alatt

most megnéztem, a cairo api doc-ban sincs gdk_cairo_create!
ez nem a példában deklarált fgv?
x-re az cairo_xlib_... fgv-kel tudsz rajzolni.
egyébként az csinálja a cairo binding-et, aki az órás progit írta.

MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25
#160

  • hop
  • hop profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 53
  • Karma: 1
  • Köszönetek: 0

hop válaszolt a témára: Válasz:Nyomtatás linux alatt

a freepascal extra csomagjai közt van.
egyébként most csinálta meg nemrég a karbantartója a legfrissebb cairo-hoz, és ebben benne van az összes cairo fgv. de ha jól emlékszem a gdk-s fgv-benne voltak a régiben is. Nézd meg a freepascal forrásban, nem a lazarussal jön.

MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25
#159

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

Ez bizti, mert leszedtem a Lazarus 0.9.25 verziót és az abban lévő cairo unitban nincs benne a gdk_cairo_create csak sima cairo_create!

i5 3470
8GB
Win 10
CodeTyphon 7.0
#158

  • hop
  • hop profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 53
  • Karma: 1
  • Köszönetek: 0

hop válaszolt a témára: Válasz:Nyomtatás linux alatt

basszus, most nézem mit írsz, a gdk_cairo_create a cairo unitban van.
az az fp extra csomagjai közt.

MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25
#157

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

A probléma abból adódik, hogy a Free Pascal Gtk2 unitjai még csak 2.4-es komatibilisek és a Cairo 2.8-as verziónál lett benne a Gtk-ba (Gdk-ba). A Free Pascal Gtk2 unitjai megemlítik a 2.8-as verziót, de az újabb függvényeket nem tartalmazzák (még a 2.6-osat sem), így az újabb dolgokat is be kell építeni az unitokba (vagy keresni egy olyat, ahol már megvan).

i5 3470
8GB
Win 10
CodeTyphon 7.0
#83

  • hop
  • hop profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 53
  • Karma: 1
  • Köszönetek: 0

hop válaszolt a témára: Válasz:Nyomtatás linux alatt

valahogyan a window handle-jéhez kell hozzáférni, és akkor tudod használni a gtk függvényeit, de nekem sem jött össze soha, mondjuk nem is igazán erőltettem. :) [img]

MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25
#82

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

Na ez így ebben a formában nem müxik, így keresgélek tovább!

i5 3470
8GB
Win 10
CodeTyphon 7.0
#81

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

Na azt hittem nem ment el az első!

i5 3470
8GB
Win 10
CodeTyphon 7.0
#79

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

Azt sikerült kideríteni, hogy hogyan lehet a Gtk-s widgetet lekérdezni (ha Gtk 2-vel fordítok):

uses
..., Graphics, Dialogs, StdCtrls,
ComCtrls, glib2, gdk2, gtk2, gtkproc, gtkdef, cairo;
...
var
Form1: TForm1;
widget: PGtkWidget;
win: PGdkWindow;
ct: Pcairo_t;
...
widget:= PGtkWidget(GetWidgetInfo(pointer(form1.Handle))^.CoreWidget)^.window;
win:= PGdkWindow(widget);
ct:= cairo_create(win);

Hát ezt fogom tesztelni Linux alatt, csak előtte szunyálok egyet és holnap majd jelentkezem, hogy mi a szitu.

i5 3470
8GB
Win 10
CodeTyphon 7.0
#78

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

Én ilyet találtam, de nem tudom, hogy tud e a cairo rajzolni rá, még tesztelem:
uses ..., glib2, gdk2, gtk2, gtkdef, gtkproc, ...;
...
var
widgetwin: PGdkWindow;
...
widgetwin: PGdkWindow(GetWidgetInfo(pointer(Form1.Handle))^.CoreWidget)^.window;

És a Cairo_Create-nek ezt adnám át (widgetwin-t). A Gdk2 unitban kellene lennie egy Gdk_Cairo_Create függvénynek, de nincs benne (a Gdk 2.8 dokumentációban benne van).
Na mindegy, majd jelenkezem mit sikerült csiholni.

i5 3470
8GB
Win 10
CodeTyphon 7.0
#77

  • hop
  • hop profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 53
  • Karma: 1
  • Köszönetek: 0

hop válaszolt a témára: Válasz:Nyomtatás linux alatt

igen, a gtk, ill. az X funkcióit is tudod használni, de hogyan azt nem tudom, sose volt energiám utána járni :)

MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25
#74

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

Linux alatt ha gtk2-vel fordítok egy progit, akkor valahogy hozzá lehet férni a widget adataihoz (futásidőben), hogy a cairoval rajzolni lehessen rá? Mert a Gtk2 Cairoval rajzolja ki a widgeteket, ha jól tudom.

i5 3470
8GB
Win 10
CodeTyphon 7.0
#73

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

Valaki a nagyvilágban már csinált ilyesmit: www.youtube.com/watch?v=K-PL6Sf_Ydo

i5 3470
8GB
Win 10
CodeTyphon 7.0
#66

  • hop
  • hop profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 53
  • Karma: 1
  • Köszönetek: 0

hop válaszolt a témára: Válasz:Nyomtatás linux alatt

lehet, de nem ismerem pascalból a megoldást rá. Nem canvasba, hanem egy x window-ba tudsz vele rajzolni. Nekem elég, hogy bármely surface-t tudom png-stream-be írni, ezzel a print preview elfogadhatóan megoldható.

MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25
#65

  • prekox
  • prekox profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 87
  • Karma: 1
  • Köszönetek: 4

prekox válaszolt a témára: Válasz:Nyomtatás linux alatt

Közvetlenül egy Canvasra pl.: form canvasa, nem lehet Cairoval rajzolni?
Nekem egy komponens canvasára kellene rajzolni az egérmutatóval cairo használatával.
Az oké hogy tud image + png + ps + stb., de az állandó másolgatás a form vagy egyéb canvasra nem jó nekem + nagy képnél rossz megoldás.

i5 3470
8GB
Win 10
CodeTyphon 7.0
#64

  • hop
  • hop profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 53
  • Karma: 1
  • Köszönetek: 0

hop létrehozta a témát: Nyomtatás linux alatt

A nyomtatás linux alatt mai napi egy több sebből vérző dolog.
Elkezdtem fejleszteni egy egyenlőre egy unitból és néhány osztályból álló stuff-ot, ami cairo-t (cairographics.org) használ ps állomány renderelésre, amit közvetlenül a default CUPS nyomtatóra küld. Bármely más canvas típusú osztályhoz hasonlóan használható.
Erőteljesen beta, de azért ötleteket véleményeket szívesen fogadok. :)
A letöltések közt megtaláljátok.

MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25
#40