vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 24.08.16 13:24

Hallo, ich muß ein altes Projekt in FoxPro 6.0 anpassen.
Leider gibt es in VFP6 keine Möglichkeit einen Dateinamen mit Groß- und Kleinschreibung
abzufragen.
Gibt es eine API ich ich dafür nutzen kann?
Kann ich aus VFP6 heraus eine Function in VB dafür nutzen?

Ich Danke euch.
Gruß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Blackbox
Datum: 24.08.16 15:12

Hallo,

was meinst Du mit abfragen?
Natürlich kannst Du in FoxPro die Win32API mit: Declare Integer Foo In x.DLL As Alias
aufrufen. Alternativ kannst Du in VB6 eine ActiveX Dll bauen und die in das FoxPro
Projekt einbinden. Aber die Möglichkeit über Win32Api ist natürlich besser.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 24.08.16 15:44

Danke für die schnelle Antwort.
Ich habe keine passende Funktion in der API-Referenz gefunden.
Welche soll ich nehmen.

Gruß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Blackbox
Datum: 24.08.16 17:17

Hallo Helmut,

deshalb meine erste Frage: Was willst Du mit der Datei machen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 24.08.16 17:43

Ich möchte nur den Dateinamen in eine Variable speichern um
diesen bearbeiten zu können.
Wichtig ist dabei die Klein- Großschreibung.
Den Dateinamen wieder zu speichern habe ich hinbekommen.

a = fcreate("C:bBb.TxT")
= fclose(a)
copy file "alter Name" to "C:bBb.TxT"
delete file "alter Name"

Das funktioniert, aber keine Ahnung warum.

Gruß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Blackbox
Datum: 24.08.16 18:52

Hallo Helmut,

wenn man das Problem näher kennt, ist die Hilfe ein einfaches googeln. GetShortPathName ist die API zur Anpassung. Hier ist ein Snippet aus dem Internet für FoxPro:

************************************************************************
FUNCTION ShortPath
******************
*** Function: Converts a Long Windows filename into a short
*** 8.3 compliant path/filename
*** Pass: lcPath - Path to check
*** Return: lcShortFileName
*************************************************************************
LPARAMETER tcPath
 
DECLARE INTEGER GetShortPathName IN Win32API;
STRING @lpszLongPath, STRING @lpszShortPath,;
INTEGER cchBuffer
 
lcPath = tcPath
lcshortname = SPACE(260)
lnlength = LEN(lcshortname)
lnresult = GetShortPathName(@lcPath, @lcshortname, lnlength)
IF lnResult = 0
RETURN ""
ENDIF
RETURN LEFT(lcShortName,lnResult)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: visualfx
Datum: 24.08.16 20:55

Hallo Helmut FoxPro,

vielleicht liegt es am heutigen Wetter (bei uns 30 °C im Schatten), aber leider "verstehe" ich überhaupt nicht Deine Frage!

1) Möchstest Du die gewünschte Funktionalität in Visual Foxpro 6.0 oder in Visual Basic 6.0 realisieren ???

2) Was meinst Du genau mit: "Leider gibt es in VFP6 keine Möglichkeit einen Dateinamen mit Groß- und Kleinschreibung abzufragen." ???

3) Die Runtime von Visual Foxpro 6.0 ist Vfp6r.dll. Diese DLL exportiert keine außerhalb von Visual Foxpro benutzbaren Funktionen!

Gruß, Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 25.08.16 12:28

Hallo BlackBox.
Habe nun GetShortPathName und GetFullPathName getestet.
Der Name wird wie LPARAMETER zuzückgegeben.
Ich kann also nicht die tatsächliche Klein Großschreibung ermitteln.

tatsächlicher Dateinname = "C:aBB.tXt"
tcPath = "C:abB.txt"
lcShortName = "C:abB.txt"

Hallo Stefan.
Ich suche eine Möglichkeit die exakte Schreibweise von Dateinamen zu ermitteln.
Wichtig dabei insbesondere die Klein- Großschreibung.
VFP6 stellt keine mir bekannte Möglichkeit zur Verfügung.

Gruß HELMUT

Beitrag wurde zuletzt am 25.08.16 um 12:35:19 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: visualfx
Datum: 25.08.16 12:43

Hallo Helmut,

- zunächst nochmal meine Frage: möchtest Du diese Ermittlung in VFP6 oder in VB6 programmieren ???

Gruß, Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 25.08.16 12:44

VFP6
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: visualfx
Datum: 25.08.16 13:27

Hallo,

eigentlich ist dies ja ein VB6-Forum und ich hoffe, daß man deshalb diesen Thread wegen einer Frage zu VFP6 trotzdem nicht gleich schließt

OK, mit VFP6 kenne ich mich eigentlich sehr gut aus!

