Deutsch
Forum

Elegante Druckausgabe

 

Sebald
Grandjean
Hallo,

folgende Aufgabe: Erstellen einer einfachen Eingabemaske für eine Buchungsanordnung. Buchungen erstellen, bearbeiten, löschen etc. In Profan ein Kinderspiel!

Ein wenig anspruchsvoller ist die Druckausgabe, denn da gibt es einen sehr kompliziert gestalteten Vordruck (Linien, Kästchen, weitere Felder, die später von Hand ausgefüllt werden, etc.)

Wie würdet ihr so etwas lösen? Mit den Zeichenfunktionen von Profan jedes Element auf die Leinwand 'malen' oder vllt. doch eine BMP laden, die die erforderlichen Elemente schon beinhaltet und dann die eingegebenen Werte drüberdrucken lassen? Gibt es vielleicht noch eine andere Möglichkeit?

Gruß Sebald
 
08.02.2018  
 




H.Brill
Wie sieht es denn mit einer Gridbox aus,
also einer Tabelle ?

Zum ausdrucken des Gitternetzes nutze ich immer
das hier (Printgrid.inc) :
 $H commctrl.ph
 $H Structs.ph
 $H Messages.ph

Proc CountGridColumns

    Parameters Handle hGrid
    Declare Memory b
    Declare flag&
    Var TotalColumns& = 0
    Struct LV_COLUMN = ~LV_COLUMN
    Dim b, LV_COLUMN
    b.mask& = ~LVCF_WIDTH

    Repeat

        Inc TotalColumns&
        flag& = SendMessage(hGrid, ~LVM_GETCOLUMN, TotalColumns&, b)

    Until flag& = 0

    Dispose b
    Return TotalColumns&

EndProc

Proc LV_GETCOLUMN

    Parameters Handle Hdl,Index&
    Declare Column#,Text$,Erfolg%
    Struct LVCOLUMN = mask&, fmt&, cx&, pszText%%, cchTextMax&, iSubItem&, iImage&, iOrder&
    Dim Column#, LVCOLUMN
    Text$ = MkStr$("\z",160)' hier anpassen, wenn die Texte länger sein sollten
    Column#.mask& = ~LVCF_TEXT
    Column#.pszText%% = Addr(Text$)
    Column#.cchTextMax& = 160' s.o.
    SendMessage(Hdl,~LVM_GETCOLUMN,Index&,Column#)
    Return Text$

EndProc

Proc ErstelleHTM

    Parameters Handle dGrid, us$, htmdatei$
    Declare anz&, zeile$, cols&, column$, tmp$
    cols& = CountGridColumns(dGrid)
    Declare Memory b
    Assign #1, htmdatei$
    Rewrite #1
    Print #1,"<!DOCTYPE html PUBLIC"+chr$(34)+"-//W3C//DTD XHTML 1.0 Transitional//EN"+chr$(34)+"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"+chr$(34)+">"
    Print #1, "<html xmlns="+chr$(34)+"https://www.w3.org/1999/xhtml"+chr$(34)+" xml:lang="+chr$(34)+"de"+chr$(34)+" lang="+chr$(34)+"de"+chr$(34)+">"
    Print #1,"<head>"
    Print #1, "<title>" + us$ + "</title>"
    Print #1, "<style type="+chr$(34)+"text/css"+chr$(34)+">"
    Print #1, "td {font-family:Verdana; font-size:12px; border: 1px solid rgb(0, 0, 0); padding: 3px; text-align: left}"
    Print #1, "th {font-family:Verdana; font-size:12px; font-weight:bold; border: 1px solid rgb(0, 0, 0); padding: 3px; text-align: left}"
    Print #1, ".zeile1 {font-family:Verdana; font-size:12px; }"
    Print #1, ".zeile3 {font-family:Verdana; font-size:12px;color:black; background-color:#A8D2FD;}"
    Print #1, "</style>"
    Print #1,"</head>"
    Print #1, "<body>"
    Print #1, "<table>"
    Print #1, "<colgroup>"
    Struct LV_COLUMN = Maske&,Formate&,SpaltenBreite&,pointerText&,TextLen&,Spalte&
    Declare Column#,x&
    Dim Column#,LV_COLUMN

    WhileLoop 0,(cols& - 1),1

        With Column#

            .Maske&         = $000F
            .Spalte&        = &loop

        EndWith

        SendMessage(Grid,$1019,&loop,Column#)
        x&= SendMessage(Grid,$101D,&loop,0)
        Print #1, "<col width="+chr$(34)+Str$(x&)+"px"+chr$(34)+">"

    EndWhile

    Print #1, "</colgroup>"
    Print #1, "<tr >"

    WhileLoop 0, Cols&-1

        Print #1, "<th class="+chr$(34)+"zeile3"+chr$(34)+">" + Trim$(LV_GETCOLUMN(dGrid, &loop)) + "</th>"

    EndWhile

    Print #1, "</tr>"
    anz& = GetCount(dGrid)
    Var x%=0

    While x%<anz&

        Print #1, "<tr>"

        WhileLoop 0, Cols&-1

            Print #1, "<td class="+chr$(34)+"zeile1"+chr$(34)+">" + Trim$(GetText$(dGrid, x%, &loop)) + "</td>"

        EndWhile

        Print #1, "</tr>"
        inc x%

    EndWhile

    Print #1, "</table>"
    Print #1, "</body>"
    Print #1, "</html>"
    Close #1
    '@ShellExec(htmdatei$, "open", 1)

EndProc

Proc ShowHtm

    Parameters Handle hwindow, Grid, String datei, us$
    Declare Handle htmWin, hWin, hbtn1, hbtn2, Int ende2
    ende2 = 0
    ErstelleHTM(Grid, us$, datei)' Html-Datei erzeugen
    hWin  = @Create("Dialog", hwindow, "HTML - Fenster", 10, 10, 800, 400)
    hbtn1 = @Create("Button", hWin, "Drucke", 10, 10, 60, 25)
    hbtn2 = @Create("Button", hWin, "Ende", 100,  10, 60, 25)
    htmWin = @Create("HTMLWin", hWin, datei, 1, 10, 60, 750, 300)

    WhileNot ende2

        WaitInput

        If @Clicked(hbtn1)

            ' Drucken
            Messagebox("Mit rechter Maustaste auf die Tabelle klicken\nund im Kontexmenü Drucken auswählen !", "Info", 0)
            '@ShellExec(datei, "print", 0)

        ElseIf @Clicked(hbtn2)

            DestroyWindow(hWin)
            ende2 = 1
            SetActiveWindow(%HWnd)

        EndIf

    EndWhile

    DestroyWindow(hWin)

EndProc


Ausdruck : ShowHtm(Fensterhandle, Gridboxhandle, Htmldatei, us$)
Htmldatei ist nur ein Dateiname -> z.B. Druck.html. Falls man
später mal die Htmldatei im Browser anschauen/nochmal drucken möchte.
us$ = Überschrift.

Du mußt nur schauen, daß jedes Feld mit etwas gefüllt ist, sonst
sieht es später nicht so schön aus.

Wenn es nur eine Seite ist, könnte man auch mit ScreenCopy oder
WinCopy probieren.

Ansonsten halt auf eine Bitmap zeichnen und mit StartPrint...EndPrint
auf dem Drucker ausgeben.

Da müßte ich von dir etwas mehr Info haben, wie das im einzelnen
aussieht.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
08.02.2018  
 




Sebald
Grandjean
Vielen Dank!
Ich vergaß: Ich benutze noch eine XProfan 10 aus 2006, werde demnächst aber mal aufrüsten auf die X4, wenn sie neu rauskommt.

Innerhalb der Boxen müssten dann nochmals Rechtecke und Striche angezeigt werden, was die Sache noch komplexer machen würde. Leider zu allem Übel noch verschiedene Schriftgrößen (
 
08.02.2018  
 




H.Brill
Naja, zeichnen kannst du ja mit den Grafikbefehlen
Rectangle,Line, LineTo usw.

Also, ich würde da alles auf einem Static (ist so eine Art
Leinwand) machen.

Hier mal ein Ansatz :
Declare Handle label1, label2, edit1, edit2, static
Declare Handle btn1, btn2
Declare Int ende
Window 800, 400
static = Create("Static", %HWnd, 10, 10, 350, 200)
label1 = Create("Text", static, "Nummer :", 10, 10, 80, 25)
label2 = Create("Text", static, "Name   :", 10, 40, 80, 25)
edit1  = Create("Edit", static, "", 90, 10, 40, 25)
edit2  = Create("Edit", static, "", 90, 40, 120, 25)
btn1   = Create("Button", %Hwnd, "Drucken", 380, 10, 60, 25)
btn2   = Create("Button", %HWnd, "Ende",    380, 40, 60, 25)
StartPaint static
DrawIcon "A", 50, 80
DrawIcon "GESICHT", 100, 80
UseFont "ARIAL", 24, 16, 1, 0, 0
DrawText 10, 120, "Erster Text !"
UseFont "ARIAL", 16,   8, 1, 0, 0
DrawText 10, 170, "Zweiter Text !"
EndPaint
ende = 0

WhileNot ende

    WaitInput

    If Clicked(btn1)

        ' Drucken
        WinCopy static

    ElseIf Clicked(btn2)

        ende = 1

    EndIf

    Case %Key = 2 : ende = 1

EndWhile

End

Das dürfte auch in Version 10 laufen.

Sollte man das Formular am Bildschirm oder auf dem Papier
ausfüllen können ?
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
08.02.2018  
 




Sebald
Grandjean
Die Anzeige ist nur als eine Art Endkontrolle gedacht, daß man sieht, was da ausgedruckt wird. Ausgefüllt wird dann nichts mehr, außer nach dem Ausdrucken per Hand.

Kein großes Ding an sich, ich werde das wohl über ein JPG oder BMP machen und dann tatsächlich den Eingabetext drüberzeichnen. Da DINA4 die Ausgabegröße ist, muss ich wohl auf ein Element zurückgreifen, was scrollbar ist.

p.s. der Code oben verursacht Variablenfehler, ich muss das später am Abend mal ausprobieren.
 
08.02.2018  
 




H.Brill
Kann sein, daß die Version noch keinen Variablentyp
Handle kennt. Also einfach die Variablen mit Postfix
% oder & deklarieren.

Suche mal hier nach Hauptfenster mit Scrollbalken.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
08.02.2018  
 




Sebald
Grandjean
Ich bin profantechnisch leider hoffnungslos veraltet (Prfellow-Generation....). Die Sache bekomme ich nicht ans Laufen. Das ist nicht wirklich tragisch, den Ausdruck bekomme ich hin.

Eine Druckvorschau wird sich mit einfachen Mitteln wohl nicht realisieren lassen. Es reicht zunächst, die Eingaben editierbar zu haben, was ja eine leichte Aufgabe ist.

Nur nebenbei: Zur Zeit läuft die Geschichte in EXCEL mit etwas VB. Ich habe den Ehrgeiz es 'stand alone' in Profan zu realisieren.
 
08.02.2018  
 




H.Brill
Du kannst ja auch das kostenlose FreeProfan nehmen.
Da bist du wenigstens mal auf dem Stand von Version X2.

Wenn es in EXCEL + etwas VB geht, bekommt man das mit
Profan auch hin. Was eine editierbare Gridbox betrifft, da habe
ich auch was dazu, was auch funktioniert.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
09.02.2018  
 




E.T.
Sowas hatte ich vor langer, langer Zeit mal in X11 gebastelt, mit simpler Druckvorschau und Druckfunktion .
Ich packe mal 'nen Screenshot von der Druckvorschau und einen Ausdruck (auf pdf-Drucker gemacht) ran.

Bei Interesse kann ich ja mal am WE den Quelltext raussuchen. War aber, da alle Elemente einzeln gezeichnet werden, ein recht "aufwendiges" Teil. Natürlich wurden div. Daten vom Programm ausgefüllt, wenn die Daten in der DB vorhanden waren. Wenn ich mich recht entsinne, sogar mit Drucker-Anpassung (Ränder usw.)

92 kB
Hochgeladen:09.02.2018
Ladeanzahl113
Herunterladen
26 kB
Hochgeladen:09.02.2018
Ladeanzahl106
Herunterladen
 
XProfan X3
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
09.02.2018  
 




Sebald
Grandjean
E.T. (09.02.2018)
Sowas hatte ich vor langer, langer Zeit mal in X11 gebastelt.....


Perfekt! So will ich das auch hinbekommen. Die Druckroutine ist kein so großes Problem, eben Fleißarbeit. Die Durckvorschau (mit Scrollbalken) schon eher.
 
09.02.2018  
 




Michael
W.
Die Mühe mit der Druckvorschau mache ich mir nicht. Das kann man mit dem Druckerdialog vor dem Ausdruck vom Druckertreiber/Windows entleihen. Dort kann auch abgebrochen werden.

Bei den Bildern, wenn es dann sein soll, würde ich ein verlustfreies Format (also png) wählen, damit da alles scharf zu sehen ist. Denke auch daran: Wenn Du viel mit Linien zeichnen musst, dann schaue Dir die Metafiles (emf) an.
 
Alle Sprachen
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
09.02.2018  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

6.902 Betrachtungen

Unbenanntvor 0 min.
E.T.09.12.2022
Stringray05.01.2022
R.Schneider29.01.2021
Manfred Barei29.01.2021
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie