Dateidownload aus dem Internet
deutsche Umlaute und falsche Codepage
Excel Automation
Faxversand über Symantec WinFax
Mail- und Faxversand mit Tobit
MS Graph
Netzwerklaufwerke mappen und trennen
Outlook Automation
PDF-Dateien anzeigen und drucken
PDF Automation über BullZIP-PDF Printer
Quartalsanfang bestimmen
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 – 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 existiert 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)
Will man Windows Scripting nicht nutzen kann man auch die Windows API WNetAddConnection() verwenden. Damit kann man ebenfalls Netzwerkverbindung zum PC hinzufügen.
declare integer WNetAddConnection in "WIN32API" ; string lpszNetPath,; string lpszPassword,; string lpszLocalName
Beispiel:
lVerbunden = WNetAddConnection("\\Server\Freigabe", "Passwort", "H:")
Als Rückgabewerte bekommt man unter anderem:
0 – Verbindung erfolgreich
67 – Netzwerkpfad nicht gefunden
85 – Netzwerkkennung ist ungültig
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“.