Hallo Leute,
ich will mir ein Stempel-Programm zusammenbauen und benötige den richtigen schups.
Für was:
Meine Eingangsrechnungen müssen mit einem Stempel versehen werden.
z.B
Eigenbedarf
Datum: 03.01.2013
Bezahlt: Postbank
oder
Privatbedarf
Datum: 03.01.2013
Bezahlt: bar
usw.
diesen Stempel mit Stempelkissen gibts nicht. Desshalb würde ich die Rechnungen
gerne mit dem Drucker stempeln.
Was soll es können:
1. Zeile = Bedarf = ComboBoxGadget für bis zu 8 Einträge
2. Zeile = Datum = StringGadget (Datum über den Kalender abrufbar)
3. Zeile = Bezahlt = ComboBoxGadget für bis zu 8 Einträge
4. Farbwahl um die Druckfarbe umstellen zu können
das ganze soll in einem Fenster dargestellt werden.
Bis hierher habe ich keine Probleme.
Jetzt kommts.
Da die Rechnungen an unterschiedlichen Positionen Platz für einen solchen Stempel haben,
muss der Stempel auf dem Fenster verschiebbar sein, um den Stempel richtig positionieren zu können.
Das Verschieben muss im gesamten (also alle Gadgets) möglich sein.
Wie würdet Ihr das umsetzen.
CanvasGadget
MousX
MousY
Ich habe eine solche Verschiebung noch nie umgesetzt, wie würdet Ihr das umsetzen.
Gruß
gnaps
Stempelprogramm
Stempelprogramm
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Re: Stempelprogramm
nun, entweder mit der Maus oder mit Tasten, z.B. Pfeiltasten. du Zeichnest das Dokument und darüber immer den Stempel. der Stempel hat eine X und eine Y-Position. entweder du addierst einen festen wert je tastendruck oder solange die taste gedrückt ist, in dem du addkeyboardshortcut() nutzt, oder du merkst dir die klickposition der maus und subtrahierst davon immer die aktuelle position ab und addierst das dann wieder zur stempelposition und zeichnest den stempel immer wieder neu an der neuen position, bis due gehen lässt. wie du die mausposition rausfindest, steht in der hilfe zum canvasgadget.
Re: Stempelprogramm
Hier ein Code um Bilder im CanvasGadget mit der Mouse zu verschieben.
Neue Bilder einfach mit AddImage() hinzufügen. Getestet auf Win & Mac.
Und noch eine andere Version mit Rechtsklickmenu zum löschen der Bilder.
Damit wären dann aber Deine Gadgets fest, vielleicht auf der rechten oder linken Seite des Fensters.
Im CanvasGadget verschiebst Du dann nur das generierte Bild des Stempels.
Neue Bilder einfach mit AddImage() hinzufügen. Getestet auf Win & Mac.
Und noch eine andere Version mit Rechtsklickmenu zum löschen der Bilder.
Damit wären dann aber Deine Gadgets fest, vielleicht auf der rechten oder linken Seite des Fensters.
Im CanvasGadget verschiebst Du dann nur das generierte Bild des Stempels.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Re: Stempelprogramm
Verschiebbare ContainerGadget():
Code: Alles auswählen
EnableExplicit
Structure MoveableContainerInfo
container.i
mouseX.i
mouseY.i
EndStructure
Procedure MoveableContainerGadget_MoveEvents()
Protected gadget = EventGadget()
Protected *p.MoveableContainerInfo = GetGadgetData(gadget)
If *p
Select EventType()
Case #PB_EventType_MouseMove
If GetGadgetAttribute(gadget,#PB_Canvas_Buttons) & #PB_Canvas_LeftButton
Protected wx = WindowMouseX(EventWindow())
Protected wy = WindowMouseY(EventWindow())
If wx > 0 And wy > 0
ResizeGadget(*p\container,wx-*p\mouseX,wy-*p\mouseY,#PB_Ignore,#PB_Ignore)
EndIf
EndIf
Case #PB_EventType_LeftButtonDown
*p\mouseX = GetGadgetAttribute(gadget,#PB_Canvas_MouseX)
*p\mouseY = GetGadgetAttribute(gadget,#PB_Canvas_MouseY)
EndSelect
EndIf
EndProcedure
Procedure MoveableContainerGadget(x,y,width,height,flags=#PB_Container_BorderLess)
Protected container = ContainerGadget(#PB_Any,x,y,width,height,flags)
If container
SetGadgetColor(container,#PB_Gadget_BackColor,RGB($BB,$BB,$BB))
Protected canvas = CanvasGadget(#PB_Any,0,0,width,15)
If canvas
Protected *p.MoveableContainerInfo = AllocateMemory( SizeOf(MoveableContainerInfo) )
If *p
*p\container = container
SetGadgetData(canvas,*p)
SetGadgetAttribute(canvas,#PB_Canvas_Cursor,#PB_Cursor_Hand)
BindGadgetEvent(canvas,@MoveableContainerGadget_MoveEvents())
If StartDrawing(CanvasOutput(canvas))
Box(0,0,OutputWidth(),OutputHeight(),RGB($40,$40,$40))
StopDrawing()
EndIf
EndIf
EndIf
EndIf
ProcedureReturn container
EndProcedure
;>------------------------------------------------------------------------------
Define combo, i
If OpenWindow(1, 0, 0, 800, 600, "Moveable ContainerGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
MoveableContainerGadget(8, 8, 306, 133, #PB_Container_Single)
ButtonGadget(#PB_Any, 10, 20, 80, 24, "Button 1")
ButtonGadget(#PB_Any, 95, 20, 80, 24, "Button 2")
CloseGadgetList()
MoveableContainerGadget(400, 100, 306, 133, #PB_Container_Single)
combo = ComboBoxGadget(#PB_Any, 10, 20, 100, 25)
For i = 1 To 20 : AddGadgetItem(combo,-1,"Item "+Str(i)) : Next
SetGadgetState(combo,0)
StringGadget(#PB_Any, 10, 55, 100, 25, "String")
CloseGadgetList()
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Re: Stempelprogramm
Hallo,
hey Danilo, der Code vom post voran ist schon nah dran, ist ja schon fast fertig.
Danke für den Anstoß, ich werde darauf aufbauen.
Gruß
gnaps
hey Danilo, der Code vom post voran ist schon nah dran, ist ja schon fast fertig.

Danke für den Anstoß, ich werde darauf aufbauen.
Gruß
gnaps
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Re: Stempelprogramm
Mir ist schon klar, dass es hier um Programmierung geht und Du schon fast fertig bist.
Ich denke, aber Du wirst auf Dauer damit nicht glücklich.
Ich würde über die Idee an sich nich einmal nachdenken.
Es gibt schon lange verschiedene Lösungen aus dem Bereich Elektronische Archivierung bzw Workflow die das Thema ganz anders angehen:
(1) Dort kommen alle eingescanten Rechnungen auf einen Stapel und werden dann beim Buchen einfach verknüpft.Dadurch erhalten sie so etwas wie einen elektronischen Stempel.
Bei Ausgangsrechnungen ist es noch einfacher dort greift man vom Spool bzw Druckvorgang ab und hat noch mehr Informationen die hauptsächlich, aber eben nicht nur für die Suche hilfreich sind.
Meiner Meinung nach ist das der Königsweg - maximaler Nutzen bei minimalem Aufwand wenn die Voraussetzungen erst einmal da sind.
Ich sehe meinen Stapel zu bearbeitende (und zu "stempelnde") Dokumente ohne ein Stück Papier auf meinem Schreibtisch. Ich kann Dokumente schnell und einfach weiterreichen(z.B.) per Mail. Ich kann eine verknüpfte Wiedervorlage oder einen Alarm (z.B. noch keine Antwort bekommen oder noch nicht geklärt) einrichten die nur wirken wenn ich zwischenzeitlich noch nicht "gestempelt" (also den Vorgang beendet) habe.
Das Prinzip passt natürlich nicht nur bei Rechnungen.
Es gibt, aber auch dort Abläufe und Lösungen die Deinem Ansatz näher sind.
(2) Wenn z.B. die Rechnung erst nach dem Buchen gescannt wird braucht man dort auch eine Art physikalischen Stempel.
Dazu nutzt man Barcode-Etiketten - entweder von der Rolle (fortlaufend), oder frisch gedruckt. Die Verknüpfung erfolgt über die gemeinsam Nummer.
(2b)Ähnlich wäre es z.B. mit privaten Eingangsrechnungen. Da bucht aber nur die Bank für mich.
Wenn ich an die Buchungen der Bank in einem computerlesbaren Format komme kann ich aus der Buchungsnummer ein Barcode-Etikett erzeugen.
(3)Eine andere Variante des "Späten Erfassens" kommt wieder ohne Etiketten, ist Deiner Lösung wohl am ähnlichsten und lässt sich ähnlich leicht umsatzen : Die Verknüpfung beim Scannen. Was beim "Frühern Erfassen" (z.B. Posteingang) nicht geht, geht beim Späten.
>> Du känntest alles was Du "stempeln" würdest in eine Datenbank schreiben - plus einer fortlaufenden Nummer die dem Dateinamen der ersten eingescannten Seite (bei mehrseitigen Dokumenten) entspricht. Du könntest die Maske von Deinem jetzigen Programm weitgehend übernehmen.
Der Aufwand wäre ähnlich dem von Deinem Stempel-Programm. Der Nutzen wäre aber größer.
Die Lösungen haben den Vorteil, dass Du ab dem Zeitpunkt der Verknüpfen damit in beide Richtungen (Vom Vorgang zur Rechnung und von der Rechnung zum Vorgang) suchen kannst. Fehlende Rechnungen fallen auf, Du kannst zusätzliche Dokumente Verknüpfen, Weiterreichen ...
Deswegen : Selbst wenn Du bei dem Ansatz bleibst die Informationen an sich auf die Dokumente zudrucken. Würde ich dir empfehlen zumindest eine Verknüpfungsinformation (Buchungsnummer, Vorgangsnummer, fortlaufende Nummer... eben ein direkter oder indirekter Hinweis darauf wo es noch mehr Infos gibt) mit aufzunehmen - im Idealfall in einem compuerlesbaren Format - Barcode (EAN 128 2D ... was auch immer)
Ich denke, aber Du wirst auf Dauer damit nicht glücklich.
Ich würde über die Idee an sich nich einmal nachdenken.
Es gibt schon lange verschiedene Lösungen aus dem Bereich Elektronische Archivierung bzw Workflow die das Thema ganz anders angehen:
(1) Dort kommen alle eingescanten Rechnungen auf einen Stapel und werden dann beim Buchen einfach verknüpft.Dadurch erhalten sie so etwas wie einen elektronischen Stempel.
Bei Ausgangsrechnungen ist es noch einfacher dort greift man vom Spool bzw Druckvorgang ab und hat noch mehr Informationen die hauptsächlich, aber eben nicht nur für die Suche hilfreich sind.
Meiner Meinung nach ist das der Königsweg - maximaler Nutzen bei minimalem Aufwand wenn die Voraussetzungen erst einmal da sind.
Ich sehe meinen Stapel zu bearbeitende (und zu "stempelnde") Dokumente ohne ein Stück Papier auf meinem Schreibtisch. Ich kann Dokumente schnell und einfach weiterreichen(z.B.) per Mail. Ich kann eine verknüpfte Wiedervorlage oder einen Alarm (z.B. noch keine Antwort bekommen oder noch nicht geklärt) einrichten die nur wirken wenn ich zwischenzeitlich noch nicht "gestempelt" (also den Vorgang beendet) habe.
Das Prinzip passt natürlich nicht nur bei Rechnungen.
Es gibt, aber auch dort Abläufe und Lösungen die Deinem Ansatz näher sind.
(2) Wenn z.B. die Rechnung erst nach dem Buchen gescannt wird braucht man dort auch eine Art physikalischen Stempel.
Dazu nutzt man Barcode-Etiketten - entweder von der Rolle (fortlaufend), oder frisch gedruckt. Die Verknüpfung erfolgt über die gemeinsam Nummer.
(2b)Ähnlich wäre es z.B. mit privaten Eingangsrechnungen. Da bucht aber nur die Bank für mich.
Wenn ich an die Buchungen der Bank in einem computerlesbaren Format komme kann ich aus der Buchungsnummer ein Barcode-Etikett erzeugen.
(3)Eine andere Variante des "Späten Erfassens" kommt wieder ohne Etiketten, ist Deiner Lösung wohl am ähnlichsten und lässt sich ähnlich leicht umsatzen : Die Verknüpfung beim Scannen. Was beim "Frühern Erfassen" (z.B. Posteingang) nicht geht, geht beim Späten.
>> Du känntest alles was Du "stempeln" würdest in eine Datenbank schreiben - plus einer fortlaufenden Nummer die dem Dateinamen der ersten eingescannten Seite (bei mehrseitigen Dokumenten) entspricht. Du könntest die Maske von Deinem jetzigen Programm weitgehend übernehmen.
Der Aufwand wäre ähnlich dem von Deinem Stempel-Programm. Der Nutzen wäre aber größer.
Die Lösungen haben den Vorteil, dass Du ab dem Zeitpunkt der Verknüpfen damit in beide Richtungen (Vom Vorgang zur Rechnung und von der Rechnung zum Vorgang) suchen kannst. Fehlende Rechnungen fallen auf, Du kannst zusätzliche Dokumente Verknüpfen, Weiterreichen ...
Deswegen : Selbst wenn Du bei dem Ansatz bleibst die Informationen an sich auf die Dokumente zudrucken. Würde ich dir empfehlen zumindest eine Verknüpfungsinformation (Buchungsnummer, Vorgangsnummer, fortlaufende Nummer... eben ein direkter oder indirekter Hinweis darauf wo es noch mehr Infos gibt) mit aufzunehmen - im Idealfall in einem compuerlesbaren Format - Barcode (EAN 128 2D ... was auch immer)