Format des DATA-Memos der FOXUSER.DBF

23/03/2009 - 16:01 von Winfried Wolf | Report spam
hallo,
in einigen Programmen verwende ich MODIFY COMMAND oder MODIFY FILE für
kleine Edit-Aufgaben. Mit dem Zusatz "WINDOW" passe ich die Größe an.

Eigentlich ganz schön ist die Möglichkeit, über die Resourcen-Datei
immer an die zuletzt verlassene Cursor-Position zurück zu kommen. Leider
passiert aber auch was anderes, wenn die Resourcen-Datei eingeschaltet ist:
Ab dem 2. Aufruf des selben Edit-Files werden die Scrollbars vom
Edit-Text irgendwie überschrieben. Kommt man mit der Maus auf die
Stellen, wo die Positionierungspfeile sein sollen, werden sie für den
Moment wieder sichtbar.
Das Verhalten scheint mir mit falsch gespeicherten Werten in der
Resourcen-Datei zu tun zu haben.

Gibt es irgendwo eine Doku, wie sich das Data-Feld zusammen setzt? Dann
könnte ich eventuell nachkorrigieren.

Zudem ist auch die Einstellung über die Ausgabe der Cursor-Position in
der Statusleiste irgendwo in der Resourcen-Datei gespeichert. Ich wüsste
nur auch gerne, wo.

Gruß,
WiWo
 

Lesen sie die antworten

#1 Jürgen Wondzinski
24/03/2009 - 13:47 | Warnen spam
Hi WiWo,

Dein Phànomen hab ich bislang nicht beobachten können. Tritt das nur bei ner
EXE auf? VFP9 mit SP2 oder was?

Das DATA Format ist meines Wissens nicht offiziell dokumentiert, wird aber
vermutlich ein 1:1 Mapping einer Speicherstruktur sein. Die Änderungen
sollten ja einfach nachvollziehbar sein, da du ja live auf das Feld
zugreifen kannst, und somit die sich àndernden Bytes leicht identifizieren
kannst.

USE SYS(2005) ORDER 1 AGAIN IN 0 ALIAS MyFoxUser

Mittels der Kenntnis deines Fensternamens kannst du den Datensatz direkt
ansteuern, da die FoxUser zur Laufzeit immer nen Index hat:

? KEY(1,"MyFoxUser")
Also sollte sowas ungefàhr funken:

IF SEEK(PADR("PREFW",12)+PADR("WINDMODIFY",12)+LOWER("MeinFenster.prg"))
? myFoxUser.Data
ENDIF

Die EditorInfo ist immer 132 Byte lang, die ersten 2 Bytes sind ein
TypKennzeichen, danach folgen die Daten.

Falls du dann im DATA rumpantscht: nicht vergessen, danach das CheckSum Feld
mit der SYS(2007) wieder zu updaten:

REPLACE CkVal WITH SYS(2007,SUBSTR(MyFoxUser.Data,3)



wOOdy

Ähnliche fragen