Leider nehmen die Befehle und Funktionen von VFP6 keine große Rücksicht auf die Groß-/Kleinschreibung von Dateinamen. Diesen "Wildwuchs" haben wir leider Microsoft zu verdanken!

Beispiel:

- ADIR( ... ) - liefert in einem Array alle Dateinamen immer komplett in Großbuchstaben!

- FCREATE( ... ) - erzeugt eine neue Datei, die Groß-/Kleinschreibung wird exakt übernommen!

- COPY FILE fileName1 TO fileName2 - falls fileName2 noch nicht existiert wird sie angelegt und zwar immer komplett klein geschrieben! falls fileName2 existiert wird sie überschrieben, aber die Groß-/Kleinschreibung von fileName2 wird beibehalten!

- RENAME fileName1 TO fileName2 - benennt eine Datei um, fileName2 wird aber immer komplett klein geschrieben!

Daher auch Dein Beispiel-Code:

a = fcreate("C:bBb.TxT")
= fclose(a)
copy file "alter Name" to "C:bBb.TxT"
delete file "alter Name"
- FCREATE erzeugt die Datei mit der gewünschten Groß-/Kleinschreibung
- FCLOSE schließt die Datei
- COPY FILE ... kopiert die alte Datei über die neue Datei
- DELETE FILE ... löscht die alte Datei

Was man eigentlich für Dein Code-Beispiel nur bräuchte, wäre eine FRENAME()-Funktion, die beim neuen Dateinamen die exakte Groß-/Kleinschreibung übernimmt. Die gibt es aber leider nicht!

Wenn Du also eine Datei umbenennen willst und beim neuen Dateinamen die Groß-/Kleischreibung vorgeben willst, mußt Du die Win32-API bemühen.

MoveFile, siehe hier: https://msdn.microsoft.com/de-de/library/windows/desktop/aa365239%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

Leider wieder ein bißchen typisch Microsoft, es gibt keine RenameFile-Funktion, sondern nur die MoveFile-Funktion!

Deklaration in VFP6:

DECLARE INTEGER MoveFile IN WIN32API;
        STRING oldFileName,;
        STRING newFileName
 
ret = MoveFile( "alter Name", "C:bBb.TxT" )
falls ret = 0 Fehler , falls ret != 0 alles OK

Falls das noch nicht die Lösung für Dein Problem sein sollte, poste bitte einfach die nächste Frage.

Gruß, Stefan

Beitrag wurde zuletzt am 25.08.16 um 13:48:38 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 25.08.16 16:34

Super Stefan - Vielen Dank für deine Ausführung !!!
Das speichern habe ich hinbekommen.
Aber wie komme ich an den alten Dateinamen ran incl. Groß Kleinschreibung?
Ich muß den alten Dateinamen modifizieren. Dazu muß ich erst den alten Namen
in eine Variable speichern. Geht das vielleicht mit FindFirstFile ?

Ich habe gelesen, daß VFP7 wohl dieses Problem gelöst hat. Aber woher
bekomme ich diese Version von FoxPro?


Gruß HELMUT
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: visualfx
Datum: 25.08.16 17:18

Hallo Helmut,

da Microsoft schon seit vielen Jahren auf der .NET-Schiene fährt, ist die gesamte Visual Foxpro-Linie - genauso wie auch Visual Basic 6.0 - dem Rotstift zum Opfer gefallen.

Von VFP7 als auch VFP8 würde ich komplett abraten, da diese Versionen unter allen Windows-Versionen ab Windows Vista bis Windows 10 mehrere zum Teil erhebliche Probleme bereiten !!!

Erst bei VFP9 mit Service Pack 2 (SP2) und allen Hotfixes hat Microsoft diese Probleme gelöst (das ist auch die neuste Version, eine neuere gibt es nicht) !!!

- und oh Wunder: VFP6 mit SP5 hatte noch nie rgendwelche Probleme mit irgendeiner Windows-Version: alle Versionen von Windows 95 bis Windows 10, 32 Bit oder 64 Bit !!!

- das kann ich definitiv aus eigener Erfahrung bestätigen, siehe hier: http://www.memotech.de/ProgressTaskbar/ProgressTaskbar.jpg

Von einem Update von VFP6 auf VFP9 würde ich aber bei einem bestehenden Projekt dringend abraten.

Deshalb nochmal eine Frage:

- möchtest Du z. B. alle Dateien eines Ordners ermitteln und die Dateinamen korrekt mit Groß-/Kleinschreibung auf dem Bildschirm für den Anwender anzeigen?

- wenn Du nämlich den alten Dateinamen / die alten Dateinamen nur ermitteln mußt, um sie dann sofort in neue Namen mit einer bestimmten Groß-/Kleinschreibung umzubenennen, wäre die VFP-Funktion ADIR( ... ) genau das richtige dafür

Gruß, Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 25.08.16 17:27

Hallo Stefan.

ADIR() wäre genau das richtige - Aber leider unterscheidet ADIR() nicht die Klein Großschreibung.
Ich brauche die Dateinamen aber incl. Klein Großschreibung.

Gruß HELMUT
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: visualfx
Datum: 25.08.16 18:22

Hallo Helmut,

das ist genau das Dilemma mit ADIR() und allen weiteren VFP-Datei-Funktionen.

Ich habe gerade mal die beiden Win32-Api-Funktionen GetFullPathName und GetShortPathName getestet: die machen irgendwie auch das, was sie gerade wollen - also für Deine Anforderung auch nicht zu gebrauchen !!!

Bleibt vielleicht nur noch FindFirstFile / FindNextFile / FindClose. Die sind aber wegen einer ziemlich komplizierten Übergabe-Struktur kein Freund von VFP6.

Ich werde aber noch ein bißchen forschen . . .

Gruß, Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 25.08.16 19:28

Stefan - Du bist der Beste !
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

FindFirstFile + FindNextFile + FindClose  
Autor: visualfx
Datum: 25.08.16 19:53

Hallo Helmut,

wie wir es schon vermutet hatten: mit FindFirstFile + FindNextFile + FindClose funktioniert es!

LOCAL fileName
LOCAL findFileData
LOCAL handle
LOCAL foundFileName
LOCAL ret
 
DECLARE INTEGER FindFirstFile IN WIN32API;
		STRING fileName,;
		STRING @findFileData
 
DECLARE INTEGER FindNextFile IN WIN32API;
		INTEGER handle,;
		STRING @findFileData
 
DECLARE INTEGER FindClose IN WIN32API;
		INTEGER handle
 
fileName = "d:\*.txt"	&& oder beliebiger Pfad + Dateiname mit/ohne Platzhalter
 
findFileData = SPACE( 318 )
 
handle = FindFirstFile( fileName, @findFileData )
 
IF handle != -1			&& ERSTE Datei gefunden !!!
	foundFileName = ALLTRIM( SUBSTR( findFileData, 45, 260 ) )
 
	MESSAGEBOX( foundFileName )
 
	DO WHILE .T.
		findFileData = SPACE( 318 )
 
		ret = FindNextFile( handle, @findFileData )
 
		IF ret = 0	&& KEINE weitere Datei gefunden !!!
			EXIT
		ENDIF
 
		foundFileName = ALLTRIM( SUBSTR( findFileData, 45, 260 ) )
 
		MESSAGEBOX( foundFileName )
	ENDDO
 
	FindClose( handle )
ENDIF
Den Code oben kannst Du einfach komplett in den VFP-Programm kopieren, er ist getestet

Noch zur Erklärung der drei Zahlen 318 und 45 und 260:

- die gesamte Struktur findFileData ist 318 Byte groß und der gefundene Dateiname foundFileName beginnt in der Struktur an Stelle 45 und ist maximal 260 Zeichen lang

Gruß, Stefan

Beitrag wurde zuletzt am 25.08.16 um 20:08:42 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 26.08.16 11:42

Hallo Stefan.
Es funktioniert !!! Super und VIELEN DANK für deine Hilfe.

In der Struktur WIN32_FIND_DATA stecken ja noch weitere Informatioen.
Wie komme an die ran? So könnte ich mir ein vorhergehendes ADIR() sparen.

Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type

Gruß HELMUT
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

weitere Datei-Information 
Autor: visualfx
Datum: 26.08.16 16:36

Hallo Helmut,

leider kennt VFP6 (noch) keine Strukturen. Die wurden erst in einer späteren Version von VFP eingeführt. Ich glaube da ist VB6 wesentlich besser !!!

Ich schlage deshalb folgendes vor (weil ansonsten der Aufwand in keinem Verhältniss mehr zum Nutzen steht):

LOCAL pathName
LOCAL fileName
LOCAL fileAttr
LOCAL findFileData
LOCAL handle
LOCAL foundFileName
LOCAL foundShortFileName
LOCAL foundFileSize
LOCAL foundFileDate
LOCAL foundFileTime
LOCAL foundFileAttr
LOCAL arrayName[1]
LOCAL ret
 
DECLARE INTEGER FindFirstFile IN WIN32API;
		STRING fileName,;
		STRING @findFileData
 
DECLARE INTEGER FindNextFile IN WIN32API;
		INTEGER handle,;
		STRING @findFileData
 
DECLARE INTEGER FindClose IN WIN32API;
		INTEGER handle
 
pathName = "d:\"
fileName = "*.txt"
fileAttr = "HS"
 
findFileData = SPACE( 318 )
 
handle = FindFirstFile( pathName + fileName, @findFileData )
 
