Nun gut, dann fange ich doch mal ganz von vorne an, was ich so in Makro+ entdeckt habe. Die Helferlein sind anscheinend überschaubar. Es gibt da eine
Sprachreferenz, die als Nachschlagewerk taugt, außerdem verschiedene Krümchen zu dem Thema MakroPlus in der
GEOgraf Online-Hilfe und einige unkommentierte Beispielmakros der HHK (das sind die Entwickler von GEOgraf). Aber so ein grundlegendes "GGMakro+ für Dummies", wie ich es eigentlich bräuchte, habe ich eben noch nicht gefunden.
Vielleicht bekommen wir das hier ja gemeinsam hin.
Ich beginne mit einem winzig kleinen Code-Beispiel.
Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Macro Name="Erste Schritte - Minimalist">
<Form>
<Autosizepanel Caption="Vorhang auf" MaxControlsPerRow="1" Align="client" >
<Button Caption="Begrüßung" OnClick="acMakro1"/>
<Button Caption="Kommentar" OnClick="acMakro2"/>
</Autosizepanel>
<Action Name="acMakro1">@INFOMSG("Hallo!\n\nWillkommen bei\nMakro+.")</Action>
<Action Name="acMakro2">@INFOMSG("Gut!")</Action>
</Form>
</Macro>
Und so präsentiert sich dieses GGMakro+-Beispiel dann in der Makroleiste von GEOgraf:
.
Was macht das Makro?
Jede der Schaltflächen öffnet ein Dialogfenster, welches die weitere Bearbeitung des GEOgraf-Projektes blockiert, bis dieser Dialog geschlossen wird. Eigentlich ist es ein Monolog, denn der Anwender bekommt nur etwas mitgeteilt, er selbst kann damit nichts steuern. Es sollte eben einfach bleiben, dieses erste Beispiel.
Die Schaltfläche "Begrüßung" öffnet dieses Dialogfenster:
Die Schaltfläche "Kommentar" dieses:
.
Der Blick auf das Wesentliche
Zunächst zu den entscheidenden Zeilen, die dafür sorgen, dass dieses Makro überhaupt in Aktion treten kann: die Actions.
Code:
<Action Name="acMakro1">@INFOMSG("Hallo!\n\nWillkommen bei\nMakro+.")</Action>
<Action Name="acMakro2">@INFOMSG("Gut!")</Action>
Jede Action muss einen eigenen, in der ggmakro+-Datei eindeutigen Namen haben. Zwischen Start- und Endtag steht die eigentliche Makroanweisung, welche in GEOgraf ausgeführt wird. Hier ist es der Aufruf des vorgefertigeten Makro+-Informationsdialogs, in dem nur der Textinhalt frei festgelegt werden kann. Alle Makroplus-Befehle beginnen mit einem "@". Aber hier könnte statt des Dialog-Aufrufes genausogut eine Folge von Cmd-Befehlen aus dem Makro-Repertoire von GEOgraf stehen.
Damit die Actions ausgeführt werden, braucht es einen Auslöser. Den bieten in diesem Beispiel die zwei Schaltflächen, welche mit den folgenden beiden Zeilen definiert werden:
Code:
<Button Caption="Begrüßung" OnClick="acMakro1"/>
<Button Caption="Kommentar" OnClick="acMakro2"/>
Jede Schaltfläche, die beschriftet sein soll, benötigt einen Titel (Caption=). Schaltflächen können nur dann etwas bewirken, wenn ihnen Actions zugewiesen werden (OnClick=).
.
Der Blick auf das Drumherum
MakroPlus wird in Anlehnung an den XML-Standard strukturiert und daher soll jede ggmakro+-Datei mit dieser Zeile starten:
Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
Hierin etwas zu ändern ist nicht sinnvoll.
Diese beiden Zeilen kennzeichnen Beginn und Ende der Makrodefinition:
Code:
<Macro Name="Erste Schritte - Minimalist">
...
</Macro>
Mit </Macro> ist Schluss. Es ist nicht möglich, mehrere Macros in einer Datei zu definieren.
Zu der Namensgebung in der eröffnenden Zeile: ich habe nicht feststellen können, dass der Name des Makros an irgendeiner Stelle ausgewertet würde. Wer hier etwas einträgt, stellt bestenfalls den XML-Schematester zufrieden. Nun, ich vergaß, es taugt natürlich auch für einen selbst, der Name lässt sich auf jeden Fall nutzen für einige aussagekräftige Schlagworte, die beschreiben, wofür das Makro gut ist.
Diese beiden Zeilen kennzeichnen Beginn und Ende eines Bereichs, der die Darstellung von Steuerelementen verwaltet:
Code:
<Autosizepanel Caption="Vorhang auf" MaxControlsPerRow="1" Align="client" >
...
</Autosizepanel>
Es gibt verschiedene Panelsorten und auch einiges an Attributen, mit denen sich ihr Darstellungsverhalten steuern lässt. Für dieses Beispiel wurde das Autosizepanel gewählt, es stellt sich mit einer Überschrift (Caption=...) dar, ordnet alle enthaltenen Steuerelemente in einer einzigen Spalte untereinander an (MaxControlsPerRow="1") und orientiert sich selbst an seinem Elternelement (Align="client").
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP