Seite 3 von 6

Verfasst: 09.03.2006 14:20
von H.Brill
Hallo Fraiser,

Code: Alles auswählen

Wenn ich Dich richtig verstehe meinst Du das man eineGadgetID 
angibt, die die Lib ausliest und dann in Tabellarischer From ausdruckt. Ein 
interessanter Ansatz. Könnte man vielleicht auch auf andere Gadgets 
ausweiten. 
Ja, sowas meinte ich.
Ich denke mal, daß so mancher hier im Forum sowas auch
gebrauchen könnte. Der Ausdruck eines ListIconGadget wäre
am besten zu gebrauchen, wenn man seine Daten in tabellarischer
Form auf dem Bildschirm hat. Wenn das ganze dann noch mit
Gitternetz geht, wäre das toll. Man kann es zwar auch mit einem
WebGadget realisieren, ist aber auch zum einen umständlich und
andererseits braucht man die ATL.DLL.

Momentan realisiere ich meine Projekte noch mit Frank Abbings
Listview.dll. Diese hat solche Druckfunktionen. Man kann sogar
selbst bestimmen, welche Spalten man ausdrucken möchte.

Verfasst: 11.03.2006 12:05
von Fraiser
Hi,

kleines Update.
  • Die Vorschau Qualität von Bildern wurde verbessert
  • InitPrintingPageEx() kann jetzt vor jedem Print/Preview benutzt werden
  • die Parameter 'width,Height und KeepAspect' bei PrintingImageEx() sind jetzt
    optional. Wenn sie nicht angegeben werden wird das Bild in seiner normalen grösse
    ausgedruckt.
Download PrintingLibEx für PB 3.9x

Download PrintingLibEx für PB 4


Gruß

Fraiser

Verfasst: 11.03.2006 12:24
von ts-soft
Vorschlag:
Wenn Du die InitFunction folgendermassen ändern würdest:

Code: Alles auswählen

ProcedureDLL PrintingLibEx_Init()
; code, kein ProcedureReturn!, Keine Parameter!
EndProcedure
ProcedureDLL PrintingLibEx_End()
; code, kein ProcedureReturn!, Keine Parameter!
EndProcedure
könnte man sie die 2 Befehle sparen, da die dann automatisch ausgeführt werden!

// Nachtrag:
Es sei denn, es gibt einen Grund, warum die Initialisierung fehlschlagen
sollte.

Verfasst: 11.03.2006 13:20
von Fraiser
Hi,

ich hatte es schon einmal mit den _Init _End Optionen probiert, hatte aber
leider kein erfolg. Jetzt weiß ich auch warum :D. Ich hatte
folgendes geschrieben:

Code: Alles auswählen

ProcedureDLL.l PrintingLibEx_Init()
.
EndProcedure

ProcedureDLL.l PrintingLibEx_End()
.
EndProcedure
Das .l war der Fehler! Ist jetzt korrigiert. Habe die Änderung
gerade hochgeladen.

Ab jetzt sind also die Funktionen PrintingLibInitEx() und ClosePrintingLibEx()
nicht mehr enthalten !!

Danke für den Hinweis! :allright:

Gruß

Fraiser

Verfasst: 11.03.2006 16:12
von ts-soft
Ist in der Hilfe zu TailBite leider nicht deutlich genug zu entnehmen, deshalb
dachte ich, der Hinweis wäre nützlich.
Ich hatte anfangs immer ein ProcedureReturn drinnen, da gings dann auch
nicht :D

Verfasst: 15.03.2006 18:37
von Fraiser
Hi,

ein kleines Update der PrintingLibEx. Es sind drei neue Befehle hinzugekommen.
-GetPrintingFontMetricEx(Type) zum bestimmen der Höhe des aktuellen Fonts
-GetPrintingTextHeightEx(Text$) ermittelt die Höhe des übergebenen Textes
-GetPrintingTextWidthEx(Text$) ermittelt die Breite des übergebenen Textes

Download PrintingLibEx für PB 3.9x

Download PrintingLibEx für PB 4

Gruß

Fraiser

Verfasst: 15.03.2006 22:21
von ABBKlaus
Hi,

hab ein kleines problem mit den neuen funktionen :(
hab erst mal den barcode teil rausgenommen um an das problem ranzukommen.
Also ein Font in der größe 60 sollte folgendes zurückgeben:
tmHeight=89
tmAscent=72
tmDescent=17
bei 600 DPI sind das dann 0.148333 " oder 0.376767 mm

der unten aufgeführte codesnippet bringt folgende resultate:
Height=333
Ascent=266
Descent=67

füg bitte folgende routinge in die demo ein :

Code: Alles auswählen

Procedure PrintPreview(Preview)
  
  If Preview 
    ;*** start preview
    If GetGadgetState(#CkdWidth)
      ;*** set optional preview width
      RetStart.l = StartPrintingPreviewEx(#ListPreview, #True, 1024)
    Else
      ;*** normal preview width with 72dpi
      RetStart.l = StartPrintingPreviewEx(#ListPreview, #True, 0)
    EndIf
  Else
    ;*** start printing
    RetStart.l = StartPrintingEx("Test Printing")
  EndIf
  
  If RetStart.l
    PrintingFontEx("Arial",60, #True)
    
    test1.f=GetPrintingFontMetricEx(#PL_Font_Ascent)
    test2.f=GetPrintingFontMetricEx(#PL_Font_Descent)
    test3.f=GetPrintingFontMetricEx(#PL_Font_Height)
    
    Debug "Ascent="+Str(test1)
    Debug "Descent="+Str(test2)
    Debug "Height="+Str(test3)
    
    Debug "DPI-X="+Str(GetPrintingCapsEx(#PL_DPI_X))
    
    text$="12345678"
    
    ;test.f=GetPrintingFontMetricEx(#PL_Font_Height)
    test.f=GetPrintingTextHeightEx(text$)
    Debug "Height="+StrF(test)
    ; hier solle in etwa das rauskommen : 0.148333 inches
    ; oder 0.376767 mm
    ; oder 3.76767 (1/10mm)
    x=100
    y=0
    For i=1 To 10
      PrintingTextEx(text$,x,y,0)
      y+test
    Next
    
    If Preview
      ;*** end preview
      StopPrintingPreviewEx()
    Else
      ;*** end printing
      StopPrintingEx()
    EndIf
  Else
    MessageRequester("FEHLER", "Init Start Printing")
  EndIf
EndProcedure

Verfasst: 15.03.2006 23:02
von Fraiser
Hi,

:oops: kleiner rechenfehler!
Habe es korrigiert! Jetzt sollten die Rückgabewerte korrekt
in 1/10mm übergeben werden. Bei besonders kleines
Fonts (<3mm) kommt es zu leichten rundungsfehlern!

Gruß

Fraiser

Verfasst: 15.03.2006 23:13
von ABBKlaus
Hi,

muss leider noch mal stören :D

test.f=GetPrintingTextHeightEx(text$)

sollte eigentlich das selbe rausbekommen wie

test.f=GetPrintingFontMetricEx(#PL_Font_Height)

tut er aber nicht :shock:

trotzdem super leistung :allright:

Klaus

[edit]
und GetPrintingTextWidthEx(text$) ist auch fehlerhaft

Verfasst: 15.03.2006 23:20
von ABBKlaus
apropos rundungsfehler, wieso benutzt du nicht hierfür eine float variable.
sollte doch von der genauigkeit völlig ausreichen.
Schau doch mal in die PurePDF library rein :praise: