• Keine Ergebnisse gefunden

Fachbereich Automatisierung und Informatik

N/A
N/A
Protected

Academic year: 2021

Aktie "Fachbereich Automatisierung und Informatik"

Copied!
104
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

W e r n i g e r o d e

Fachbereich Automatisierung und Informatik

Wahlpflichtvorlesung „Programmierung in ArcView“

Version: 14.09.2008

Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Friedrichstraße 57 - 59

38855 Wernigerode

Raum: 2.202

Tel.: 03943/659-338 Fax: 03943/659-399

Email: mwilhlem@hs-harz.de Raum: 2.202

Tel.: 03943/659-338 Fax: 03943/659-399

Email: mwilhelm@hs-harz.de Internet: http://mwilhelm.hs-harz.de

Download ArcView-Sktipte / Dokumente:

http://mwilhelm.hs-harz.de/download/arcview/

Symbolpfad: C:\ESRI\AV_GIS30\ARCVIEW\SYMBOL\

Erweiterungspfad: C:\ESRI\AV_GIS30\ARCVIEW\EXT32\

(2)
(3)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 3

Inhaltsverzeichnis

1 Objekte in Avenue ... 10

1.1 View... 11

1.1.1 Änderungen im View... 11

1.1.2 Wichtige Methoden für die Attribute ... 11

1.1.3 Manipulation eines Views ... 11

1.2 Table ... 11

1.2.1 Ändern der Attribute... 11

1.2.2 Änderungen in der Tabelle ... 12

1.3 Layout ... 12

1.4 Script... 12

1.4.1 Änderung des aktuellen Scripts ... 13

2 Scripte in Avenue... 14

2.1 Was ist ein Script ... 14

2.2 Variablen... 14

2.2.1 Strings... 14

2.3 Number ... 15

2.4 Boolean ... 17

2.5 Listen ... 17

2.6 If-Anweisung ... 18

2.7 Schleifen ... 19

2.7.1 While-Schleife ... 19

2.7.2 For Each-Schleife ... 19

2.8 For Each Schleifen mit Schlüssenwort By... 20

3 Einfache Programmierung ... 22

3.1 Ausgabe mit der Klasse MsgBox... 22

3.2 Eingabe mit der MsgBox ... 24

3.2.1 Ja/Nein-Abfragen: ... 24

3.2.2 Auswahl aus einer Liste... 24

3.2.3 Eingabe eines Textes ... 25

4 Verknüpfung ... 28

4.1 Scripttypen ... 28

4.2 Namensgebung... 28

4.3 Verknüpfung eines Skriptes mit einem Menü... 29

4.4 Verknüpfung eines Skriptes mit dem ButtonBar ... 31

4.5 Verknüpfung eines Skriptes mit der Werkzeugleiste... 32

5 Dateiein- und Ausgabe... 36

5.1 Dateidialoge ... 36

5.1.1 Auswahl einer Datei zum Speichern... 36

5.1.2 Auswahl einer Datei zum Laden... 36

5.2 Schreiben und Lesen einer Datei ... 37

5.3 Beispiel für die Auswahl einer Datei und das Lesen ... 38

5.4 Beispiel Speichern aller sichtbaren Themen... 39

6 Zugriff auf eine DLL... 41

6.1 Methoden der Klasse DLL... 41

6.2 Methoden der Klasse DLLProc ... 42

6.2.1 Definitionen der Parameter einer DLL ... 42

6.3 MS Visual-Studio ... 46

7 INI-Datei ... 48

(4)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 4

8 Erweiterungen ... 54

9 Beispiele... 66

9.1 Alle Themen anzeigen ... 66

9.2 Alle Selektierte Themen anzeigen ... 68

9.3 Punkt / Line / Fläche im Auswahlfenster... 69

9.4 Alle Datensätze anzeigen... 70

9.5 Alle markierten Datensätze anzeigen... 70

9.6 Ausgabe der Koordinaten einer Linie ... 71

9.7 Erzeugen einer Polylinie ... 73

9.8 Ausgabe in einer Datei... 77

9.9 Lesen aus einer Datei ... 78

9.10 Aufruf von Scripten... 79

10 Tipps... 82

10.1 Modify des Projektes... 82

10.2 Kreiszahl Pi ... 82

10.3 Numberformat ... 82

10.4 Arbeitsverzeichnis... 83

10.5 String Ersetzen ... 83

10.6 Trim... 84

10.7 Quote ... 84

10.8 Zwischenablage... 84

10.8.1 Methoden der Klasse Clipboard ... 85

10.9 Mathematische Funktionen ... 85

10.10 Abgeleitete mathematische Funktionen ... 86

10.11 Funktionen des Typs Shape... 87

10.12 Funktionen der Klasse Zeichenfolge... 87

10.13 Funktionen der Klasse Zahl... 89

11 Literatur ... 91

12 Anhang ... 92

12.1 Konventionen ... 92

12.1.1 Namenskonvention ... 92

12.1.2 Ungarische Notation ... 92

12.1.3 Globale Variablen... 93

12.1.4 Überprüfen der Parameter ... 93

12.1.5 ScriptHeader ... 93

12.2 Sonderzeichen ... 94

12.3 Konstanten für Datei-Operationen ... 94

12.4 Konstanten für neue Felder ... 95

12.5 GetPrivateProfileInt ... 97

12.6 Export nach Excel ... 99

(5)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 5

Abbildungsverzeichnis

Abbildung 1 Module in ArcView ... 10

Abbildung 2 Beispiel eines Layouts... 12

Abbildung 3 Beispiel des Moduls Scripte... 13

Abbildung 4 Ergebnis der Berechnung (Kreisfläche) ... 16

Abbildung 5 Liste mit Zahlen ... 17

Abbildung 6 Beispiel für MsgBox.Info ... 22

Abbildung 7 Beispiel einer MsgBox.Error ... 23

Abbildung 8 Beispiel einer MsgBox.Warning... 23

Abbildung 9 Ausgabe einer Report-Box... 24

Abbildung 10 Beispiel einer Eingabezeile ... 26

Abbildung 11 Beispiel einer MultiInput-Eingabe ... 26

Abbildung 12 Paßwort-Eingabe ... 27

Abbildung 13 Schalterleiste vs. Toolleiste... 28

Abbildung 14 Dialogfenster der Menüs und Schalter ... 29

Abbildung 15 Neues Menü... 30

Abbildung 16 Script-Manager... 31

Abbildung 17 Scriptname eintragen... 31

