Visual Fox Pro

Dateidownload aus dem Internet
detailierten SQL Fehler anzeigen
deutsche Umlaute und falsche Codepage
Excel Automation
Faxversand über Symantec WinFax
Mail- und Faxversand mit Tobit
MS Graph
Netzwerklaufwerke mappen und trennen
OpenOffice Writer OLE Automation
OS()-Funktion und Windows 10
Outlook Automation
PDF-Dateien anzeigen und drucken
PDF Automation über BullZIP-PDF Printer
Quartalsanfang bestimmen
UTF-8 Sonderzeichen
Word Automation


Microsoft Visual FoxPro – Dateidownload aus dem Internet

DECLARE INTEGER URLDownloadToFile IN urlmon.DLL INTEGER pCaller,STRING szURL, STRING szFileName, INTEGER dwReserved, INTEGER lpfnCB

lcWebFile = ‘http://www.meineseite.de/downloads/bild1.jpg’
lcLocalFile = ‘c:\download\bild1.jpg’
URLDownloadToFile( 0, lcWebFile, lcLocalFile, 0, 0 )

wait window ‘Datei ‘ + lcLocalFile + ‘ gespeichert!’ timeout 5


Microsoft Visual FoxPro – detailierten SQL Fehler anzeigen

Schlägt eine SQL-Abfrage fehl, kann man mit folgenden Code sich den detailierten SQL Fehler anzeigen lassen.


nSReturn = sqlexec(nHandle, cSQLAbfrage, “TT_TEMP”)

if nSReturn < 0 aerror(aErrorArray) cSFehler = aErrorArray(2) messagebox(cSFehler) endif


Microsoft Visual FoxPro – deutsche Umlaute und Codepage

Die Deutschen Umlaute entsprechen in der DOS-Codepage (850) folgenden ASCII-Zeichen und müssen manuell auf die Windows-Codepage umgesetzt werden:

ASCII(132) = “ä”
ASCII(142) = “Ä”
ASCII(148) = “ö”
ASCII(153) = “Ö”
ASCII(129) = “ü”
ASCII(154) = “Ü”
ASCII(225) = “ß”


Microsoft Visual FoxPro – Excel Automation

Zellen-Hintergrundfarbe setzen
Wenn Sie in Excel die Farbe aller Zellen der aktiven Arbeitsmappe per Automation verändern möchten, können Sie das über folgenden Befehl realisiere:

ActiveSheet.Cells.Interior.ColorIndex = FARBPALETTEN-EINTRAG

Das Befehl setzt die Hintergrundfarbe aller Zellen der Arbeitsmappe auf die Farbe, welche in der aktuellen Farbpalette hinterlegt ist, beginnend ab dem Eintrag 0 (in der Regel 0 – weiß, 1 – schwarz)

Sie können eine Farbe auch direkt ohne den Weg über die Farbpalette, angeben. Setzen Sie in diesem Fall die Eigenschaft Color anstelle von Colorindex ein.

ActiveSheet.Cells.Interior.Color = RGB(0, 0, 128)

Sofern Sie nicht alle Zellen der Arbeitsmappe einfärben möchten, sondern nur einen ausgewählten Bereich, ersetzen Sie den Ausdruck Cells durch eine passende Range-Anweisung.

ActiveSheet.Range(“A1:E10″).Interior.ColorIndex = 3


Microsoft Visual FoxPro – Faxversand über Symantec WinFax

WinFax liefert ein OLE-Objekt mit, über den auf einfachste Weise ein Faxversand möglich ist.

loWinFax = createObject(“WinFax.SDKSend8.0″)
loWinFax.ResetGeneralSettings()
loWinFax.setcovertext(‘Hallo’)
loWinFax.SetNumber(’347031′)
loWinFax.SetResolution(1)
loWinFax.AddRecipient
loWinFax.Send(0)
loWinFax.Done()
loWinFax.LeaveRunning()
release loWinFax


Microsoft Visual FoxPro – Mail- und Faxversand mit Tobit

Mit DAVID/ Tobit kannst man Mails oder Faxe auch über das Verzeichnis \DAVID\IMPORT verschicken.

Einfach eine Text-Datei dort schreiben und dann, wenn geschlossen, in *.EMA
umbenennen. Der Servicelayer schnappt sich diese Datei und verschickt sie,
dass sieht dann so aus:

eMail

cMail = ‘\\…\DAVID\IMPORT\FSM00000.EMX’
cMyOpenFile = fcreate(cMail)

*/ Kopf zusammenbauen
=FSEEK(cMyOpenFile, 0, 2)
=FPUTS(cMyOpenFile, ‘@@EML’) && Typ eMail
=FPUTS(cMyOpenFile, ‘@@VON admin@test.de’) && Absender
=FPUTS(cMyOpenFile, ‘@@DRK 0′) && nicht drucken
=FPUTS(cMyOpenFile, ‘@@PRI 2′) && Priorität
=FPUTS(cMyOpenFile, ‘@@NRL user@test.de’) && Empfänger
=FPUTS(cMyOpenFile, ‘@@BTR FUELLSTAND’) && Betreff

*/ Mail schreiben
=FPUTS(cMyOpenFile, ‘Das ist eine Test-Email’) && MailText

=FCLOSE(cMyOpenFile)

rename \\…\DAVID\IMPORT\FSM00000.EMX to \\…\DAVID\IMPORT\FSM00000.EMA

Fax

Für den Faxversand sieht die Methodik ähnlich aus, nur das dort andere Steuerbefehle werden.

@@fax@@
@@nummer 123453@@
@@betreff Sender63649@@
@@RENDERFILE \\server\david\apps\faxware\convert\raster\in\xxxxx.PDF

Mit den @@-Kommandos (siehe DAVID Handbuch) kannst man viele weitere Dinge steuern.


Microsoft Visual FoxPro – MS Graph

#DEFINE xl3DArea                        -4098
#DEFINE xl3DBar                         -4099
#DEFINE xl3DColumn                      -4100
#DEFINE xl3DLine                        -4101
#DEFINE xl3DPie                         -4102
#DEFINE xl3DSurface                     -4103
#DEFINE xlArea                              1
#DEFINE xlAutomatic                     -4105
#DEFINE xlBar                               2
#DEFINE xlBoth                              1
#DEFINE xlBottom                        -4107
#DEFINE xlBuiltIn                           0
#DEFINE xlCap                               1
#DEFINE xlCategory                          1
#DEFINE xlCenter                        -4108
#DEFINE xlChecker                           9
#DEFINE xlCircle                            8
#DEFINE xlColumn                            3
#DEFINE xlColumns                           2
#DEFINE xlCombination                   -4111
#DEFINE xlContinuous                        1
#DEFINE xlCorner                            2
#DEFINE xlCrissCross                       16
#DEFINE xlCross                             4
#DEFINE xlCustom                        -4114
#DEFINE xlDash                          -4115
#DEFINE xlDashDot                           4
#DEFINE xlDashDotDot                        5
#DEFINE xlDefaultAutoFormat                -1
#DEFINE xlDiamond                           2
#DEFINE xlDistributed                   -4117
#DEFINE xlDot                           -4118
#DEFINE xlDouble                        -4119
#DEFINE xlDoubleAccounting                  5
#DEFINE xlDoughnut                      -4120
#DEFINE xlDown                          -4121
#DEFINE xlDownward                      -4170
#DEFINE xlExponential                       5
#DEFINE xlFixedValue                        1
#DEFINE xlGray16                           17
#DEFINE xlGray25                        -4124
#DEFINE xlGray50                        -4125
#DEFINE xlGray75                        -4126
#DEFINE xlGray8                            18
#DEFINE xlGrid                             15
#DEFINE xlHairline                          1
#DEFINE xlHigh                          -4127
#DEFINE xlHorizontal                    -4128
#DEFINE xlInside                            2
#DEFINE xlInterpolated                      3
#DEFINE xlJustify                       -4130
#DEFINE xlLeft                          -4131
#DEFINE xlLightDown                        13
#DEFINE xlLightHorizontal                  11
#DEFINE xlLightUp                          14
#DEFINE xlLightVertical                    12
#DEFINE xlLine                              4
#DEFINE xlLinear                        -4132
#DEFINE xlLogarithmic                   -4133
#DEFINE xlLow                           -4134
#DEFINE xlMaximized                     -4137
#DEFINE xlMaximum                           2
#DEFINE xlMedium                        -4138
#DEFINE xlMinimized                     -4140
#DEFINE xlMinimum                           2
#DEFINE xlMinusValues                       3
#DEFINE xlMovingAvg                         6
#DEFINE xlNextToAxis                        4
#DEFINE xlNoCap                             2
#DEFINE xlNone                          -4142
#DEFINE xlNormal                        -4143
#DEFINE xlNotPlotted                        1
#DEFINE xlOpaque                            3
#DEFINE xlOutside                           3
#DEFINE xlPercent                           2
#DEFINE xlPicture                       -4147
#DEFINE xlPie                               5
#DEFINE xlPlus                              9
#DEFINE xlPlusValues                        2
#DEFINE xlPolynomial                        3
#DEFINE xlPower                             4
#DEFINE xlPrimary                           1
#DEFINE xlRadar                         -4151
#DEFINE xlRight                         -4152
#DEFINE xlRows                              1
#DEFINE xlScale                             3
#DEFINE xlSecondary                         2
#DEFINE xlSemiGray75                       10
#DEFINE xlSeries                            3
#DEFINE xlShowLabel                         4
#DEFINE xlShowLabelAndPercent               5
#DEFINE xlShowPercent                       3
#DEFINE xlShowValue                         2
#DEFINE xlSingle                            2
#DEFINE xlSingleAccounting                  4
#DEFINE xlSolid                             1
#DEFINE xlSquare                            1
#DEFINE xlStDev                         -4155
#DEFINE xlStError                           4
#DEFINE xlStack                             2
#DEFINE xlStar                              5
#DEFINE xlStretch                           1
#DEFINE xlThick                             4
#DEFINE xlThin                              2
#DEFINE xlTop                           -4160
#DEFINE xlTransparent                       2
#DEFINE xlTriangle                          3
#DEFINE xlUp                            -4162
#DEFINE xlUpward                        -4171
#DEFINE xlValue                             2
#DEFINE xlVertical                      -4166
#DEFINE xlWizardDisplayAlways               1
#DEFINE xlWizardDisplayDefault              0
#DEFINE xlWizardDisplayNever                2
#DEFINE xlX                             -4168
#DEFINE xlXYScatter                     -4169
#DEFINE xlY                                 1
#DEFINE xlZero                              2

