Xbase Anfänger sucht HILFE

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

Moderator: Moderatoren

Antworten
dvdbommel
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 49
Registriert: Sa, 11. Feb 2006 11:07

Xbase Anfänger sucht HILFE

Beitrag von dvdbommel »

Hallo bin neu hier ... bin CLIPPER Programmierer...

habe verschiedenste Clipper Programme von mir auf XBASE umgestellt

alle laufen im VIO Modus... jetzt habe ich da ein paar Probleme:

1. meine Druckausgabe ist TEXTorientiert über LPT1 ( CLipper sprache )

- wie erreiche ich daß er unter Windows ... die letzte Seite ausdruckt ohne da Programm zu verlassen.

- wie binde ich eine Grafik am Anfang jedes Audrucks ein

2. habe über ODBCDBE den Treiber für eine ACCESS Datenbank eingebunden auf die ich zugreife ...

- warum zeigt er mir kein korrektes Datum bzw Uhrzeit beim Zugriff an
Text und Numerische Werte sind kein Problem
Uhrzeit in MDB Datenbank 15:10:00 wenn ich sie in meinem Programm Anzeige zeit er mir an so was wie 183499151000 &//%&/%&
und am Schluß noch irgendwelche Hyroglüfen ...

- wie kann ich im gleichen Programm die Daten wieder in eine DBF Datenbank schreiben nur unter Verwendung von

use test
append blank
replace ... with ...

3. Verwende setmode (35,120)
wie kann ich den Anfangspunkt des Fensters festlegen ... da wenn ich diesen Befehl benutze ... ein Teil des Fensters beim Start des Programms
am rechten Bildschirmrand verschwindet und erst mit der Maus nach links gezogen werden muß

Hoffe ich nerve nicht mit meinen Anfängerfragen ... wäre um HILFE sehr DANKBAR

Gruß DVDbommel
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Xbase Anfänger sucht HILFE

Beitrag von Martin Altmann »

Hallo DVDBommel,
ich selber arbeite in GUI, somit kann ich Dir kaum eine Frage beantworten.
dvdbommel hat geschrieben:- wie erreiche ich daß er unter Windows ... die letzte Seite ausdruckt ohne da Programm zu verlassen.
Sollte eigentlich gehen, wenn Du ein Eject (Formfeed) ranhängst - müßte chr( 12 ) sein.
dvdbommel hat geschrieben:- warum zeigt er mir kein korrektes Datum bzw Uhrzeit beim Zugriff an
Text und Numerische Werte sind kein Problem
Uhrzeit in MDB Datenbank 15:10:00 wenn ich sie in meinem Programm Anzeige zeit er mir an so was wie 183499151000 &//%&/%&
und am Schluß noch irgendwelche Hyroglüfen ...
Was ODBC anbelangt, so haben wir hier andere im Forum, die damit mehr Erfahrung haben. Nur soviel zum Thema Access und Datum/Zeiten: Access speichert das Datum bzw. die Zeit intern in einem anderen Format - nicht wie dBase! Die Zeit mußt Du halt umrechnen - sie wird in Access abgelegt als Double, und zwar folgendermassen (nach Suche in Google):
http://www.freeaccess.de/cgi-bin/freeaccessForum/YaBB.pl?board=general;action=display;num=1008788874 hat geschrieben:In Access werden die Datumsfelder intern definitv als Zahl Typ Double gespeichert, wobei der Vorkomma-Anteil (positiv wie negativ) die Anzahl der Tage seit dem 30.12.1899 bedeuten und der Nachkommateil die "Fraction" des
Tages, d.h. die Uhrzeit. (0,5 = 12 Uhr) Zur Anzeige des Datums rechnet Access intern das Datum immer um ...
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
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, DVDBommel.

Es wäre nett, wenn Du Dich hier:

http://www.xbaseforum.de/viewforum.php?f=9

kurz vorstellen könntest und außerdem wenigstens Deinen realen Vornamen verraten könntest. Danke! :D
Herzlich,
Tom
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Hi DVDBommel,

zu 1: versuche es mit chr(10) +chr(13). Dies entspricht einem "Carriage Return".

Der Ausdruck von Grafiken im Text-Modus ohne Kenntnisse der CHR-Codes des benutzen Druckers nicht möglich.
Um VIO-Modus erfolgt der Druck nicht über einen Windows-Druckertreiber und der grafischen Primitive von xbase++. Das hat zur Folge, dass sogenannte ESCAPE-Sequenzen an den Drucker geschickt werden müssen, damit er z.B. Buchstaben in fett druckt. Dies gilt auch für den Ausdruck von Grafiken.
Zuletzt geändert von Lewi am Sa, 11. Feb 2006 13:42, insgesamt 1-mal geändert.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi DVDBommel

das Problem mit der letzten Seite hatte ich auch.