Abbildung 18 Symbol-Manager ... 31

Abbildung 19 Laden eines eigenen Symbols ... 32

Abbildung 20 Schalter in der Werkzeugleiste... 33

Abbildung 21 Erzeugen eines neuen Werkzeugmenüs ... 33

Abbildung 22 Anzeige aller Themen (Beispiel)... 66

Abbildung 23 Anzeige aller selektierten Themen ... 68

Abbildung 24 Ausgabe der Kooordinaten... 73

Abbildung 25 Unterschied SetDefFormat / SetFotmat... 83

(6)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 6

Quellcode

Quellcode 1 Entfernen der Leerzeichen ... 15

Quellcode 2 Umwandlung von Komma in Punkt... 15

Quellcode 3 Bestimmen des Laufwerks ... 15

Quellcode 4 Einfache Berechnung in Avenue... 16

Quellcode 5 Berechnung des Kreisumfangs... 16

Quellcode 6 Ausgabe einer Zahl ... 16

Quellcode 7 Liste... 17

Quellcode 8 Einfache If-Anweisung ... 18

Quellcode 9 Einfache If-Then Anweisung ... 18

Quellcode 10 While-Schleife... 19

Quellcode 11 While-Schleife mit einer break-Anweisung ... 19

Quellcode 12 Summenberechnung mit einer festen Grenze (For-Schleife) ... 20

Quellcode 13 Summenberechnung mit einer variablen Grenze (For-Schleife)... 20

Quellcode 14 Summenberechnung mit einer Liste (For-Schleife). ... 20

Quellcode 15 Summenberechnung mit einer variablen Grenze und einer Schrittweite ... 20

Quellcode 16 Summenberechnung mit einer variablen Grenze und einer Schrittweite ... 21

Quellcode 17 Info-Box ... 22

Quellcode 18 Error-Box ... 22

Quellcode 19 Warning-Box ... 23

Quellcode 20 Report-Box ... 23

Quellcode 21 Liste aller Themen... 25

Quellcode 22 Input-Box ... 25

Quellcode 23 Multi-InputBox... 26

Quellcode 24 Password-Eingabe ... 27

Quellcode 25 Click-Script ... 34

Quellcode 26 Click-Script ... 34

Quellcode 27 Update-Script ... 35

Quellcode 28 Aufruf von math.dll... 43

Quellcode 29 Bestimmen des Systempfades ... 45

Quellcode 30 Lesen einer Ini-Datei ... 52

Quellcode 31 Script zur Erzeugung einer Extension ... 60

Quellcode 32 Install-Script ... 63

Quellcode 33 UnInstall-Script ... 65

Quellcode 34 Alle Themen anzeigen... 66

Quellcode 35 Thema.setVisible(false)... 67

Quellcode 36 Theme.setVisible(false) mit sortierter Liste ... 67

Quellcode 37 Alle selektierten Themen anzeigen ... 68

Quellcode 38 Punkt / Linie / Fläche in einer Liste ... 69

Quellcode 39 Alle Datensätze anzeigen ... 70

Quellcode 40 Alle markierten Datensätze anzeigen ... 70

Quellcode 41 Anzeige aller (markierten) Datensätze ... 71

Quellcode 42 Anzeige aller Koordinaten eines Datensatzes ... 71

Quellcode 43 Aus Koordinaten eine neue Linie erzeugen... 75

Quellcode 44 Ausgabe in einer Datei ... 77

Quellcode 45 Einlesen aus einer Datei ... 78

Quellcode 46 Aufruf eines Scriptes ohne Parameter ... 79

Quellcode 47 Auswahl mehrerer Themen ... 79

Quellcode 48 Auswahl mehrere Themen... 80

Quellcode 49 Aufruf eines anderen Scriptes ... 80

(7)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 7

Quellcode 50 Script wird aufgerufen und gibt eine Liste zurück ... 81

Quellcode 51 Modify des Projektes... 82

Quellcode 52 Kreiszahl Pi ... 82

Quellcode 53 Numberformat ... 82

Quellcode 54 Script.Numberformat... 82

Quellcode 55 Ausgabe einer Zahl... 83

Quellcode 56 ArcView-Arbeitsverzeichnis ... 83

Quellcode 57 Teilstring in einem String ersetzen... 84

Quellcode 58 Trim eines Strings ... 84

Quellcode 59 Quote (Hochkomma eines String) ... 84

Quellcode 60 Einfügen eines Strings in die Zwischenablage... 85

Quellcode 61 Parameter Check ... 93

Quellcode 62 Scriptheader... 94

Quellcode 63 GetPrivateProfileInt... 99

Quellcode 64 Export nach Excel ... 100

(8)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 8

Dokumentation

Dokumentation 1 GetSystemDirectory... 44

Dokumentation 2 Ini-Datei ... 48

Dokumentation 3 GetPrivateProfileString ... 50

Dokumentation 4 Beispieldatei HSHARZ.ini... 50

Dokumentation 5 GetPrivateProfileInt ... 98

(9)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 9

Dateierweiterungsverzeichnis

Normale Dateierweiterungen:

BMP Grafikdatei, die als Pixeldatei aufgebaut ist. Sie hat eine feste Größe und kann je nach Farbtiefe eine Dateigröße von 1 bis 30 Megabyte besitzen.

DBF Datenbankfile (Datenbankdatei, dBase)

DBS Datenbanksystem

DOS Disk Operating System (Betriebssystem)

GIS Geografischen-Informations-System

JPG Grafikdatei, die als Pixeldatei aufgebaut ist. Sie hat eine feste Größe und kann je nach Farbtiefe eine Dateigröße von 1 bis 30 Megabyte besitzen.

OLE OLE ist eine Abkürzung für Object Linking and Embedding. Mit OLE können Sie Daten aus Anwendungen (Servern) in andere Anwendungen (Client) einfügen.

DDE Dynamic Data Exchange. Mit dieser Client-Server-Methode können Anwendungen gesteuert werden. ArcView kann sowohl Server als auch Client sein.

TIF Grafikdatei, die als Pixeldatei aufgebaut ist. Sie hat eine feste Größe und kann je nach Farbtiefe eine Dateigröße von 1 bis 30 Megabyte besitzen. Wichtig dabei ist, dass mehrere Untervarianten.

ArcView-Dateien:

SHP SHP ist die Abkürzung für Shape-Dateien von Arcview.

SHX SHX ist eine ArcView-Datei (Index-Datei).

