Forum | | | | 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 |
| | | | |
| | 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 ( |
| | | | |
| | 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. |
| | | | |
| | 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. |
| | | | |
| | 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.) |
| | | XProfan X3Grüß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. |
| | | | |
| | 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. |
| | | | |
|
AntwortenThemenoptionen | 6.905 Betrachtungen |
ThemeninformationenDieses Thema hat 4 Teilnehmer: |