IF handle != -1				&& ERSTE Datei gefunden !!!
	foundFileName      = ALLTRIM( SUBSTR( findFileData, 45, 260 ) )
	foundShortFileName = ALLTRIM( SUBSTR( findFileData, 305, 14 ) )
 
	ret = ADIR( arrayName, pathName + foundFileName, fileAttr )
 
	foundFileSize = IIF( ret > 0, arrayName[1, 2], 0 )
	foundFileDate = IIF( ret > 0, arrayName[1, 3], {..} )
	foundFileTime = IIF( ret > 0, arrayName[1, 4], "" )
	foundFileAttr = IIF( ret > 0, arrayName[1, 5], "" )
 
	MESSAGEBOX( foundFileName )
 
	DO WHILE .T.
		findFileData = SPACE( 318 )
 
		ret = FindNextFile( handle, @findFileData )
 
		IF ret = 0		&& KEINE weitere Datei gefunden !!!
			EXIT
		ENDIF
 
		foundFileName      = ALLTRIM( SUBSTR( findFileData, 45, 260 ) )
		foundShortFileName = ALLTRIM( SUBSTR( findFileData, 305, 14 ) )
 
		ret = ADIR( arrayName, pathName + foundFileName, fileAttr )
 
		foundFileSize = IIF( ret > 0, arrayName[1, 2], 0 )
		foundFileDate = IIF( ret > 0, arrayName[1, 3], {..} )
		foundFileTime = IIF( ret > 0, arrayName[1, 4], "" )
		foundFileAttr = IIF( ret > 0, arrayName[1, 5], "" )
 
		MESSAGEBOX( foundFileName )
	ENDDO
 
	FindClose( handle )
ENDIF
Gruß, Stefan

Beitrag wurde zuletzt am 26.08.16 um 16:56:01 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 30.08.16 10:59

Hallo Stefan.
Ich hatte ein ausregendes Wochenende und melde mich deshalb erst jetzt.
Ja, eine zweite Abfrage über ADIR() geht natürlich. Sollte man aber größere
Datenbestände durchforsten wäre das eine zeitraubende Lösung.
Gibt es keine Möglichkeit die Info aus FindFileData zu verwenden?
Die Struktur ist ja bekannt.

typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes; 0:4
FILETIME ftCreationTime; 4:8
FILETIME ftLastAccessTime; 12:8
FILETIME ftLastWriteTime; 20:8
DWORD nFileSizeHigh; 28:4
DWORD nFileSizeLow; 32:4
DWORD dwReserved0; 36:4
DWORD dwReserved1; 40:4
TCHAR cFileName[ MAX_PATH ]; 44:260
TCHAR cAlternateFileName[ 14 ]; 304:14
} WIN32_FIND_DATA, *PWIN32_FIND_DATA; total bytes = 318

Gruß HELMUT
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: visualfx
Datum: 30.08.16 11:56

Hallo Helmut,

1) Wie schon gesagt, wenn VFP6 Strukturen könnte . . .

Allein FILETIME ist schon wieder eine Struktur

(siehe hier: https://msdn.microsoft.com/de-de/library/windows/desktop/ms724284(v=vs.85).aspx)

welche man dann noch mit der Funktion FileTimeToSystemTime

(siehe hier: https://msdn.microsoft.com/de-de/library/windows/desktop/ms724280(v=vs.85).aspx)

in SYSTEMTIME wandeln muß.

SYSTEMTIME ist dann schon wieder eine Struktur

(siehe hier: https://msdn.microsoft.com/de-de/library/windows/desktop/ms724950(v=vs.85).aspx)


So was ähnliches gillt auch für die Dateigröße, die ist nämlich in nFileSizeHigh und nFileSizeLow aufgeteilt und muß dann aus diesen beiden Werten wieder zusammengestzt werden . . .


2) Außerdem gilt: bei allen Datentypen die nicht vom Typ STRING sind, kann man die Werte nicht einfach nur mit einem SUBSTR() aus der Struktur herausholen. Sondern man muß danach noch die Byte-Reihenfolge umdrehen (Intel-Notation) und dann byteweise nach Ascii wandeln.

Wenn Du Dir das wirklich antun willst . . . (ich rate ab)


3) Aber: Sinngemäß zur Funktion ADIR() kannst Du aber auch noch die Funktion AGETFILEVERSION() aufrufen, die liefert noch viele weitere Datei-Informationen.

Wegen der Geschwindigkeit brauchst Du Dir wegen ADIR() und AGETFILEVERSION() keine Gedanken zu machen, das geht Ruck-Zuck


4) Noch ein Tip: speziell für Visual Foxpro gibt es z. B. folgende Foren:

- Microsoft-Forum, deutsch: https://social.msdn.microsoft.com/Forums/de-DE/home?forum=foxprode

- Microsoft-Forum, englisch: https://social.msdn.microsoft.com/Forums/en-US/home?forum=visualfoxprogeneral

- Tek-Tips-Forum, englisch: http://www.tek-tips.com/threadminder.cfm?pid=184

Gruß, Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

noch ein kleiner Nachtrag  
Autor: visualfx
Datum: 30.08.16 12:11

- das ist ja im Grunde auch der Sinn einer RAD (Rapid Development) -IDE vie VFP oder VB6, daß man sich um solche Sachen wie native Windows-Funktion und die zugehörigen (C-, C++-) Strukturen nicht kümmern muß und auch nicht kümmern will !

- ansonsten ist es nämlich ab einem gewissen Punkt besser und sinnvoller, nicht mehr mit VFP oder VB6 zu entwickeln, sondern mit C++ oder C# !

- allerdings kann ich definitiv aus eigener Erfahrung sagen, daß man z. B. mit VFP um den Faktor 5 bis 10 schneller entwickelt wie z. B. mit C++

- VFP ist hierbei wahrscheinlich sogar etwas besser wie VB6, da VFP eine netzwerkfähige, multiuserfähige, relationale SQL-Datenbank enthällt die man OHNE DAO, ADO, OLEDB, etc. benutzen und nahtlos integrieren kann.

Gruß, Stefan

Beitrag wurde zuletzt am 30.08.16 um 12:35:57 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 30.08.16 15:16

Hallo Stefan,

welche Sprache würdest du empfehlen für einen VFP Liebhaber der vielleicht auch mal
für Android was schreiben will?

Gruß HELMUT
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

App-Entwicklung - welche IDE ??? 
Autor: visualfx
Datum: 30.08.16 16:03

Hallo Helmut,

das ist eine sehr gute Frage !!!