SBN SBN ist eine ArcView-Datei

SBX SBN ist eine ArcView-Datei (Indexdatei der SBN-Datei).

DBF DBF-Dateien beinhalten die Attributfelder.

ODB Object Database File

AVX ArcView Erweiterung

AVE Avenue Script

APR ArcView Projekt-Datei

(10)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 10

1 Objekte in Avenue

In ArcView existieren mehrere Module. Aufgerufen werden diese im Hauptfenster (siehe Abbildung 1). Am bekanntesten ist das Modul „Views“, welches die Shapes und Rasterdaten anzeigt. Die Inhalte der Shapes werden im Modul „Tabellen“ angezeigt.

Abbildung 1 Module in ArcView

Alle Module sind über das Objekt „av“ erreichbar. Die folgenden Kapitel beschreiben kurz die einzelnen Module.

(11)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 11

1.1 View

In einem View werden die Themen graphisch dargestellt. Es können Shapes, Rasterdaten und Imagekataloge eingefügt werden. Die Klasse „View“ hat folgende Methoden:

1.1.1 Änderungen im View

AddTheme ( aTheme ) Fügt ein Thema zum aktuellen View

DeleteTheme ( aTheme ) Löscht das Thema aus dem View

FindTheme ( aName ) : Sucht das Thema mit den String aName. Das Ergebnis ist nil oder ein Objekt vom Typ Theme

FindThemeByClass ( aName, aClass ): Sucht das Thema mit den String aName. Das Ergebnis ist nil oder ein Objekt vom Typ Theme

1.1.2 Wichtige Methoden für die Attribute

GetActiveThemes : Ergebnis ist eine Liste aller markierten Themen

GetThemes : Ergebnis ist eine Liste aller Themen

GetVisibleThemes : Ergebnis ist eine Liste aller sichtbaren Themen

GetTOC : Liefert das Objekt für die Legende

1.1.3 Manipulation eines Views

Invalidate Zeigt an, das der View neu gezeichnet werden muss.

InvalidateTOC ( aTheme ) Zeigt an, das alle Themen oberhalb von aTheme neu gezeichnet werden müssen.

1.2 Table

Die Tabelle zeigt die Attribute der einzelnen Themen an. Es ist ähnlich aufgebaut wie eine Exceltabelle. Unterschieden wird zwischen den Koordinaten (Shape) und den Attribute der Tabelle..

Die Klasse „Table“ hat folgende Methoden:

1.2.1 Ändern der Attribute

GetActiveField : Das Ergebnis ist das aktive Feld (Typ Field) oder nil.

GetVTab : Liefert einen Zeiger auf Einträge der Tabelle.

SetActiveField ( aField ) Setzt das aktive Feld

(12)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 12

1.2.2 Änderungen in der Tabelle

MakeField : Field Erzeugt ein neues Feld

1.3 Layout

Ein Layout ist ein Karte welches aus einem View und zusätzliche Objekten (Nordpfeil, Legende, Maßstab) besteht. Dieses Layout kann exportiert oder gedruckt werden.

Abbildung 2 Beispiel eines Layouts

1.4 Script

Das Modul Script sammelt alle Avenuescripte im Projekt. Sie werden als Liste verwaltet (siehe Abbildung 3). Mit dem Schalter „Neu“ wird ein neues Script erzeugt.

(13)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 13

Abbildung 3 Beispiel des Moduls Scripte

Die Klasse „Script“ hat folgende Methoden:

1.4.1 Änderung des aktuellen Scripts

SetDateFormat ( aString ) Änderung des Datumsformat

SetNumberFormat ( aString ) Änderung des Format der Stringanzeige (Siehe Seite 82)

asEncrypted : Dient der Verschlüsselung der Scripte

(14)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 14

2 Scripte in Avenue

2.1 Was ist ein Script

Ein Script – ein Makro – ist die Ansammlung von Befehlen, die nacheinander ausgeführt werden. Die Befehle werden in einer Datei gespeichert und können manuell oder mit Hilfe von Menüs bzw.

Schaltern gestartet werden. Neben einfachen Befehlsfolgen erlauben sie die Verwendung von Variablen, Schleifen und Prozeduraufrufen.

2.2 Variablen

Variablen sind ein wichtiges Mittel um Daten temporär zu speichern. Dabei wird die Groß- und Kleinschreibung ignoriert. Zwei Klassen der Variablen existieren (lokale und globale). Eine globale Variable hat im Namen einen Underscore „_“ vorangestellt. Variablendeklarationen sind in Avenue nicht notwendig und möglich.

2.2.1 Strings

Die Klasse String erlaubt die Speicherung von Zeichen beliebiger Länge.

Beispiel:

a = "Hello World"

b = a.UCase

Im obigen Beispiel wird der Variable b der Text „HELLO WORLD“ zugewiesen.

Methoden der Klasse String:

SetCaseSensitiveCompare ( useCase ) Setzt den Vergleichsmodus IsCaseSensitiveCompare : Boolean Prüft den Vergleichsmodus

MakeBuffer ( numberOfBlanks ) : String Erzeugt einen leeren String

Contains ( anotherString ) : Boolean Prüft, ob ein Substring enthalten ist.

Count : Number Anzahl der Zeichen

IndexOf ( anotherString ) : Number Sucht einen SubString

AsFileName : FileName Umwandlung in einen Filename

IsNumber : Boolean Ist der String eine gültige Zahl

(15)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 15

AsString Umwandlung in einem String (wichtig wenn der

String nil ist )

BasicTrim ( leftChars, rightChars ) : String Abschneiden an den Rändern

LCase : String Umwandlung in Kleinbuchstaben

Left ( nChars ) : String Holt die ersten n Zeichen

Middle ( Offset, nChars ) : String Teilstring ausschneiden

Quote : String Fügt an den Enden ein Hochkomma ein. Wird bei

der Query-Anweisung benötigt.

Right ( nChars ) : String Holt die letzten n Zeichen

Substitute ( matchStr, replaceStr ) : String Ersetzt Teile in String.

Trim : String Abschneiden der Leerzeichen an den Enden

UCase : String Umwandlung in Großbuchstaben

Unquote : String Entfernt die Hochkomma an den Enden.

Beispiele:

' Entfernen der Leerzeichen sStr = " Hallo "

sNeu = sStr.Trim

Quellcode 1 Entfernen der Leerzeichen

' Umwandlung von Komma in Punkt sStr = "1234,567 "

sNeu = sStr.Substitute( ",", "." ) Quellcode 2 Umwandlung von Komma in Punkt

' Bestimmen des Laufwerks sStr = "C:\ArcView\bsp.Apr"

sNeu = sStr.Left(3) ' Ergebnis: "C:\"

Quellcode 3 Bestimmen des Laufwerks

2.3 Number

Die Klasse Number dient der Speicherung und Berechnung von Zahlen. Es wird nicht zwischen Ganzzahligen und Nachkommastellen unterschieden. Eine Deklaration vorab ist nicht möglich.

Methoden der Klasse Number:

GetEuler : Number Liefert die Euler‘sche Zahl (2.71828)

(16)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 16

GetPi : Number Liefert die Kreiszahl π

MakeRandom ( min, max ) : Number Erzeugt eine „Zufallszahl“

Number.SetDefFormat ( aFormatString ) Setzt das Ausgabeformat für alle Zahlen ohne eigenes Format (Siehe Seite 82)

SetFormat ( aFormatString ) : Number Setzt das Ausgabeformat der aktuellen Zahl (Siehe Seite 82)

SetFormatPrecision ( num ) : Number Setzt das Ausgabeformat (Siehe Seite 82)

Mathematische Funktionen: Siehe 85

Beispiele:

A = 3 B = A+1 C = A+2*B

MsgBox.Info(C.AsString,"Ergebnis C") ' Ergebnis korrekt Quellcode 4 Einfache Berechnung in Avenue

Radius = 3

Umfang = Radius*2* Number.getPi

MsgBox.Info(Umfang.AsString,"Ergebnis Umfang ") Quellcode 5 Berechnung des Kreisumfangs

Radius = 3

Flaeche = Radius* Radius * Number.getPi Number.setDefFormat("d,dd")

MsgBox.Info(Flaeche.AsString+" m²","Ergebnis der Fläche") Quellcode 6 Ausgabe einer Zahl

Ergebnis:

Abbildung 4 Ergebnis der Berechnung (Kreisfläche)

(17)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 17

2.4 Boolean

Variablen diesen Typs können nur die Werte true oder false annehmen.

2.5 Listen

Listen werden benötigt, um Objekte in einer Liste zu speichern. Es können Objekte beliebigen Typs in einer Liste enthalten sein. Der erste Index ist die Null. Der letzte Index ist n-1.

Listen werden mit zwei Methoden erzeugt:

aList = List.Make

aList = { } ' Erzeugt eine leere Liste

aList = { 1,2,3,4} ' Erzeugt eine Liste mit vier Zahlen MsgBox.ListAsString (aList,"Liste","Caption")

Quellcode 7 Liste

Abbildung 5 Liste mit Zahlen

Methoden der Liste:

Add ( anObj ) : Fügt ein Element an das Ende der Liste Insert ( anObj ) Fügt ein Element an den Anfang der Liste Remove ( anIndexNumber ) Entfernt das Objekt am Index „anIndexNumber“

RemoveObj ( anObj ) Entfernt das Objekt „anObj“

Set ( anIndexNumber, anObj ) Überschreibt das anIndexNumber.te Objekt Sort ( ascending ) Sortiert die Liste.

(18)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 18

Count : Number Anzahl der Elemente

Get ( anIndexNumber ) : Obj Gibt das anIndexNumber.te Objekt aus

Empty Löscht die Liste

Merge ( anotherCollection ) Fügt eine Liste in die Liste ein

Die nächsten drei Methoden suchen ein Objekt in einer Liste. Wurde das Objekt gefunden, so erhält man einen Index zwischen Null und N-1. Ist das Objekt nicht in der Liste, so erhält man den Wert –1.

Find ( anObj ) : Sucht ein Element.

FindByClass ( aClass ) Sucht ein Element.

FindByValue ( anObj ) Sucht ein Element.

2.6 If-Anweisung

Die Anweisung ifthenelse kontrolliert die bedingte Ausführung von Einzelanweisungen und Blöcken. Sie kann beliebig tief verschachtelt sein.

Beispiel:

A = 3

If (A > 10) then A = A +10 end

MsgBox.Info(A.AsString,"Ergebnis A") Quellcode 8 Einfache If-Anweisung

Der Wert von A ist kleiner gleich zehn, so dass die If-Anweisung nicht ausgeführt wird.

A = 3

If (A > 10) then A = A +10 Else

A = A + 5 end

MsgBox.Info(A.AsString,"Ergebnis A") Quellcode 9 Einfache If-Then Anweisung

Der Wert von A ist kleiner gleich zehn, so dass der Else-Block ausgeführt wird. Das Ergebnis ist von A ist 8.

(19)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 19

2.7 Schleifen

Als Schleifen verwendet Avenue zwei Sorten. Zum Einen die While Schleife und zum Anderen die For each-Schleife. Beide haben unterschiedliche Einsatzmöglichkeiten. Bei der While-Schleife ist die Anzahl der Durchgänge im Gegensatz zur For each-Schleife nicht bekannt.

2.7.1 While-Schleife

Die While-Schleife ist nach dem Muster in C und Java implementiert.

Beispiele:

X = 0 Summe = 0

while (x < 100) Summe = Summe + x x = x +1

end

MsgBox.Info( "Summe: "+Summe.AsString, "Ergebnis" )

Quellcode 10 While-Schleife

Das zweite Beispiel verwendet die Anweisung break um die Schleife zu verlassen. Möglich ist auch die Anweisung „Continue“, die sofort zum nächsten Schleifedurchgang wechselt.

while (true)

again = MsgBox.YesNo( "do it again", "DO IT", TRUE ) if (not again) then

break end end

Quellcode 11 While-Schleife mit einer break-Anweisung

2.7.2 For Each-Schleife

Die For-Schleife führt Anweisungen über die Elemente einer Collection aus. Diese kann explizit in der For-Schleife angegeben werden oder vorher ermittelt werden.

(20)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 20

Beispiele:

X = 0 Summe = 0

For Each X IN 1..20 Summe = Summe + X end

MsgBox.Info( "Summe: "+Summe.AsString, "Ergebnis" )

Quellcode 12 Summenberechnung mit einer festen Grenze (For-Schleife)

N = kanal.readElt X = 0

Summe = 0

For Each X IN 1..N Summe = Summe + X end

MsgBox.Info( "Summe: "+Summe.AsString, "Ergebnis" )

Quellcode 13 Summenberechnung mit einer variablen Grenze (For-Schleife).

aList = { 1,3,5,7,9 } X = 0

Summe = 0

For Each X IN aList Summe = Summe + X end

MsgBox.Info( "Summe: "+Summe.AsString, "Ergebnis" )

Quellcode 14 Summenberechnung mit einer Liste (For-Schleife).

2.8 For Each Schleifen mit Schlüssenwort By Zusätzlich kann die Steuerung mittels „By“ eingeschränkt werden.

X = 0 Summe = 0

For Each X IN 1..10 by 2 Summe = Summe + X end

MsgBox.Info( "Summe: "+Summe.AsString, "Ergebnis" )

Quellcode 15 Summenberechnung mit einer variablen Grenze und einer Schrittweite

(21)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 21

Im obigen Beispiel wird die Summe folgendermaßen ermittelt:

Summe = 1 + 3+ 5+ +7 + 9 = 25

N = kanal.readElt X = 0

Summe = 0

For Each X IN 1..N by 2 Summe = Summe + X end

MsgBox.Info( "Summe: "+Summe.AsString, "Ergebnis" )

Quellcode 16 Summenberechnung mit einer variablen Grenze und einer Schrittweite

(22)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 22

3 Einfache Programmierung

3.1 Ausgabe mit der Klasse MsgBox

Für die Ausgabe stehen mehrere Methoden zur Verfügung.

Info ( aMsg, aTitle ) Ausgabe einer Meldung mit dem Info-Symbol Error ( aMsg, aTitle ) Ausgabe einer Meldung mit dem Error-Symbol

Warning ( aMsg, aTitle ) Ausgabe einer Meldung mit dem Ausrufezeichen-Symbol Report ( aLongMsg, aTitle ) Der Text wird in einem Editor angezeigt. Er kann also kopiert werden.

Beispiele:

Info:

MsgBox.Info("Betätigen Sie die Ok-Taste um Ihre Festplatte zu formatieren",

"Hinweis")

Quellcode 17 Info-Box

Abbildung 6 Beispiel für MsgBox.Info

Error:

MsgBox.Error("Betätigen Sie die Ok-Taste um Ihre Festplatte zu formatieren", "Hinweis")

Quellcode 18 Error-Box

(23)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 23

Abbildung 7 Beispiel einer MsgBox.Error

Warning:

MsgBox.Warning("Betätigen Sie die Ok-Taste um Ihre Festplatte zu formatieren", "Hinweis")

Quellcode 19 Warning-Box

Abbildung 8 Beispiel einer MsgBox.Warning

Report:

sStr = ""

for each i in 1..10

sStr = sStr+i.AsString+NL end

MsgBox.Report(sStr, "Hinweis") Quellcode 20 Report-Box

In einer ReportBox wird ein String in einem Editor dargestellt. Dieses ist nützlich, wenn der Anwender die Möglichkeit haben sollte, die Ausgabe über die Zwischenablage weiter verwenden zu können.

(24)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 24

Abbildung 9 Ausgabe einer Report-Box

3.2 Eingabe mit der MsgBox

Als Eingaben fungieren folgende Dialogfenster:

3.2.1 Ja/Nein-Abfragen:

AllYesNo ( aMsg, aTitle, defaultIsYes ) : Obj LongYesNo ( aMsg, aTitle, defaultIsYes ) : Boolean MiniYesNo ( aMsg, defaultIsYes ) : Boolean YesNo ( aMsg, aTitle, defaultIsYes ) : Boolean YesNoCancel ( aMsg, aTitle, defaultIsYes ) : Obj

Als Ergebnis liefert diese Methode die Werte (true,false,nil)

SaveChanges ( aMsg, aTitle, defaultIsYes ) : Obj (Ja/Nein/Abbrechen) Als Ergebnis liefert diese Methode die Werte (true,false,nil)

3.2.2 Auswahl aus einer Liste

Folgende Listen stehen zur Auswahl:

Choice ( aList, aMsg, aTitle ) : Obj ComboBox

ChoiceAsString ( aList, aMsg, aTitle ) : Obj ComboBox List ( aList, aMsg, aTitle ) : Obj Normale Liste ListAsString ( aList, aMsg, aTitle ) : Obj Normale Liste

MultiList ( aList, aMsg, aTitle ) : List Normale Liste, Mehrfache Selektion MultiListAsString ( aList, aMsg, aTitle ) : List Normale Liste, Mehrfache Selektion

(25)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 25

Beispiele:

' Verweis auf das aktuelle Dokument (View, Table etc) theView = av.GetActiveDoc

aList = list.make ' Neue Liste

for each aTheme IN theView.GetThemes

aList.add(aTheme.AsString) ' Einfügen der Themen als String end

' Anzeige der Themen in einer Liste

aTheme = MsgBox.ListAsString (aList, "Anzeige alle Themen","Liste") if (aTheme=nil) then

exit end

Quellcode 21 Liste aller Themen

Das Beispiel zeigt die Anzeige aller Themen im aktuellen View. Der aktuelle View wird mit der Anweisung „theView = av.GetActiveDoc“ aus dem Projekt geholt. In der For-Schleife werden dann alle Themen in die Liste eingetragen. Mit Hilfe der Methode ListAsString werden die Themen angezeigt.

3.2.3 Eingabe eines Textes

Für die Eingabe eines oder mehrere Texte stehen weitere Methoden zur Verfügung.

Input-Methode:

Die Input-Methode erlaubt die Eingabe eines einzelnen String. Im nächsten Beispiel wird ein Name eingeben. Wenn der Anwender den Ok-Schalter gedrückt hat, wird die Eingabe zur Kontrolle noch einmal ausgegeben.

sStr = MsgBox.Input ("Bitte geben Sie Ihren Namen ein", "Testeingabe",

"noname")

if ( sStr<> nil) then

MsgBox.info(sStr,"Kontrollausgabe") end

Quellcode 22 Input-Box

(26)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 26

Abbildung 10 Beispiel einer Eingabezeile

Multi-Input-Methode:

Die Multi-Input-Methode erlaubt die Eingabe von mehreren String. Im nächsten Beispiel wird eine Bestellung entgegengenommen. Wenn der Anwender den Ok-Schalter gedrückt hat, wird die Eingabe zur Kontrolle noch einmal ausgegeben.

' Erste Liste mit den Labels

labels = { "Katalog number", "Größe", "Farbe", "Preis" }

' Zweite Liste mit den Defaultwerten

defaults = { "2Y4445G", "4", "rot", "24.99" }

