Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249466 (10902)

| Suchen
| Zurück zur Übersicht

Autor | Thema: JPGs usw. mit PROFAN² drucken
Stephan Sonneborn
| Datum:13.09.01 20:39 (stephans_email@freenet.de) |
Hallo zusammen, ich habe ein Etiketten-Druckprogramm geschrieben und kann leider zur Zeit nur BMPs und RLEs drucken. Mit Hilfe der NViewLib.DLL kann ich zwar die Bilder anzeigen, aber leider kann ich sie nicht ausdrucken. Ich weiß zumindest nicht wie. Die Druckroutine meines Programms funktioniert entsprechend der Bildschirmausgabe, nur daß im Falle des Druckens die StartPrint/EndPrint-Befehle gesetzt werden. Es ist ein-und-dieselbe Prozedur. Die StartPrint/Endprint-Befehle werden durch einen übergebenen Parameter geschaltet oder eben nicht. Es ist bei der Ausgabe der Grafiken wichtig, sowohl die Lage, als auch die Größe variabel zu gestalten. Daher kommt zur Zeit auch LoadSizedBmp zum Einsatz. Hat jemand eine Idee, wie man JPGs mit einem "LoadSizedJPG" :-) anzuzeigen und vor allem auszudrucken? Danke schon im Voraus von Stephan
Marcel Pursche
| Datum:14.09.01 14:18 (mp05@metropolis.de) |
Hallo, Du könntest zuerst die JPG in die Memory-Bitmap laden und dann die Memory-Bitmap drucken. Ein Beispiel: $I NViewLib.inc MCLS GrößeX%,GrößeY% StartPaint -1 LoadSizedPic 0,0,GrößeX%,GrößeY%,1 EndPaint StartPrint MCopyBmp 0,0-GrößeX%,GrößeY%>0,0;0 EndPrint
Stephan Sonneborn
| Datum:14.09.01 20:14 (stephans_email@freenet.de) |
Danke Marcel, nur leider klappt das so nicht. Ich habe das schon mal so versucht. Das Problem ist folgendes: Ich stelle verschiedene Objekte zur Verfügung, die auf dem Etikett erscheinen können: Texte, Bilder, Numerierungen, Linien, Flächen usw. Jedes Objekt ist ein Datensatz in einer dBase-Datenbank. Beim Drucken (und auch beim Anzeigen auf dem Bildschirm) wird jedes Objekt eingelesen und seinem Typ entsprechend angezeigt bzw. ausgedruckt. Beim Druckvorgang steht das StartPrint VOR dem Suchen des ersten Objektes in der Datenbank und EndPrint nach der Ausgabe des letzten. Leider darf man den MCLS-Befehl (ebenso wie StartPaint/EndPaint nicht während StartPrint/Endprint benutzen (Warum eigentlich nicht? StartPaint -1 sollte doch möglich sein...!) Und das muß ich machen, weil ja ein Bild nicht unbedingt das erste oder das letzte Objekt der Datenbank ist. Außerdem können auch mehrere verschiedene Bilder auf dem Etikett vorhanden sein... Gibts noch einen anderen Weg?
Jörg Sellmeyer
| Datum:15.09.01 01:17 (joerse@gmx.de) |
Hallo Stephan, Vielleicht kannst Du Dein Komplettes Formular zunächst (entsprechend skaliert) auf eine Speicherbitmap bringen, um diese dann auszudrucken. Jörg
Stephan Sonneborn
| Datum:15.09.01 10:28 (stephans_email@freenet.de) |
Hallo Jörg, ja, genau das werde ich jetzt mal ausprobieren. Ich war mir nur nicht sicher, ob Texte und Linien usw. auch auf diese Speicherbitmap (StartPaint -1) geschrieben werden und vor allem dort mit einem Bitmap-Kopierbefehl auch wieder zurückzuholen sind... Aber ich probiers gleich mal aus! Danke! Gruß Stephan
Stephan Sonneborn
| Datum:15.09.01 10:38 (stephans_email@freenet.de) |
Mist! Alle MCopy***-Befehle sind während der Druckausgabe nicht zugelassen... Roland, warum eigentlich nicht??? Gruß Stephan
Sebastian Sprenger
| Datum:15.09.01 11:01 (prof.chaos@netcologne.de) |
Hallo Stephan, wenn du die Speicher-Bitmap speicherst, und dann während der Druckausgabe mit LoadBmp lädst, müsste es klappen. Sebastian
Marcel Pursche
| Datum:15.09.01 11:05 (mp05@metropolis.de) |
Hallo, Speichere doch die Memory-Bitmap vorher als Temp.bmp und lade sie dann mit LoadBmp "Temp.bmp",0,0;0. Zum Speichern der Memory-Bitmap verwende ich: StartPaint -1 SaveBmp "Temp.bmp",0,0-GrößeX%,GrößeY% EndPaint
Marcel Pursche
| Datum:15.09.01 11:11 (mp05@metropolis.de) |
Ups da hab ich woll einen Beitrag übersehen und nochmal die selbe Idee gepostet.
Stephan Sonneborn
| Datum:15.09.01 11:52 (stephans_email@freenet.de) |
Hallo! Das habe ich in der Zwischenzeit auch probiert. Klappt auch ganz gut. ABER: Leider wird die Memory-Bitmap nur mit 72dpi gespeichert. Das ist für den Bildschirm auch völlig ausreichend. Nur beim Drucken kommt selbst die TT-Schrift Arial gerastert daher... Aber ich denke, wir sind auf dem richtigen Weg... Mal sehen, ich werde noch ein wenig herumprobieren. Aber vielleicht hat jemand eine Idee, wie man die Auflösung der Memory-Bitmap erhöhen könnte. Danke schonmal für Eure Hilfe! Gruß Stephan
Dennis Schulmeister
| Datum:15.09.01 13:04 (Dennis.Schulmeister@web.de) |
Hallo Stephan, probiere mal, ob die 720 dpi erreichen kannst, in dem du in der Memorybitmap alles 10x größer erstellst und natürlich auch 10x größer abspeicherst. Ausdrucken dann natürlich in normaler Größe. Ist nur so eine Idee. Muß nicht unbedingt funktionieren. Dennis
Sebastian Sprenger
| Datum:15.09.01 13:06 (prof.chaos@netcologne.de) |
Hallo, hier ist noch eine andere Lösung, leider nicht so einfach wie das mit der Speicher-Bitmap, aber unschöne Ecken gibt es da nicht ...
    $I NVIEWLIB.INC

    def LockWindowUpdate(1) !"USER32","LockWindowUpdate"
    window 200,200-600,300
    settruecolor 1

    usefont "Arial",60,13,1,1,0
    textcolor rgb(64,128,255),-1
    drawtext 5,10,"Was willst du?"  ' Blödsinn schreiben

    declare xx%,yy%
    let xx%=width(%hwnd)
    let yy%=height(%hwnd)           ' Fenstergröße ermitteln
    mcls xx%,yy%                    ' Eine Speicher-Bitmap daraus anlegen
    copybmptomem 0,0-xx%,yy%>0,0    ' Das, was da gerade im Fenster steht, reinkopieren
    LockWindowUpdate(%hwnd)         ' Und das Fenster einfrieren, damit niemand etwas sieht

    loadpic "CAT.TGA",0,0,1         ' LoadSizedPic wird nicht funktionieren!
    usefont "Arial",60,12,1,1,0
    textcolor rgb(192,255,32),-1
    drawtext 5,10,"Ich? Gar nichts!"' Noch mehr Blödsinn schreiben
    savebmp "TEST.BMP",0,0-200,70   ' Und die Bitmap speichern

    mcopybmp 0,0-xx%,yy%>0,0;0      ' Das, was vorher im Fenster stand, wieder ins Bild reinkopieren
    LockWindowUpdate(0)             ' Und das Fenster wieder auftauen
Sebastian
Bernhard Künzel
| Datum:15.09.01 21:14 (b.kuenzel@chello.at) |
Hallo Stephan, Hier eine Lösung zum anzeigen und drucken von jpg und bmp Dateien --------------------------------------------- '>>>>>Headerdatei>>>>>>>>>>>>>>>>> LoadBitMapEx( = External("NViewLib.DLL","NViewLibLoad",; 'Par1:Addr. Bildname 'Par2:Fortschrittbalken 0=aus 1=ein 'Ergebnis: BildHandle BmpX( = External("NViewLib.DLL","GetWidth"; 'Ergebnis: Breite BmpY( = External("NViewLib.DLL","GetHeight"; 'Ergebnis: Höhe CreateCompatibleDC( = External("gdi32","CreateCompatibleDC",; StretchBlt( = External("gdi32","StretchBlt",; DeleteDC( = External("GDI32","DeleteDC",; '>>>>>ENDE Headerdatei>>>>>>>>>>>>>>>>> Declare hNViewLib&,MemDc& Def IsDrucker(0) Equ(%HDC,%HDC2) 'Ergebnis= 1 Drucker eingeschaltet ' 0 Drucker ausgeschaltet '//am Anfang des Programms hNViewLib&=UseDLL("NViewLib.DLL") MemDc&=~CreateCompatibleDC(%HDC) 'darf nicht in der Druckerschleife gesetzt werden '// MemDC& gilt für das ganze Programm Proc JpgTest '//diese Procedur kann unverändert für den Bildschirm und zum Drucken verwendet werden '//kann auch bei bmp-Dateien verwendet werden Parameters Datei$,Xa&,Ya&,Breite&,Höhe& Declare HOldBild&,hGrafik& hGrafik&=~LoadBitMapEx(ADDR(Datei$),0) If hGrafik& If IsDrucker() Xa&=Xa& * 10 Ya&=Ya& * 10 Breite&=Breite& * 10 Höhe&=Höhe& * 10 EndIf HOldBild&=~SelectObject(MemDC&,hGrafik&) ~StretchBlt(%HDC,Xa&,Ya&,Breite&,Höhe&,MemDC&,0,0,~BmpX(),~BmpY(),$CC0020) DeleteObject hOldBild& DeleteObject hGrafik& Else 'Fehler beim laden des Orginalbildes MessageBox("Beim laden der Grafikdatei ist ein Fehler aufgetreten!","Grafikanzeige",16) EndIf EndProc '//am Ende des Programms ~DeleteDC(DRD#.MemDC&) FreeDll hNViewLib& ----------------------------------------------- sollte etwas noch unklar sein, kannst du mir ein eMail senden. MFG Bernhard
Bernhard Künzel
| Datum: 15.09.01 21:26 (b.kuenzel@chello.at) |
Hallo Stephan, bei einer Zeile hat sich ein Fehler eingeschlichen, da ich alles bei mir in Bereichen gespeichet habe '//am Ende des Programms Ist Falsch >>>> ~DeleteDC(DRD#.MemDC&) muß richtig lauten ~DeleteDC(MemDC&) MFG Bernhard

| Zurück zur Übersicht