Da bin ich selbst seit Jahren auf der Suche. Es gab mal das MobiOne Studio (http://www.genuitec.com/mobile/)

Da habe ich mir im Mai 2013 die Trial-Version heruntergeladen: Absolut genial !!!

- komfortable IDE wie bei bei VFP bzw. VFP6
- Erstellen der Bedienoberfläche mit Drag-n-Drop wie bei VFP bzw. VFP6
- Properties, Methoden und Events wie bei VFP bzw. VFP6
- Verknüpfen der Datenquellen wie bei VFP bzw. VFP6 (VFP: ControlSource, RecordSource)
- erzeugt WEB-Apps für alle (!!!) Geräte per HTML5 + CSS
- d. h. Apps für Android + iOS (iPhone, iPad) + Windows Phone
- Simulation von z. B. einem Smartphone auf dem PC, um die eigene App sofort testen zu können
- man muß trotzkem KEIN HTML5 + CSS programmieren
- Preis der Vollversion: 99,- $

Als ich ein paar Wochen später bestellen wollte, hieß es auf der Seite, daß das MobiOne Studio eingestellt ist und nicht mehr verkauft wird, hä wie bitte ???

Das Nachfolgeprodukt ist wohl myEclipse, du kannst den Link oben ruhig mal anklicken.

Ich habe mir seither sehr viele IDEs zur App-Entwicklung angesehen, auch die kostenlose von google (mit der man zunächst mal natürlich nur Android-Apps entwickeln kann)

- aber alle haben einen ganz großen Nachteil: total überladen, sehr lange, steile Lernkurve - und sie müllen einem mit HTML5-Code und mit CSS-Code den Bildschrim voll. Das interessiert mich aber NICHT !!! und das will ich auch NICHT sehen !!!

- bei der konventionellen Windows-Entwicklung z. B mit VFP oder VB6, etc. bekomme ich ja auch nicht den Bilschirm mit internem C- oder C++- oder Assembler-Code zugemüllt.

Daher kann ich Dir momentan keine gescheite Antwort geben, vielleicht ist ja die google-Suche schlauer - oder andere Forums-Mitglieder

- also: wer Vorschläge hat - immer her damit !!!

Gruß, Stefan

Beitrag wurde zuletzt am 30.08.16 um 16:07:41 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Screen-Shot MobiOne !!! 
Autor: visualfx
Datum: 30.08.16 16:20

- so und nicht anders möchte ich eine App entwickeln: https://aeroyid.files.wordpress.com/2013/07/mobi-one.png
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 30.08.16 16:22

Ja Stefan - ich bin ganz bei dir !!!
Ich hatte schon gedacht alleine mit dieser Meinung zu sein.

Nochmal zurück zu deinem Code.
Mit der zweiten Abfrage per ADIR() kann ich mich abfinden.
Aber wie unterscheide ich bei @findFileData zwischen Ordner + Datei?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: visualfx
Datum: 30.08.16 16:30

Hallo Helmut,

das was findFileData zurückliefert ist immer nur der reine Dateiname ohne Pfad !!!

Gruß, Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 30.08.16 17:24

Hallo Stefan.

findFileData liefert Ordner- und Dateinamen ohne Pfad.
Aber wie kann ich diese Unterscheiden?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: visualfx
Datum: 30.08.16 18:26

Hallo Helmut,

OK, da habe ich Dich falsch verstanden!

Das kannst Du durch die nachfolgende Funktion ADIR() herausfinden.

In diesem Fall mußt Du fileAttr = "DHS" setzen (also mit D !)

LOCAL pathName
LOCAL fileName
LOCAL fileAttr
LOCAL findFileData
LOCAL handle
LOCAL foundFileName
LOCAL foundShortFileName
LOCAL foundFileSize
LOCAL foundFileDate
LOCAL foundFileTime
LOCAL foundFileAttr
LOCAL foundType
LOCAL arrayName[1]
LOCAL ret
 
DECLARE INTEGER FindFirstFile IN WIN32API;
		STRING fileName,;
		STRING @findFileData
 
DECLARE INTEGER FindNextFile IN WIN32API;
		INTEGER handle,;
		STRING @findFileData
 
DECLARE INTEGER FindClose IN WIN32API;
		INTEGER handle
 
pathName = "d:\"
fileName = "*.txt"
fileAttr = "DHS"
 
findFileData = SPACE( 318 )
 
handle = FindFirstFile( pathName + fileName, @findFileData )
 
IF handle != -1				&& ERSTE Datei gefunden !!!
	foundFileName      = ALLTRIM( SUBSTR( findFileData, 45, 260 ) )
	foundShortFileName = ALLTRIM( SUBSTR( findFileData, 305, 14 ) )
 
	ret = ADIR( arrayName, pathName + foundFileName, fileAttr )
 
	foundFileSize = IIF( ret > 0, arrayName[1, 2], 0 )
	foundFileDate = IIF( ret > 0, arrayName[1, 3], {..} )
	foundFileTime = IIF( ret > 0, arrayName[1, 4], "" )
	foundFileAttr = IIF( ret > 0, arrayName[1, 5], "" )
 
        foundType = IIF( ATC( "D", foundFileAttr ) != 0, "Ordner", "Datei" )
 
	MESSAGEBOX( foundType + ": " + foundFileName )
 
	DO WHILE .T.
		findFileData = SPACE( 318 )
 
		ret = FindNextFile( handle, @findFileData )
 
		IF ret = 0		&& KEINE weitere Datei gefunden !!!
			EXIT
		ENDIF
 
		foundFileName      = ALLTRIM( SUBSTR( findFileData, 45, 260 ) )
		foundShortFileName = ALLTRIM( SUBSTR( findFileData, 305, 14 ) )
 
		ret = ADIR( arrayName, pathName + foundFileName, fileAttr )
 
		foundFileSize = IIF( ret > 0, arrayName[1, 2], 0 )
		foundFileDate = IIF( ret > 0, arrayName[1, 3], {..} )
		foundFileTime = IIF( ret > 0, arrayName[1, 4], "" )
		foundFileAttr = IIF( ret > 0, arrayName[1, 5], "" )
 
                foundType = IIF( ATC( "D", foundFileAttr ) != 0, "Ordner", _
                  "Datei" )
 
		MESSAGEBOX( foundType + ": " + foundFileName )
	ENDDO
 
	FindClose( handle )
ENDIF
Wenn dann ATC( "D", foundFileAttr ) != 0 liefert, handelt es sich um einen Ordner, ansonsten um eine Datei !

Gruß, Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

So als Vorschlag: 
Autor: Blackbox
Datum: 30.08.16 18:44

Hallo,

nachdem die Diskussion ja festgestellt hat, dass die WinAPI nicht so wirklich das Gelbe vom Ei für FoxPro ist, wie wäre es damit:

fso = CreateObject("Scripting.FileSystemObject")

FoxPro ist in alle Fälle objektorierentiert. Warum nicht das FileSystemobject benutzen?
Mit dem FSO kommt man an alle Informationen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: So als Vorschlag: 
Autor: visualfx
Datum: 30.08.16 19:06

Hallo Blackbox,

das ist wirklich ein sehr guter Vorschlag !

Das FileSystemObject ist ja sehr mächtig und umfangreich, woraus aber auch folgt:

- eine Realisierung mittels FileSystemObject ist eine kleinere / größere / neue Baustelle !!!

Gruß, Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Es ist umfangreich 
Autor: Blackbox
Datum: 30.08.16 19:19

aber für FoxPro besser dokumentiert als die Win32API.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Hilfedatei ??? 
Autor: visualfx
Datum: 30.08.16 19:56

Hallo Blackbox,

als Beschreibung zu den ganzen Scripting-Objekten habe ich nur folgende Datei: Script56.chm

Was mir fehlt ist die zugehörige chi-Datei, also z. B.: Script56.chi. Oder gibt es die garnicht ?

Wenn ich diese chm-Datei öffne und dann darin herumklicke, wird immer der folgende Fehler angezeigt:

- siehe: http://www.memotech.de/skriptfehler.jpg

Bei allen anderen chm-Dateien tritt dieser Effekt nicht auf !!!

Oder gibt es generell eine bessere / neuere Beschreibung als Script56.chm ???

Gruß, Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Warum? einfach Googlen 
Autor: Blackbox
Datum: 30.08.16 21:24

Hier ist die MSDN

https://msdn.microsoft.com/en-us/library/aa242706(v=vs.60).aspx
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Warum? einfach Googlen 
Autor: visualfx
Datum: 30.08.16 21:34

- die MSDN im Internet kenne ich natürlich!

- ich persönlich finde nur eine CHM-Datei angenehmer, wenn sie denn ohne Fehlermeldungen funktionieren würde . . .

trotzdem danke, Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 31.08.16 11:46

Hallo.
Ja damit komme ich auch weiter. SUPER und Vielen Dank !



Gruß HELMUT

Beitrag wurde zuletzt am 31.08.16 um 11:46:49 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 31.08.16 13:13

Hallo Stefan,
eine Auflistung der FILES bekomme ich hin:

fso = CREATEOBJECT("Scripting.FileSystemObject")
a1 = fso.GetFolder("C:")
a2 = a1.FILES
FOR EACH f1 IN a2
MESSAGEBOX(f1.NAME)
ENDFOR

Aber eine Auflistung der Ordner nicht.

Gruß HELMUT
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Blackbox
Datum: 31.08.16 13:16

Hallo Helmut

das ist die SubFolders eigenschaft die Du im FSO durchlaufen kannst.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 31.08.16 13:48

SUPER DANK !!!
Ich hatte es mit FOLDERS versucht.
Wie finde ich solche Informationen in der MSDN?
Unter FileSystemObject habe ich nur FILES und FOLDERS gefunden,
nicht aber SUBFOLDERS.

Gruß HELMUT
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Blackbox
Datum: 31.08.16 20:02

Hallo Helmut,

nur googlen: FileSystemObject MSDN

als allererste Zeile kommst Du direkt in die Beschreibung dieses Objekts mit allen Events, Methoden und Eigenschaften direkt von Microsoft (leider in englisch).

Hättest Du im Anfang dein Problem präziser gefasst, wäre dieser Thread längst erledigt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 01.09.16 16:05

Hallo. Sorry dafür !
Ich hab Fso ein wenig getestet und habe mal eine ganz Festplatte
durchlaufen lassen mit 13.500 Ordnern. Das hat ca. 5 Minuten gedauert.
ADIR() braucht 20 Sekunden.
Mache ich was falsch?

DO WHILE .T.
v_i = v_i+1
v_Ord = THISFORM.O_Tree.nodes.ITEM(v_i).FULLPATH
v_Key = THISFORM.O_Tree.nodes.ITEM(v_i).KEY
v_1 = fso.GetFolder(v_Ord)
v_2 = v_1.SubFolders
i = THISFORM.O_Tree.nodes.COUNT
FOR EACH f1 IN v_2
i = i+1
THISFORM.O_Tree.nodes.ADD(v_Key,4,"B"+STR(i,5),f1.NAME,1,2)
ENDFOR
ENDDO

Gruß HELMUT
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 01.09.16 17:31

Ergänzung:
Die ersten 1.000 Ordner brauchen 6 Sec.
Über 5.000 werden schon 60 Sec gebraucht.

Gruß HELMUT
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Blackbox
Datum: 01.09.16 20:02

Hallo Helmut,
eigentlich liest man nur die Ordner und Dateien aus, die man gerade eben zur Darstellung der Treeview braucht. Dynamische Erweiterungen der TreeView zur Laufzeit.

Beispiel:

Die TreeView zeigt zu Beginn C:\\ an als Rootfolder oder auch evtl. andere Laufwerke als je Rootnode. Ein Plus in diesem Zweig zeigt an: Wenn man darauf klickt klappt ein weiterer zweig auf, der die Subfolders zeigt. Diese Subfolders werden aber erst dann zur Laufzeit hinzugefügt, wennn der Benutzer die TreeView in dieser Node aktiviert. Vorher wird über Count festgestellt, ob der momentan ausgewählte Ordner überhaupt Subordner enthält. Wenn > 1 werden die nächsten Subfolder dieser Subfolder dynamisch nachgeladen und angezeigt, ggf. auch schon einzelne Dateien des Ordners.
Das heißt: Die Treeview wird zur Laufzeit mit Hilfe des FSO gefüllt und nicht: Erst alles herausgeholt und sofort in der Treeview angezeigt - nein: Das dauert zu lange.

Ich glaube nicht daran, dass FSO für die Darstellung der Subfolders aus dem Laufwerk C: länger als 2 Sekunden braucht.

Werden die Subfolders angezeigt, wird wieder nur Count der Subsubfolder von der einzelnen SubFolder geprüft und dann das Treeview zur Anzeige eines Plus gebracht, wenn Subfolders vorhanden sind.

Du hast es also mit einem Design-Fehler zu tun. Du nutzt die Werkzeuge falsch. Deine Treeview muss zum Start nicht mit allen Daten versorgt sein, sondern die werden dynamisch mit dem Benutzerverhalten dazugeladen.

Beitrag wurde zuletzt am 01.09.16 um 20:08:17 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 02.09.16 16:39

Hallo Blackbox,
das war auch mein erster Gedanke. Aber mit ADIR() ist das TreeView in 60 Sec gefüllt.

Hab einfach das ausprobiert:

fso = CREATEOBJECT("Scripting.FileSystemObject")
FOR F = 1 TO 10000
THISFORM.CAPTION = STR(F)
v_1 = fso.GetFolder("C:\Dokumente und Einstellungen\Herr\.gradle\...
v_2 = v_1.SubFolders
ENDFOR

Das dauert auch ohne TreeView sehr lange.
Wiederhole ich den Code wird es noch langamer. Es verlangsamt sich überproportional.
Gebe ich danach im Befehlsfenster CLEAR ALL ein, dauert die Ausführung auch sehr lange.

Gruß HELMUT
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Fix und fertiger TreeView für Laufwerke / Ordner / Dateien 
Autor: visualfx
Datum: 02.09.16 18:35

Hallo Helmut,

das FileSystemObject kenne ich nur dem Namen nach, benutzt habe ich es bisher noch nicht.

Wenn Du allerdings alle Laufwerke und Ordner und Dateien in einem TreeView anzeigen willst, kannst Du folgendes benutzen:

- entweder GETFILE() von VFP, zeigt Namen korrekt an, sieht aber etwas altbacken aus

- oder das Mscomm32.ocx ActiveX-Control/-Steuerelement

die zugehörige Hilfedatei lautet: Cmdlg98.chm

Setzte das Steuerelement auf eine Form und rufe die Methode ShowOpen auf.

Vor dem Aufruf der Methode ShowOpen kannst Du (mußt aber nicht) mit der Eigenschaft Flags das Verhalten sehr individuell steuern.

Dieser Dialog samt TreeView zeigt Namen auch korrekt an, sieht aber im Gegensatz zu GETFILE() absolut modern aus !!!

Das Steuerelement hat noch weitere Methoden bzw. Dialoge:

- ShowSave
- ShowPrinter
- ShowColor
- ShowFont
- ShowHelp

Gruß, Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 06.09.16 13:25

Hallo Stefan,
ich muß den Inhalt von Laufwerken in eine Datenbank übertragen und
in einem TreeView sichtbar machen. GERTFILE() oder ShowOpen ist leider
nicht geeignet.
Ich denke, daß FileSystemObject Unmengen Daten puffert ohne diese wieder
frei zu geben. Ohne diesem Problem wäre ich glücklich.

Gruß HELMUT
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: visualfx
Datum: 06.09.16 14:11

OK, ich verstehe !

Dann bleibt eigentlich nur entweder unsere erste Lösung:

1) alle Dateien eines Ordners mit FindFirstFile + FindNextFile + FindClose ermitteln und zusätzlich jeweils mit ADIR() weitere Infos abrufen

oder Du kannst das Ganze auch rumdrehen, also:

2) alle Dateien mit ADIR() ermitteln und zusätzlich jeweils den genauen Dateinamen mit FindFirstFile + FindClose abrufen