' Aufruf der Eingabe

order = MsgBox.MultiInput( "Ihre Angaben", "Bestellung", labels, defaults ) ' Erneute Ausgabe

if (order.count >0) then

MsgBox.ListAsString( order, "Ihr Auftrag ist registriert", "Meldung" ) End

sErg1 = order.get(0) sErg2 = order.get(1) sErg3 = order.get(2) sErg4 = order.get(3)

Quellcode 23 Multi-InputBox

Ergebnis des Dialogfensters:

Abbildung 11 Beispiel einer MultiInput-Eingabe

Der Aufruf der MultiInput.Methode ist einfach zu implementieren, hat aber folgende Nachteile:

Aussehen relativ starr

Keine Plausibilität innerhalb des Fensters

Keine Unterscheidung in den Eingabetypen (Hilfe durch ComboBox etc.)

Keine Unterstützung durch eine Online-Hilfe

(27)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 27

Hinweis:

Da das Ergebnis immer eine Liste ist, muss mit Hilfe der Anzahl der Elemente in der Liste geprüft werden, ob der Anwender die Ok-Taste gedrückt hat.

Password-Methode:

Die Password-Methode erlaubt die Eingabe eines Textes

sStr = MsgBox.Password if ( sStr<> nil) then

MsgBox.info(sStr,"Kontrollausgabe") end

Quellcode 24 Password-Eingabe

Ergebnis:

Abbildung 12 Paßwort-Eingabe

(28)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 28

4 Verknüpfung

Hat man Scripte programmiert, so kann man sie auch die das Menü „SCRIPTE|Ausführen“ starten.

Einige Scripte können aber nicht starten, da sie als aktives Dokument einen View oder eine Table erwarten. Dazu ist man gezwungen, diese aus der jeweiligen Umgebung zu starten. ArcView bietet dazu die Möglichkeit, Scripte mittels eines Menüeintrags oder eines Schalters zu starten. Dieses Kapitel zeigt die verschiedenen Möglichkeiten.

4.1 Scripttypen

ArcView unterscheidet zwei verschiedene Arten von Scripten:

Scripte die eine Aktion auslösen ohne das der Anwender weitere Eingaben tätigen muss. Diese Scripte können durch Menüeinträge oder durch Schalter auf der Schalterleiste aufgerufen werden.

Scripte, die mehrere Aktionen erfordern. Dies ist z. B. das Zeichnen einer Linie in einem Shape.

Diese Aktionen können nur von Schaltern aus dem Toolmenü aufgerufen werden.

Abbildung 13 Schalterleiste vs. Toolleiste

In Abbildung 13 sind die verschiedenen Komponenten dargestellt. Neu ist das Menü „Testmenü“. Es beinhaltet verschiedene Einträge. Darunter ist die Schalterleiste positioniert. Jeder Schalter hat nur jeweils ein Script, mit dem er verknüpft ist. Dieses kann trotzdem umfangreich sein. Ein Beispiel ist das Speichern der Änderungen oder das Aufrufen der Tabelle eines Shapes. Die Zeile beherbergt die Toolleiste von ArcView.

Die Schalter auf der Toolleiste besitzen drei Scripte pro Schalter.

1) Script, wenn der Schalter angeklickt wird (Click).

2) Script, wenn im View die linke Maustaste geklickt wird (Apply).

3) Script, wenn die Funktion beendet wird (Update).

Zusätzlich können Schalter in der Toolleiste auch in Toolmenü zusammengefasst werden. Dies spart Platz, da man immer so programmieren sollte, das der Anwender auch noch andere Extension laden kann.

4.2 Namensgebung

Als Entwickler sollte man immer daran denken, das der Anwender weitere Extensions geladen hat.

Um keine Namenskonflikte zu forcieren, ist ein Präfix beim Namen sinnvoll.

Beispiel:

Inhalt des Skriptes: Alle Bilder sichtbar machen

(29)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 29

Name des Skriptes: AllPictureVisible

Präfix: HSHarz

Ort des Skriptes: View

Typ des Skriptes: Schalter (Bn) Damit ergibt sich folgende Bezeichnung:

Préfix Ort des Scriptes Typ des Scriptes Name des Scriptes

HSHarz. View Bn AllPictureVisible

Bzw. HSHarz.ViewBnAllPictureVisible

Mit dieser Namensgebung erkennt man sofort die „Firma“ bzw. die Extension, das Modul (View, Table, Layout), den Typ der Auslösung (Menü, Schalter) und den Zweck.

4.3 Verknüpfung eines Skriptes mit einem Menü

Dieses Kapitel zeigt die Verknüpfung mit einem Script in einem Menü. Als erstes wird das Menü erzeugt und dann automatisch das

Als erstes wechselt man in den gewünschten View und klickt doppelt in einer der Leisten (siehe Abbildung 14). Im Typ definiert man das gewünschte Modul (View, Table etc).

Abbildung 14 Dialogfenster der Menüs und Schalter

(30)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 30

In der Kategorie wählt man den Ort für die Verknüpfung aus (z. B. Menüs). Mit dem Schalter „Neues Menü“ erzeugt man ein neues Menü an der aktuellen Position. Die Einträge im Menü werden mit den Schaltern „Neues Element“ und „Trennzeichen“ erzeugt.

Für jedes Menü sind folgende Einträge verfügbar:

Click: Script, welches beim Anklicken aufgerufen wird Disabled: Deaktiviert den Menüeintrag

Help Zeigt diesen Text in der Statuszeile an. Dient zur weiteren Information des Anwenders

Help Topic Begriff für die Online-Hilfe

Invisible Zeigt an, ob das Menü angezeigt wird. Besser ist es, das Menü mit Hilfe der Eigenschaft „Disabled“ zu deaktivieren.

Label Überschrift

Shortcut Kurzbefehl, sollte vorsichtig benutzt werden

Tag Integernummer

Update Script, welches beim Neuzeichnen des Views aufgerufen wird

Abbildung 15 Neues Menü

Scriptzuweisung:

Mit einem Doppelklick in der Zeile „Click“ erscheint ein Dialogfenster für die Zuweisung des Menüeintrags an ein Script (siehe Abbildung 16). Wenn das Script schon existiert, sucht man dieses aus der Liste. Ein neues erzeugt man mit dem Schalter „Neu“. Die Abbildung 17 zeigt das Dialogfenster. Hier muss man den kompletten Namen eintragen. Das Skript wird danach in einem Editor angezeigt. Es ist sinnvoll, in der ersten Zeile als Kommentar den Namen einzutragen. Das erleichtert die weitere Pflege der Scripte (siehe 93).

