Datumsfeld im Layout

Hallo Forum!

Weiß jemand eine Möglichkeit, in ein Karten-Layout Felder mit Benutzer- und Dokumentinformationen
(z.B. das Druckdatum oder Name und Pfad der Projektdatei) einzubringen?

Grüße
Rena
Hallo,

der avenue-Code ist gar nicht so schlimm (s. layout.ave.zip).
Der Trick besteht darin, das Layout im Voraus zu erstellen und auch die Textelemente anzulegen. Jedes Textelement, das später automatisch durch das Script geändert werden soll, sollte mit eindeutigem Text versehen werden, . B.: @@Erstellungsdatum, @@Rechnername, @@Dateiname.
Dann die apr-datei speichern, dieselbe in einem Editor öffnen und nach den o.g. eindeutigen Begriffen suchen. Dann sollte sich etwa sowas finden:

(GText.13
Name: "GraphicText1"
Bounds: 14
Sym: 15
Selected: 0x01
Text: "@@Erstellungsdatum"
Spacing: 1.00000000000000
)

Hier kann jetzt "GraphicText1" durch die im Avenue-Code vorhandene Bezeichnung ausgetauscht werden:

(GText.13
Name: "datum"
Bounds: 14
Sym: 15
Selected: 0x01
Text: "@@Erstellungsdatum"
Spacing: 1.00000000000000
)

speichern.

Damit kann das Script das Textelement im Layout finden und über SetText den Texteintrag austauschen.

Viel Erfolg!
Jörg Thomsen
Hallo,
ich habe ähnliche Wünsche bezüglich des Layouts wie Rena, nur verstehe ich nicht so recht was Jörg hier meint. Kann mir da einer auf die Sprünge helfen.

Gruss
roland
Hallo Roland,
wo genau hast Du die Verständinsprobleme? Soll ich noch mal den Avenue-Code dazu liefern?

Jörg Thomsen
Äh,
ja versuch es mal, vielleicht fällt dann bei mir der Groschen!

Gruss
roland
schon erledigt :)

' Name: _drucken
theLayout = av.FindDoc("Druckvorschau")
theView = av.getProject.FindDoc("Kartenfenster")
theGrText = theLayout.GetGraphics

...

datum = [irgendwas].GetDate
...

FOR EACH e in theGrText
....
IF (e.AsString = "Datum") then
e.SetText(datum)
END
...
END

Jörg
Hm,
also doch Bahnhof! Wie lege ich denn ein Textelement an? Den avenue code soll ich in ein script kopieren und das dann kompelieren oder wie? Ich habe das Gefühl der Zug ist abgefahren! Vielleicht kannst Du mir das mal Schritt für Schritt erklären.

LG
roland
Hallo Anuva, kann man dieses Texteintgabefenster irgendwie größer machen?

Hallo Roland,

das Textfeld legst Du ganz normal in ArcView im Layout-GUI an. Mit der Maus und so. Da schreibst Du dann einen für das gesamte AV-Projekt eindeutigen Text rein, z. B. "@@Erstellungsdatum".
Projekt speichern.
Projekt schließen.
Projekt in ordentlichem Ascii-Editor (TextPad, Scite, Ultraedit) öffnen. nach @@Erstellungsdatum suchen.
Dann sollte sich etwa sowas finden:

(GText.13
Name: "GraphicText1"
Bounds: 14
Sym: 15
Selected: 0x01
Text: "@@Erstellungsdatum"
Spacing: 1.00000000000000
)

Hier kann jetzt "GraphicText1" durch eine sprechendere Bezeichnung ausgetauscht werden:

(GText.13
Name: "datum" <-- hier, an dieser Stelle
Bounds: 14
Sym: 15
Selected: 0x01
Text: "@@Erstellungsdatum"
Spacing: 1.00000000000000
)

speichern.

Jetzt kannst Du mit Avenue über den Dir bekannten Namen des Grafik-Objekts ("Datum") auf das Grafik-Objekt zugreifen (im Bsp.-Code verweise die Variable e auf das Grafik-Objekt). Mit e.SetText() kannst Du dem Objekt nun einen beliebigen Text zuweisen, der dann beim Öffnen/Aktualisieren des Layouts statt Deines urpsrünglich eingegeben Textes ("@@Erstellungsdatum") auch angezeigt werden sollte.

> Den avenue code soll ich in ein script kopieren und das dann kompelieren oder wie?
Wenn Du
- die die '...' rauslöscht
- die Datumszuweisung korrigierst (ich weiß gerade nicht, von was man sich in Ave das Systemdatum holt, wahrscheinlich system)
- Dein Layout Druckvorschau nennst oder die Scriptzeile an Deinen Layoutnamen anpasst,
sollte das schon funktionieren. Die Zeile theView... kannst Du löschen, ich habe das ganze aus einem etwas längeren Script von mir rauskopiert.

Alles unklar?

Jörg
Hallo Jörg,
ich sehe Licht am Ende des Tunnels, nur das mit dem avenue code habe ich immer noch nicht verstanden. Wo soll ich den einsetzen?

Gruss
roland
Hallo Roland,

> Wo soll ich den einsetzen?
in das Script, das das Datum ins Layout setzen soll.
Verstehe ich Deine Frage nicht?

Jörg
Hi,
also ich habe nicht viel Ahnung von Scripten. Wenn ich die Sache richtig verstehe öffne ich den script Editor kopier den code hinein und erzeuge mir einen Button über den ich das Script laufen lasse. Ist das soweit korrket oder habe ich was fundamentales noch nicht gecheckt?

LG
roland
> also ich habe nicht viel Ahnung von Scripten.
Irgendwie ahnte ich sowas :-)

> Wenn ich die Sache richtig verstehe öffne ich den script Editor kopier den
> code hinein und erzeuge mir einen Button über den ich das Script laufen lasse.
ja genau. Noch schöner wird es natürlich, wenn Du den Vorgang direkt mit dem Aufruf des Layouts oder dem Drucken verknüpfst. Vielleicht wäre es eine Lösung (der Einfachheit halber) das Script als Startscript zu nehmen, dann steht immer das aktuelle Datum Layout. Ich will sagen: Wenn des dafür einen extra Button im Layout-GUI gibt, der geklickt werden will, dann ist nicht viel Arbeit gespart und man könnte fast genauso gut das Datum von Hand einfügen.

Ich wünsche ein schönes Wochenende und schaue Montag wieder vorbei!

Jörg
hallo Jörg,
du bist wirklich ein geduldiger Helfer! Dafür werde ich versuchen, ob man dieses Febster nicht etwas größer kriegt. Ist halt ein vorgefertigtes php-forum mit begrenzten Möglichkeite. Werde medea-av mal fragen.
Gruß, Klaus - ANUVA
Hallo Jörg,

wie kann ich denn den Vorgang direkt mit dem Aufruf des Layouts verbinden?

LG
roland
indem Du den Vorgang in das entsprechende Systemsript einbaust, es ist soweit ich weiß 'Doc.Open'. Aber Obacht, ich befürchte, da kann man ganz schön viel kaputt machen! Schreibe Dir doch ein neues Script, das das Layout aus der View-GUI aufruft.

Jörg -MapMedia

p.S. zum größeren Eingabefenster:
Klaus, suche in den Quellen nach "
<textarea name=postText cols=38 rows=10 WRAP class=textForm></textarea>". Probiere mal dort den Wert für cols rauf zusetzen.