Microsoft Visual FoxPro – Netzwerklaufwerke mappen und trennen

Netzwerk-Infos kannst man mit der VFP Funktion ANETRESOURCES() auslesen. Ob
aber das Mapping tatsächlich exitiert etc, kannst man damit nicht testen.
Dazu muss man auf externe API Calls oder WMI ausweichen.

Um beispielsweise die Netzwerk-Laufwerke anzuzeigen, kann man folgende Routine verwenden:

local oWNW as wscript.network
oWNW = createObject(“WSCRIPT.NETWORK”)
oNetDrives = oWNW.EnumNetworkDrives()
? oNetDrives.count
for each cText in oNetDrives
? cText
endfor

Ein Mapping kannst man selber machen mit:

cDrive = “Z:”
cPfad = “\\rechner_name\freigabe\”
lProfile = .f.
cUser = “Anwender”
cPassword = “*************”
? oWNW.MapNetworkDrive(cDrive, cPfad, lProfile, cUser, cPassword)

Ein Mapping trennen kann man über:

cDrive = “Z:”
lForce = .t.
lProfile = .f.
? oWNW.RemoveNetworkDrive(cDrive, lForce, lProfile)


Microsoft Visual FoxPro – OpenOffice Writer OLE Automation

OpenOffice Writer instanzieren
aBin = createbinary(“”)
oWriter = CreateObject(“com.sun.star.ServiceManager”, “Open Office”)
oDes = oWriter.createInstance(“com.sun.star.frame.Desktop”)

OpenOffice Writer Dokument / Vorlage öffnen
oDoc = oDes.loadComponentFromURL(“file:///” + cDatei, “_blank”, 0, aBin )

OpenOffice Writer Text suchen und Ersetzen
oReplace = oDoc.CreateReplaceDescriptor
oReplace.SetSearchString(cSearchText)
oReplace.SetReplaceString(cReplaceText)
oDoc.ReplaceAll(oReplace)

OpenOffice Writer Dokument speichern
oDoc.Store()

OpenOffice Writer Dokument drucken
Local Array laDruckValue[1]
loReflection = oWriter.createInstance( “com.sun.star.reflection.CoreReflection” )
loDruckValue = createObject(“relation”)
loReflection.forName(“com.sun.star.beans.PropertyValue”).createObject(@loDruckValue)
laDruckValue[1] = loDruckValue
laDruckValue[1].NAME = “CopyCount”
laDruckValue[1].VALUE = 1
oDoc.Print(@laDruckValue)

OpenOffice Writer Dokument schließen
oDoc.close(1)

OpenOffice Writer schließen
oDes.Terminate


Microsoft Visual FoxPro –OS()-Funktion und Windows 10

Bekanntlich wurde ja Visual Fox Pro von Microsoft schon vor Jahren Durch einen Fehler in der OS()-Funktion kann Microsoft ab Windows 8 die Betriebssysteme nicht mehr unterscheiden und liefert bei Abfragen über die OS()-Funktion die gleichen Werte zurück. Abhilfe schafft folgende Abfrage, die dann auch sauber zwischen Windows 8, Windows 8.1 und Windows 10 trennen kann.

oWMI = GetObject(“winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2”)
cOSSys = oWMI.ExecQuery(“select * from Win32_OperatingSystem”)
for each loOperatingSystem in cOSSys
cWinVer = loOperatingSystem.Caption
next


Microsoft Visual FoxPro – Outlook Automation

CreateItem-Konstanten

Über die CreateItem-Funktion können über die Outlook-Automation verschiedene Einträge im Outlook angelegt werden.
Als Parameter muss dabei der Typ des Eintrages spezifiziert werden.

Dabei stehen folgende Möglichkeiten zu Auswahl:

  • 0 -> E-Mail-Eintrag
  • 1 -> Termin-Eintrag
  • 2 -> Kontakt-Eintrag
  • 3 -> Aufgaben-Eintrag
  • 4 -> Journal-Eintrag
  • 5 -> Notiz-Eintrag
  • 7 -> Verteiler-Liste in Kontakten


Microsoft Visual FoxPro – PDF-Dateien anzeigen und drucken

Sofern der Adobe Acrobat Reader installiert ist das Ausdrucken und Ansehen von PDF-Dokumenten recht einfach.

Zur Ausführung benutzen wir die Funktion ShellExecute aus der Windows-Bibliothek SHELL32.DLL. Diese müssen wir unserem Programm erst einmal bekannt machen:

declare integer ShellExecute in “Shell32.dll” integer hwnd, string lpVerb, string lpFile, string lpParameters, string lpDirectory, long nShowCmd

Um nun ein PDF zu öffnen gehen wir wie folgt vor:

shellexecute(0,”open”,cPDFDatei,””,””,0)

Um das PDF direkt auszudrucken, modifizieren die Zeile nur leicht:

shellexecute(0,”print”,cPDFDatei,””,””,0)


Microsoft Visual FoxPro – PDF Automation über BullZIP PDF

Über folgende Automation kann eine PDF-Datei aus einem FoxPro-Report erstellt werden. Dazu wird der freie PDF-Drucker der Firma BullZip angesteuert.


cDrucker = “Bullzip PDF Printer”
cZiel = “C:\Pfad\DATEI.PDF”

oObjekt = Createobject(“BullZIP.PDFPrinterSettings”)
oObjekt.SetValue(“Output”,cZiel)
oObjekt.SetValue(“ShowSettings” ,”never”)
oObjekt.SetValue(“ShowPDF” ,”no”)
oObjekt.WriteSettings(.T.)

Set Printer To Name (cDrucker)
Report Form cReport To Printer
oObjekt = .Null.
Release oObjekt


Microsoft Visual FoxPro – Quartalsanfang bestimmen

Viele Berichte im Rechnungswesen und für die Geschäftsführung basieren auf quartalsweisen Berechnungen. Die nachfolgende Funktion ermittelt den Quartalsanfang für ein übergebenes Datum:

function QuartAnf(duDatum)
nMonth = month(duDatum)
cYear = str(year(duDatum), 4)
do case
case nMonth > 9
duDatum = ctod(“01.10.”+cYear)
case nMonth > 6
duDatum = ctod(“01.07.”+cYear)
case nMonth > 3
duDatum = ctod(“01.04.”+cYear)
otherwise
duDatum = Ctod(“01.01.”+cYear)
endcase
return(duDatum)

Die Funktion lebt von der richtigen Einstellung von DATE, nämlich “SET DATE GERMAN”.


Microsoft Visual FoxPro – UTF-8 Sonderzeichen

Im UTF8 werden folgenden deutschen Sonderzeichen durch Umlaute gekennzeichnet.

Sonderzeichen ASCI CHR dezimal
Ä 195 + 132
Ö 195 + 150
Ü 195 + 156
ä 195 + 164
ö 195 + 182
ü 195 + 188
ß 195 + 159

Aus UTF-8 umgewandelt werden kann es in FoxPro mit der Funktion StrConv(cMyUTF8String,11).

Microsoft Visual FoxPro – Word Automation

Microsoft Word hat ein OLE-Objekt, welches man programmatisch aus Microsoft Visual Fox Pro ansteuern kann.

oDocument.Bookmarks.Exists(“TextmarkeBezeichnung”) prüft ob im Word-Dokument eine Textmarke vorhanden ist