(31)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 31

Abbildung 16 Script-Manager

Die nächste Abbildung zeigt die Eingabe für ein neues Script.

Abbildung 17 Scriptname eintragen

4.4 Verknüpfung eines Skriptes mit dem ButtonBar

Die Vorgehensweise ist mit der Verknüpfung für ein Menü fast identisch. Statt des Menüeintrags wird hier ein Schaltersymbol ausgewählt. Ein Doppelklick auf die Zeile „Icon“ öffnet das Dialogfenster für die Bestimmung der Symbole. Die Liste in ArcView umfasst diverse Symbole, aus denen man auswählen kann (siehe Abbildung 18). Es besteht aber auch die Möglichkeit, eigene Symbole in ArcView zu laden. Dazu betätigt man den Schalter „Laden“ (siehe Abbildung 19).

Abbildung 18 Symbol-Manager

(32)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 32

Abbildung 19 Laden eines eigenen Symbols

Es können verschiedene Formate verwendet werden:

Gif-Bilder

MCP-Bilder

RS-Bilder

TIF-Bilder

BMP-Bilder

XBMP-Bilder

Mit einem Bildeditor kann man eigene Symbole erzeugen.

4.5 Verknüpfung eines Skriptes mit der Werkzeugleiste

Die Vorgehensweise ist mit der Verknüpfung für einen Schalter identisch. Ergänzt wird hier noch die Möglichkeit mehrere Schalter in einem Werkzeugmenü (Toolmenü) zu gruppieren. Dazu existiert im Dialogfenster der Schalter „Werkzeugmenü“. Ein Doppelklick auf die Zeile „Icon“, öffnet das Dialogfenster für die Bestimmung der Symbole. Die Liste in ArcView umfasst diverse Symbole, aus denen man auswählen kann (siehe Abbildung 18). Es besteht aber auch die Möglichkeit, eigene Symbole in ArcView zu laden. Dazu betätigt man den Schalter „Laden“ (siehe Abbildung 19).

(33)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 33

Abbildung 20 Schalter in der Werkzeugleiste

Die nächste Abbildung zeigt das Dialogfenster, nachdem man ein neues Werkzeugmenü erzeugt hat.

Der „Cursor“ zeigt das Menü an. Mit dem Schalter „Werkzeug“ erzeugt man die gewünschten Schalter.

Abbildung 21 Erzeugen eines neuen Werkzeugmenüs

(34)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 34

Links vom aktuellen Schalter sind mehrere Werkzeugmenü eingetragen. Zu sehen sind die zusätzlichen Einträge für die drei Scripte:

Apply Click Update

Die Verknüpfungen mit dem Apply-Event und dem Klick-Event sind absolut notwendig.

Klick-Script: Diese Script wird aufgerufen, wenn der Anwender den Schalter betätigt. Meistens wird hier

Die Schalter auf der Toolleiste besitzen drei Scripte pro Schalter.

1) Script, wenn der Schalter angeklickt wird (Click).

2) Script, wenn im View die linke Maustaste geklickt wird (Apply).

3) Script, wenn die Funktion beendet wird (Update).

Beispiel Click-Script:

if ((av.GetSymbolWin.GetPanel = #SYMBOLWIN_PANEL_COLOR).not) then av.GetSymbolWin.SetPanel(#SYMBOLWIN_PANEL_PEN)

end

Quellcode 25 Click-Script

Beispiel Apply-Script:

theView = av.GetActiveDoc l = theView.ReturnUserLine

if (l.IsNull) then return nil

else

gl = GraphicShape.Make(l.AsPolyline) theView.GetGraphics.UnselectAll gl.SetSelected(TRUE)

theView.GetGraphics.Add(gl) av.GetProject.SetModified(true) end

Quellcode 26 Click-Script

(35)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 35

Beispiel Update-Script:

theView = av.GetActiveDoc

theTheme = theView.GetEditableTheme

if (theTheme = nil) then SELF.SetEnabled(TRUE) else

SELF.SetEnabled(FALSE) end

Quellcode 27 Update-Script

(36)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 36

5 Dateiein- und Ausgabe

5.1 Dateidialoge

Die Dateiein- und Ausgabe wird mittels der Klasse “FileDialog“ programmiert. Folgende Methoden stehen zur Verfügung:

Put ( defaultFileName, aPattern, FileWinTitle ) : FileName

ReturnFiles ( Patterns, Labels, aTitle, defaultPatternIndex ) : List

Show ( aPattern, aPatternLabel, FileTitle ) : FileName

Mit „Put“ kann eine Datei speichern.

Mit „ReturnFiles“ kann man als Anwender mehrere Dateien auswählen, die dann mittels Liste in Avenue abgefragt werden können.

Mit „Show“ kann man eine existierende Datei auswählen

5.1.1 Auswahl einer Datei zum Speichern

Mit dem folgendem Code wählt man eine Datei aus. Das Startverzeichnis ist das Temp-Verzeichnis.

' Erstellen einer Temporären Datei

aFilename = FileName.Make("$HOME").MakeTmp("shape","shp")

aFilenameNew = FileDialog.Put(aFilename,"*.shp","Ausgabe Shape Datei" ) if (aFilenameNew = nil) then

exit end

aFilenameNew.SetExtension("shp")

Msgbox.Info("Eingabedatei: "+ aFilenameNew.asString,"Auswahl")

5.1.2 Auswahl einer Datei zum Laden

Mit dem folgendem Code wählt man eine Datei aus. Das Startverzeichnis ist das Temp-Verzeichnis.

' Erstellen einer Temporären Datei

aFilenameInput = FileName.Make("$HOME").MakeTmp("shape","shp") aFilenameInput = FileDialog.Show(aFilenameInput.asString, "*.txt","Import einer Datei" )

if (aFilenameInput = nil) then exit

end

Msgbox.Info("Eingabedatei: "+ aFilenameInput.asString,"Auswahl")

(37)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 37

5.2 Schreiben und Lesen einer Datei

Befehle:

Öffnen einer Datei:

FHandle = LineFile.Make(theFile, #FILE_PERM_READ) Lesen einer Zeile:

sAnz = FHandle.ReadElt ' hier noch als String Lesen mehrerer Zeilen in einer Liste:

FHandle.Read ( aLineList, numLines ) Schreiben einer Zeile:

FHandle.WriteElt(Anz.asString) Schreiben mehrerer Zeilen in einer Liste:

FHandleWrite ( aLineList, numLines ) Dateikanal schließen:

FHandle.close

' Lesen einer kompletten Datei sFilename = "C:\daten\test.ave"

FHandle = TextFile.Make( sFilename.AsFileName, #FILE_PERM_READ ) sStr = FHandle.Read( FHandle.GetSize )

FHandle.Close

msgbox.report(sStr,"Inhalt der Datei: "+sFilename)

Dieses Beispiel benutzt einen Dialog zur Auswahl

aFilenameInput = FileDialog.Show("*.ave", "*.ave","Import einer Datei" ) if (aFilenameInput = nil) then

exit end

FHandle = TextFile.Make(aFilenameInput, #FILE_PERM_READ ) sStr = FHandle.Read( FHandle.GetSize )

FHandle.Close

msgbox.report(sStr,"Inhalt der Datei: "+aFilenameInput.asString)

(38)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 38

Dieses Beispiel benutzt einen Dialog mit mehreren Dateitypen zur Auswahl

Patterns = { "Textdatei (*.txt)", "Avenue Source (*.ave)", "Temporäre Dateien (*.tmp)" }

Labels= { "*.txt", "*.ave", "*.tmp"}

FilenameList = Filedialog.ReturnFiles ( Labels, Patterns, "Import von Dateien", 1)

' Das Ergebnis ist immer ein Objekt, nicht nil ! if (FilenameList.count=0) then

exit end

sStrMain=""

for each aFile in FilenameList

FHandle = TextFile.Make(aFile, #FILE_PERM_READ ) sStr = FHandle.Read( FHandle.GetSize )

FHandle.Close

sStrMain=sStrMain+"Dateiname: "+aFile.asString+NL+

"Inhalt:"+NL+sStr+NL+NL end

msgbox.report(sStrMain,"Inhalt der Dateien")

5.3 Beispiel für die Auswahl einer Datei und das Lesen Öffnen einer Datei und lesen der n-Zeilen in eine Liste.

Verwendet die Variable „Arbeitsverzeichnis. Wenn diese nicht gesetzt ist, theView = av.GetActiveDoc

' Holen des definierten Arbeitsverzeichnisses sPath = av.GetProject.GetWorkDir.AsString

' im Normalfall steht $Home, dann ist es das temporäre Verzeichnis if (sPath="$HOME") then

msgBox.info("Bitte geben Sie ein gültiges Arbeitsverzeichni sein", "Hinweis")

theProject = av.GetProject

newDir = MsgBox.Input( "Geben Sie ein neues Arbeitsverzeichnis an.", "Arbeitsverzeichnis", theProject.GetWorkDir.GetFullName)

if (newDir = nil) then return nil

elseif (newDir.AsFileName.IsDir.Not) then

MsgBox.Error( newDir.AsFileName.GetFullName++

"ist kein Verzeichnis", "")

elseif (File.IsWritable(newDir.AsFileName).Not) then MsgBox.Error( newDir.AsFileName.GetFullName+

+"ist schreibgeschützt", "")

(39)

Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung

Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 39

else

theProject.SetWorkDir( newDir.AsFileName ) end

exit ' eventuell auskommentieren end

sExt = "*.srt"

' Hier der Aufruf des Openfile-Dialogs theFile = FileDialog.Show(sExt,

"Sortierungs-Dateien",

"Laden einer Sortierungs-Dateien aus Themen") if (theFile = nil) then

exit ‘ Abbruch end

' Nun lesen die Anzahl der Einträge

FKan = LineFile.Make(theFile, #FILE_PERM_READ) sAnz = FKan.ReadElt ' hier noch als String

if (sAnz.isNumber.not) then

MsgBox.Info("Fehlerhafter Wert in der Anzahl der Themen","Fehler") exit

end

Anz = sAnz.asNumber ' hier die eigentliche Umwandlung Text -> Integer

liste = list.Make ' neue leere Liste for each i in 1..Anz

sThema = FKan.ReadElt ' Zeilenweise lesen liste.add(sThema) ' zur Liste hinzufügen end

FKan.close ' Dateikanal schließen

5.4 Beispiel Speichern aller sichtbaren Themen

theView = av.GetActiveDoc

' Holen des definierten Arbeitsverzeichnisses sPath = av.GetProject.GetWorkDir.AsString

' im Normal steht $Home, dann tempöräre Verzeichnis if (sPath="$HOME") then

msgBox.info("Bitte geben Sie ein gültiges Arbeitsverzeichni sein","Hinweis")

theProject = av.GetProject

newDir = MsgBox.Input( "Geben Sie ein neues Arbeitsverzeichnis an.",

"Arbeitsverzeichnis", theProject.GetWorkDir.GetFullName) if (newDir = nil) then

return nil

elseif (newDir.AsFileName.IsDir.Not) then

Abbildung

Abbildung 1  Module in ArcView
Abbildung 2   Beispiel eines Layouts
Abbildung 3  Beispiel des Moduls Scripte
Abbildung 4  Ergebnis der Berechnung (Kreisfläche)
+7

Referenzen

ÄHNLICHE DOKUMENTE

public int getColumnCount() { return AnzCols; } public int getRowCount() { return AnzRows; } public Object getValueAt(int row, int column) {.

writeInt (Schreiben einer 32-Bit Vorzeichenzahl) writeLong (Schreiben einer 64-Bit Vorzeichenzahl) writeShort (Schreiben einer 16-Bit Vorzeichenzahl) writeUTF (Schreiben eines

 Erzeugen Sie eine neue Klasse, abgeleitet von Label.  Die Default- und der String- Konstruktor dürfen nicht verwendet werden.  Entwickeln Sie einen neuen Konstruktor, der

Statt alle möglichen Eigenschaften in einer komplexen, anpassbaren Klasse vorherzusehen, wird eine einfache Klasse definiert und diese inkrementell mit.

Abbildung 22 Beispiel eines progress-Elementes in Firefox und IExplorer 23.. Abbildung 23 Beispiele mit den Datums- und Zeit-Elementen

Abs Returns the absolute value of a specified number. Acos Returns the angle whose cosine is the specified number. Asin Returns the angle whose sine is the specified number. Atan

FB Automatisierung und Informatik: Windows Presentation Foundation.. Window

FB Automatisierung und Informatik: Windows Presentation Foundation.. Window