systray.vcx

05/04/2010 - 04:22 von mike_ao | Report spam
hi füxe

hoffe alle hatten ein schönes osterfest :))


ich falle komischerweise bös auf die schnut.

in dem verzeichnis wo meine EXE steht, existiert ein unterverzeichnich
"ICON\"
also sowas
c:\Programme\MyProg\MyExe.EXE
c:\Programme\MyProg\ICON\pic1.ico

wenn ich dem systray.vcx als iconfile den string "ICON\pic1.ico"
verpasse, dann funzt es innerhalb vom fux wunderbar.

sobald ich die EXE aber alleine starte (siehe unten), bekomme ich den
fehler, dass die ICO-datei nicht vorhanden ist. als Suchpfad bekomme
ich anstelle
c:\Programme\MyProg\ICON\pic1.ico
diesen pfad geliefert
c:\Programme\ICON\Pic1.ico

gebe ich den gesamten pfad in der entwichklungsumgebung an
addbs(justpath(sys(16,0)))+"ICON\pic1.ico"
dann funzs im fux gar nicht mehr

stelle ich die exe paralell zum ICON
c:\Programme\MyProg\ICON\Pic1.ico
c:\Programme\MyProg\PROG\MyExe.EXE
dann tut's

wenn ich die EXE über den debugger laufen lasse, dann komme ich bis zur
methode
SYSTRAY.LOADICON
LPARAMETERS cIconFileName
* Loads an icon as a Windows resource. Returns the resource handle.
.
IF FILE(cIconFileName)
hier steht immer noch "ICON\Pic1.ico"
cTempFileName = ADDBS(GETENV("temp")) + "systray_temp_" +
SYS(3) + ".icn"
COPY FILE (cIconFileName) TO (cTempFileName)
und hier fàllt er auf die nase
ELSE
RETURN
ENDIF


bisschen ratlos frage ich
mfg mike
 

Lesen sie die antworten

#1 Matthias Kahlert
05/04/2010 - 13:17 | Warnen spam
Am 05.04.2010 04:22, schrieb mike_ao:
ich falle komischerweise bös auf die schnut.



Ja, das ist die Krux, wenn man mit relativen Pfaden arbeitet ;-)

in dem verzeichnis wo meine EXE steht, existiert ein unterverzeichnich
"ICON\"
also sowas
c:\Programme\MyProg\MyExe.EXE
c:\Programme\MyProg\ICON\pic1.ico

wenn ich dem systray.vcx als iconfile den string "ICON\pic1.ico"
verpasse, dann funzt es innerhalb vom fux wunderbar.

sobald ich die EXE aber alleine starte (siehe unten), bekomme ich den
fehler, dass die ICO-datei nicht vorhanden ist. als Suchpfad bekomme
ich anstelle
c:\Programme\MyProg\ICON\pic1.ico
diesen pfad geliefert
c:\Programme\ICON\Pic1.ico

gebe ich den gesamten pfad in der entwichklungsumgebung an
addbs(justpath(sys(16,0)))+"ICON\pic1.ico"
dann funzs im fux gar nicht mehr



SYS(16,0) liefert den Pfad des ausführenden Programms, und in der
Entwicklungsumgebung ist das c:\Programme\Microsoft Visual
FoxPro\vfp9.exe... (ist ja eigentlich auch logisch).

stelle ich die exe paralell zum ICON
c:\Programme\MyProg\ICON\Pic1.ico
c:\Programme\MyProg\PROG\MyExe.EXE
dann tut's



Wenn die EXE in der Entwicklungsumgebung im Unterordner "PROG" liegt,
dann ist der korrekte relative Pfad "..\icon\pic1.ico", und nicht
"icon\pic1.ico".

In der installierten Version scheinen die Pfade bei Dir aber komplett
woanders zu liegen, dort liegt die EXE nicht im Unterordner "PROG".
Zumindest nach Deinen Pfaden oben.

Daher brauchst Du Dich nicht wundern, wenn es Unterschiede gibt zwischen
Entwicklungsumgebung und Laufzeit ;-)

wenn ich die EXE über den debugger laufen lasse, dann komme ich bis zur
methode
SYSTRAY.LOADICON
LPARAMETERS cIconFileName
* Loads an icon as a Windows resource. Returns the resource handle.
.
IF FILE(cIconFileName)
hier steht immer noch "ICON\Pic1.ico"
cTempFileName = ADDBS(GETENV("temp")) + "systray_temp_" +
SYS(3) + ".icn"
COPY FILE (cIconFileName) TO (cTempFileName)
und hier fàllt er auf die nase
ELSE
RETURN
ENDIF



Ist das Icon in die EXE eingebunden? Wenn ja, ist die FILE() Funktion
böse, denn die liefert immer ein .T. zurück, wenn eine Datei namens
"pic1.ico" im Projekt integriert ist, egal welcher Pfad angegeben ist.
Auch ein FILE("c:\irgendwas\pic.ico") würde eine .T. zurückgeben.

Dem COPY FILE ist das aber wiederum nicht egal. Der braucht den
korrekten Pfad.

Den Pfad zur EXE hole ich mir i.d.R. mit JUSTPATH(_VFP.ServerName) oder
mit SYS(5)+SYS(2003) (wobei letzteres abhàngig ist von der Einstellung
"Ausführen in ..." in den Eigenschaften der Verknüpfung, das liefert
quasi das Arbeitsverzeichnis).

Versuch, den korrekten vollstàndigen Pfad zusammenzubauen, dann sollte
es auch klappen.

Matthias

Ähnliche fragen