Ich glaube nämlich, daß die VFP-Funktionen - wie z. B. ADIR(), etc. - super gut optimiert sind !!!

Gruß, Stefan

Beitrag wurde zuletzt am 06.09.16 um 14:13:48 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 12.09.16 15:33

Hallo Stefan.
Aber wie unterscheide ich mit FindFirstFile... zwischen Datei und Ordner?
Sollte eine Datei den gleichen Namen wie ein Ordner haben wird es zum
Problem kommen.

Gruß HELMUT
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: visualfx
Datum: 12.09.16 16:14

Es kann in einem Ordner nicht gleichzeitig einen Ordner und eine Datei mit dem gleichen Namen geben, sondern nur entweder einen Ordner oder eine Datei.

Also wird Dein vermutetes Problem nicht auftreten. Hierbei spielt auch die Schreibweise keine Rolle.

- z. B.: Ordner Test und Datei test geht nicht.

Gruß, Stefan

Beitrag wurde zuletzt am 12.09.16 um 16:20:20 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: Helmut FoxPro
Datum: 12.09.16 16:22

Sorry. Das hätte ich vorher testen sollen.

ICH DANKE EUCH VIELMALS !!!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function für FoxPro in VB 
Autor: visualfx
Datum: 12.09.16 17:26

Kein Problem
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel