Migration auf GUI (Textdateien mit verschiedenen [ERLEDIGT]

Auf dem Weg von Clipper, FoxPro u.ä. nach Xbase++

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21199
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Migration auf GUI (Textdateien mit verschiedenen [ERLEDIGT]

Beitrag von Manfred »

Moin,

ich bin es wieder. :-)

Im Zuge der Umstellung von Clipper auf Xbase++ bin ich gerade auf einen Programmpunkt bei mir gestoßen, der aus einer DB Daten in eine Textdatei schreibt. Nachfolgend der damalige Vorgang:
  1. Datensatz suchen
  2. Feldinhalt aus einem bestimmten Feld rauskopieren
  3. in neue Db speichern
  4. wenn fertig, dann neue DB zu Textdatei mittel Copy to xxx.txt sdf kopieren
  5. Textdatei mit Editor o.ä. einladen
  6. Schriftarten und -größe ändern
  7. Zeilenabstand verändern
  8. drucken
  9. freuen.
Recht kompliziert gewählt, der Weg, nicht wahr? Das ist mir jetzt nach etlichen Jahren auch mal aufgefallen, zumal ich diesen Punkt schon lange vergessen hatte, der User aber fröhlich so weitergearbeitet hat.

Meine Frage jetzt:

Es muß doch unter Xbase (egal ob im Text oder GUI Modus) möglich sein, diesen ganzen Sermon in ein Array zu schreiben und von da aus direkt mit allem Pipapo auszudrucken? Also welche Schriftart, welche Größe und welcher Zeilenabstand.

Wo müßte ich im Handbuch nachlesen, wie sowas gemacht wird? Ich habe keine Ahnung davon.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
ich habe mal Deinen Posting editiert und den 8) entfernt :-)
Zum Drucken folgenden Tipp: Schau Dir mal die XbpPrinter()-Klasse an in Verbindung mit GraFont() und GraSeg().
Am besten schaust Du Dir mal die XbpPreview()-Beispiele in dem Verzeichnis Xppw32\SOURCE\samples\solution\Preview an.
Alternativ hilft Dir bestimmt auch Hubert mit seiner HbPrinterX - schau mal in das Marktplatz-Forum.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

lade dir meine HBPrinterX Klasse und sieh dir die Beispiele an.
Im Wissenforum und auf dem Marktplatz habe ich dazu schon mal was geschrieben, aber am besten gleich auf meiner Homepage laden.
Ist kostenlos und hat gegenüber dem original XbpPrinter den Vorteil, dass ich mit 0,0 den linken oberen Papierrand meine, egal welcher Drucker dran hängt (vorausgesetzt der Druckertreiber des Druckers hat keinen Fehler). Bei Xbase++ fängt man unten links auf der bedruckbaren Fläche an. Und die ist von Drucker zu Drucker sehr unterschiedlich !

Ich habe z.B. eine Methode drin, welche Fließtext in einem Rutsch ausdrucken kann. Mit allen möglichen Ausrichtungen und Begrenzungen (natürlich nur in EINEM Font, dafür ist der aber beliebig in Art und Größe, mit Seitenwechsel)

Wenn du Tabellen hast, sollte man dann Zeilenweise die Werte links bzw. rechtsbündig drucken. Natürlich kannst du die - falls mit blanks formatiert - auch in courier oder einem andern fixed font mit der Methode auf einen Schlag drucken, sieht aber nicht so toll aus (wer mag schon noch fixed fonts).

Druckerauswahl mit Vorschau sind möglich, aber keine Pflicht.

Nun zu dem neuen Ablauf:

1. Datensatz suchen
2. Feldinhalt aus einem/mehreren Feld/ern holen.
- entweder direkt in Stringvariabele (ganzer Text an einem Stück)
- oder Wert direkt drucken ... wenn die Formatierung schön werden soll.
# in neue Db speichern - das war in Clipper nötig wegen dem Speicherplatz,
# heute kommt alles in einen STRING
# z.B. cÜberschrift+CRLF+Zeile1+CRLF+Zeile2+CRLF+Zeile1+Ende
- NUR wenn der User den Text ändern soll, kann man die gesamte
Datei z.B. in RTF Format oder als Text speichern und im Editor etc. bearbeiten lassen
# wenn fertig, dann neue DB zu Textdatei mittels
#Copy to xxx.txt sdf kopieren - nö brauchen wir nicht.
3. Drucken bzw. Druck abschließen
4. freuen und staunen, was ein Windowsdrucker alles kann ... wie wäre es mit LOGO oder Farbe ?
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21199
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hihi,

ich habe es geahnt.

Hubert, nicht so aufwändig. Es werden nur die Namen der Interpreten herausgeholt, und später ausgedruckt, ausgeschnitten und dann eingeschweißt. Als Reiter für Verkaufsständer.
Schrift TimesNewRoman Größe 28.

Ich werde mir Deine HBPrinterX Klasse ansehen.
Das mit dem 0,0 ist links oben, das finde ich gut. Ich kriege jedesmal einen Herzriß, wenn ich unter GUI andersherum denken muß.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Manfred.

Ich kann Dir in dieser Hinsicht (und eigentlich sowieso, denn es ist ein tolles Migrationstool) eXPress++ von Roger Donnay nur empfehlen. Schau mal in diesen Thread:

http://xbaseforum.de/viewtopic.php?t=72
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hier mal ein kleines Beispielprogramm mit der einfachen Routine...

Code: Alles auswählen

#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
#include "Appevent.ch"
#include "Font.ch"
#include "xbpdev.ch"
*---------------- Fonts nur einmal erzeugen - create fonts only once ------
#define HB_FONT_14Arial         1    
#define HB_FONT_12Arial         2
#define HB_FONT_12TimesNewRoman 3
#define HB_FONT_20Arial         4
#define CRLF chr(13)+chr(10)

procedure main
   local oHBPrinter
   ...
   cls 
   @1,1 say "Testprogramm"
   
   use dateiname
   if dbseek(irgendwas)
      oHBPrinter := MyHBPrinter():New():create()
      if oHBPrinter:IsPrinterError()             // Fehler verhindern
         ? "Standarddrucker ist nicht verfügbar !"
         ? "Status: ",oHBPrinter:printerStatus()
         wait
      else
         * Reihenfolge mit mit DEFINE übereinstimmen
         oHBPrinter:addFont("14.Arial")
         oHBPrinter:addFont("12.Helvetica")
         oHBPrinter:addFont("12.Times New Roman")
         oHBPrinter:addFont({"Arial",20,.f.,.f.})
         ?
         ? "Liste der Schriften - für Test"
         aeval(oHBPrinter:aFontList,{| oFont| ;
                  qout(oFont:compoundname,oFont:nominalPointSize) })
         
         *** Jetzt kommt es drauf an, einfach nur den Text am Stück ?
         *** für diese Druckausgabe braucht man HBPrinter() nicht ableiten. 

         oHBPrinter:StartDoc()
         oHBPrinter:PrintMemo(nRandLinks,nRandOben,cTextAusFeld,nMaxLenX)
              // nMaxLenX definiert die maximale Druckbreite. CRLF im Text
              // brechen natürlich vorher um. Zeilenabstand kann auch eingestellt werden.
         oHBPrinter:EndDoc()
         oHBPrinter:Destroy()

         *** oder mit Druckvorschau, dann muß die Druckausgabe in 
         *** der abgeleiteten Klasse in 2 Methoden definiert werden...

         oHBPrinter:PrintingDialog( .t. ,;   // ESC -> close
                                                .t. ,;   // ALT+Enter and Enter will Print
   			xbeK_ALT_P)  // ALT+P will print
         *** hier kein Destroy, das hat der PrintingDialog schon erledigt.
      endif
  endif
return


NUR WENN MAN DEN PRINTINGDIALOG NUTZEN MÖCHTE !!!!


*---------------------------------------------------------------------
CLASS  MyHBPrinter from HBPrinter

   EXPORTED:
      METHOD Print                 // Alle variablen Druckausgaben werden hier definiert, wenn n”tig wird ein
                                   // Seitenwechsel durchgef
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21199
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Tom,

ja ich erinnere mich wieder. Verflixt, der Tag müßte eigentlich 36-48 Stunden haben... grrrr
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

@Tom

was das Drucken angeht, ist meine Druckerklasse nicht schwerer ...

@Manfred

für ein Paar Labels ist es ein Klacks und auf Wunsch mit schwarzem Schneiderand außenrum. Da reicht der erste Teil meines obigen Beispiels und die reine Druckerklasse ohne Druckvorschau und Printdialog ...
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21199
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Ich fröddel jetzt hier noch ein paar andere Dinge um und dann werde ich mich an die Sache mit dem Drucken ranmachen und schauen, was ich daraus bauen kann.

DANKE :D
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,

bei den Beispieldateien meiner Klasse gibt es die Datei TESTLIST.PRG, kompilieren und ausführen ... Hier wird der Ausdruck von Adressetiketten gezeigt. Formular war von ... egal, mach die Schrift größer und wirf die unnötigen Felder weg und es sollte passen. Immer auf DIN A4, mit Druckvorschau oder ohne, ganz egal.
Gruß
Hubert
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Beitrag von mini990 »

@die mods: Mir fällt auf, daß sehr oft auf Express oder TopDown u.ä. verwiesen wird. Ich muß sagen daß ich damals mit express (obwohl hochgelobt und vom damaligen XBase-Händler, dc-Soft, hochgelobt) überhaupt nicht "einfach" klargekommen bin und deshalb beschlossen habe auf derartige Hilfen zu verzichten.....

Mit Huberts Druckerklasse kam ich sofort klar.....

Ist es denn wirklich so, daß die Meisten hier im Forum mit Express und Co. arbeiten??????

Gruß Stefan
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Stefan.

Einige nutzen das (Wolfang, Josef, ich selbst und ein paar andere), aber bei weitem nicht die Mehrheit, würde ich sagen.

eXPress++ ist aus meiner Sicht einfach ein grandioses Migrationstool (Portierung) und darüberhinaus eine sehr, sehr umfangreiche Funktionenbibliothek. Für Druckaufgaben setze ich das allerdings nicht mehr ein, da steht mir Combit List & Label zur Seite.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

offensichtlich programmiere ich weder mit eXpress++ noch mit TopDown, was nicht heißen soll, dass diese nicht gut wären. Aber ich habe oft genug erlebt, dass man zu der neuen Sprache auch noch eine pseudosprache der Entwicklungsumgebung lernen soll (Clipper CodeGeneratoren, PowerBasic, VO - naja ohne C sah man bei 1.0 alt aus ...).

Als ich mit der ersten OS/2 Version anfing gab es glaube ich sowas auch noch nicht. Ich bin dann hingegangen und habe das MDI Beispiel für neue GUI Programme nach meinen Wünschen aufgemotzt und dabei viel über die Sprache gelernt - leider teilweise wieder vergessen, man kopiert diese ja nur noch ;). Bei meinen alten Programmen habe ich solange meine ClipperProgrammUmgebung angepaßt bis es unter OS/2 lief.

Ich entwickle wie berichtet nur für meinen Arbeitgeber ... und privat als Hobby. OS/2 setzte sich nicht durch und VO 1.0 wurde präferiert, bis dann endlich Xbase++ für Win32 herauskam.

Jede neue 'Umsteigerhilfe' hätte für mich nur mehr Arbeit bedeuted.
Ich habe aber immer streng getrennt zwischen 'alt besteht weiter ...' = dann sieht es auch noch genauso aus und ich mach die Oberflächen neu, dann spielt die Zeit für mich aber auch keine Rolle und ich kitzle aus den Oberflächen das heraus was ich oder die Anwender will/wollen - beide Seiten können da recht stur sein. :wink:

Mit Reportgeneratoren habe ich mich schon früh geärgert und diese daher verbannt. Wenn ich in einem Fall drucke, wird das dort dokumentiert, das konnte zumindest früher kein Reportgenerator. Natürlich bin ich auch einfach viel zu faul noch ein Programm zu lernen ... wenn es gar nicht anders geht, gibts Serienbriefe aus Word / Word Pro ... :D
Gruß
Hubert
Antworten