Probiere einmal am Ende SET PRINTER TO zu setzen, das wirkte Wunder bei mir.
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!!
dvdbommel
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 49
Registriert: Sa, 11. Feb 2006 11:07

Beitrag von dvdbommel »

@ all DANKE für die Antworten


schade das niemand ne Lösung für mein setmode() Problem hat ( siehe 3. OBEN )
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo dvdbommel,
arbeitest Du mit dem XpbCrt()?

Code: Alles auswählen

XbpCrt():new( [<oParent>], [<oOwner>], [<aPos>], [<nRowCount>], [<nColCount>], [<cTitle>], [<lVisible>] )
Für aPos müßte doch {0,0} gehen und für nRowCount 35 und für nColCount 120, oder? Dann solltest Du doch eigentlich auch auf Dein SetMode() verzichten können?
Wie gesagt, ich arbeite nicht mit CRTs...

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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi DVDbommel (man ist das ein komischer Vorname, das die Behörden sowas als Namensgebung Deinen Eltern erlaubt haben....)

möchtest Du haben, das alle Programme in der gleichen Ecke anfangen, oder möchtest Du für jedes Programm einen bestimmten Punkt festlegen, evtl. noch zentriert auf dem Bildschirm?

Schau Dir einmal die serienmäßige AppSys.prg an, falls Du es zentriert haben möchtest. Benutze ich (ein wenig modifiziert) für GUI und Mixedmode
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!!
boddy
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 22
Registriert: Fr, 30. Sep 2005 11:39
Wohnort: Berlin

setmode(35,120)

Beitrag von boddy »

Hallo DVDbommel,

im reinen VIO-Modus kommt unter XP nur ein 25X80 Zeichen großes auf dem Bildschirm zentriertes Fenster mit Laufleisten.
Im Hybrid-Modus ist das Fenster etwas nach rechts geschoben (passt es überhaupt auf den Bildschirm ?), um es neu zu zentrieren kannst du folgendes eingeben:

Code: Alles auswählen

[color=blue]setmode(35,120)[/color]
aSizeDesktop    := AppDesktop():currentSize()
oCrt := SetAppWindow()
oPos := oCrt:currentSize()
aPos  := { (aSizeDesktop[1]-oPos[1]) /2, (aSizeDesktop[2]-oPos[2]) /2}
oCrt:configure(NIL, NIL, aPos,35,120)
Einfacher ist es allerdings, in der APPSYS.PRG die Werte für DEF_ROWS und DEF_COLS anzupassen

Code: Alles auswählen

#define DEF_ROWS       35
#define DEF_COLS       120
gruß
Boddy
dvdbommel
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 49
Registriert: Sa, 11. Feb 2006 11:07

Re: setmode(35,120)

Beitrag von dvdbommel »

boddy hat geschrieben:Hallo DVDbommel,

Code: Alles auswählen

[color=blue]setmode(35,120)[/color]
aSizeDesktop    := AppDesktop():currentSize()
oCrt := SetAppWindow()
oPos := oCrt:currentSize()
aPos  := { (aSizeDesktop[1]-oPos[1]) /2, (aSizeDesktop[2]-oPos[2]) /2}
oCrt:configure(NIL, NIL, aPos,35,120)
gruß
Boddy
Danke hat super funktioniert ... so wollte ich es schon immer haben :D
dvdbommel
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 49
Registriert: Sa, 11. Feb 2006 11:07

Beitrag von dvdbommel »

habe dann das nächste problem ...

ich rufe ein mit Xbase erstelltes programm auf .... aus einem anderen xbase programm

[aktuelles xbase Programm] alles geschrieben in clipper sprache

....
[dann rufe ich das 2te xbase programm auf]
...
run test.exe (das programm macht was und beendet sich wieder und es geht im aktuellen Programm weiter )
...

beim aufruf des 2ten Programms geht durch den RUN befehl natürlich ein DOS Fenster auf und dann zusätlich das Fenster für das 2te xbase Pogramm ... ist ja auch normal und funktioniert auch ... nach dem abarbeiten verschwinden die 2 Fenster ja auch wieder ...

jetzt meine FRAGE ... na endlich kommter er zum punkt ... gell ...

da er im 2ten programm nichts ausgibt auf dem Bildschirm ... kann ich das dos und das xbase Fenster irgendwie unterdrücken ... so daß er das im hintergrund erledigt ... und man keine fenster sieht ...

ufff ich hoffe ich habe es verständlich erklärt ...

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

Beitrag von Tom »

Hallo, DVDBommel.

Wenn Du RunShell() benutzt, hast Du mit dem vierten Parameter die Möglichkeit, die gestartete Anwendung in den Hintergrund zu bringen. Dann öffnet sich auch kein CRT-Fenster.
Herzlich,
Tom
dvdbommel
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 49
Registriert: Sa, 11. Feb 2006 11:07

Beitrag von dvdbommel »

Tom hat geschrieben:Hallo, DVDBommel.

Wenn Du RunShell() benutzt, hast Du mit dem vierten Parameter die Möglichkeit, die gestartete Anwendung in den Hintergrund zu bringen. Dann öffnet sich auch kein CRT-Fenster.
danke TOM ... superschnelle Antwort 8)

habs auch gleich probiert:

runshell( "","klick.exe",.F.,.T.)

FUNKTIONIERT 1A
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

> 3. Verwende setmode (35,120)
> wie kann ich den Anfangspunkt des Fensters festlegen

für das SetMode Problem hast du ja schon Antworten bekommen,
eventuell ist mein Beitrag hier dennoch von Interesse:

http://www.xbaseforum.de/viewtopic.php?p=1539#1539
du must angemeldet sein um das zu lesen.
Es steht aber auch auf Alaskas ASCN Seite unter CrtFont:
ftp://ftp.alaska-software.com/acsn/crtfont.zip
Gruß
Hubert
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 393
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Armin »

Hallo dvdbommel,

ich wurde nicht glücklich mit dem Drucken auf LPT. Ich habe dann alle Ausdrucke in temporäre Dateien umgeleitet, mit samt den ESC-Codes (set printer to (dateiname)). Ich habe dann grundsätzlich Epson-komp. Codes verwendet. Die erzeugte Datei lese ich Zeile für Zeile aus, ersetze die ESC-Codes und drucke sie über xbpPrinter.
Dazu benutze ich einen fixen Schrift-Font, z.B. Courier oder Lucida Console. Somit kann ich auch Bilder drucken. Ich setze vorher einen Platzhalter für das Bild z.B. {logo1.bmp} - wenn ich den dann finde drucke ich´s mit

**** Bild als Bitmap drucken
oBmp:= XbpBitmap():new():create( oPS )
oBmp:loadFile(...)
oBmp:draw(...)


ich verwende 3 Schriftgrössen (klein, normal, gross)

**** normale Schriftgr”sse
elseif left(cZeile,2)==chr(27)+chr(80)

cZeile:=right(cZeile,len(cZeile)-2)

oFont:=oPS:setFont()

oFont:height := 46
oFont:width := 25
oFont:nominalPointSize := 0

oFont:configure()
oPS:setFont(oFont)

vielleicht hilft Dir das weiter. Das gute daran ist, dass Du an dem bestehenden Code eigentlich nichts ändern musst.

set printer to (tempDateiName)
set printer to
ersetzen oder ergänzen um my_druck(tempDateiName)

Gruss Armin
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

> ich wurde nicht glücklich mit dem Drucken auf LPT
> Ich habe dann alle Ausdrucke in temporäre Dateien umgeleit

auch unter clipper war das schon nötig, seit es Laserdrucker gibt, da diese als Seitendrucker ab und zu eigenmächtig Seiten auswerfen wenn Suchroutinen zu langsam sind.

> Epson-komp. Codes verwendet. Die erzeugte Datei lese ich Zeile für
> Zeile aus, ersetze die ESC-Codes und drucke sie über xbpPrinter.

wenn der Code zum Drucker passt, kann man auch einfach die Datei kopieren:

copy file cOutput to lpt1

oder

set printer to lpt1
set printer on
?? cOutPut
set printer to

> Das gute daran ist, dass Du an dem bestehenden Code
> eigentlich nichts ändern musst.

das ist aber auch das Einzig gute ...

bei neuen Anwendungen und nicht gerade einfachen Drucklisten ist man mit den Xbase++ XbpPrinter doch viel flexibler, Linien, Boxen, Bilder, Druckreihenfolge egal etc.

Wenn man dazu noch meine Druckerklasse (HBPrinterX) nimmt, wird es - nach kurzer Einarbeitung - auch richtig einfach ;-), unter Alaska ACSN bzw. meiner Homepage könnt Ihr diese laden und die Beispiele ansehen. Alles kostenlos und neuerdings mit Barcode EAN13 Unterstützung. Druckerauswahl mit Vorschau optional.

Bestehenden Code ok, aber bei neuen Anwendungen ist es doch viel zu kompliziert. Ich denke mit Grausen an das Ausfüllen von Formularen, bei jeder neuen Lieferung mußte der Ausdruck angepaßt werden, weil in der Druckerei wieder der Rand 1 mm verschoben wurde.
Und was die vielen Kleinserien gekosten haben - auch an Pflegeaufwand.

Heute drucken wir alles auf weißem (manchmal mit LOGO oben rechts farbig aufgedruckt - ist billiger und schöner als Farblaser) Papier auf s/w Laserdruckern, mit allen Linien winzigen Schriften in mehrere Richtungen. Man könnte die Steuerinfos auch in DBFs auslagern, das machen wir aber nicht. Eine kleine Änderung im Programm und alle drucken mit dem neuesten Formular ... das spart Geld.
Gruß
Hubert
Antworten