Hallo Marino,

eins vorweg: ich bin ebensowenig "Softwareentwickler" wie wohl die meisten in 
dieser Liste auch. Deshalb schreibe ich nur Erläuterungen in das, was ich 
zusammenstelle, wenn ich selbst befürchte, das eventuell nicht mehr zu 
kapieren, wenn ich bei einem Fehler oder einem Verbesserungsversuch später 
Änderungen vornehmen will.

Wenn ich etwas erarbeite, was ich von vornherein auch für andere plane, dann 
sieht das natürlich anders aus.

Das untenstehende Makro ist vor diesem Hintergrund so natürlich nicht als 
Lehrbeispiel vorgesehen ...


Folgendermaßen sieht das bei mir komplett aus, wobei ich im Moment überlege, 
ob das so auch sinnvoll ist:

Die Variablen werden global definiert, indem sie nicht in einem SUB stehen:

REM Alle Variablen, die mit "o" beginnen haben den Typ "OBJECT" 
REM Alle Variablen, die mit "in" beginnen haben den Typ "INTEGER" (Ganzzahlen)
REM Alle Variablen, die mit "do" beginnen haben den Typ "DOUBLE"  
(Dezimalzahlen)

DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT
DIM oForm AS OBJECT
DIM oFeld AS OBJECT
DIM inSkonto AS INTEGER
DIM doMWSt AS DOUBLE
DIM doPreis AS DOUBLE
DIM doBrutto AS DOUBLE

SUB Brutto
        REM Der Bruttobetrag wird aus den Einträgen in verschiedene 
Formularfelder ermittelt und in ein eigenes Formularfeld geschrieben.
        oDoc=thisComponent              'Zugriff auf das Writerdokument, das 
das 
Formular beinhaltet
        oDrawpage=oDoc.drawpage 'Zugriff auf die Oberfläche, auf der die 
Formularelemente liegen
        oForm=oDrawpage.forms.getByName("Artikel")      'Zugriff auf das 
Formular, 
das den Namen "Artikel" hat
        oFeld=oForm.getByName("Brutto") 'Zugriff auf das Formularfeld 
"Brutto" des Formulares "Artikel"
REM Die folgenden Felder liegen ebenfalls in dem Formular "Artikel", wie an 
dem Bezug "oForm" zu erkennen.
REM Da die Felder sonst nicht im Laufe der SUB-Routine benutzt werden sollen, 
wird direkt der Wert ausgelesen.
        inSkonto = oForm.getByName("Skonto").CurrentValue
        doMWSt = oForm.getByName("MWSt").CurrentValue
        doPreis =oForm.getByName("Preis").CurrentValue
REM Berechnung des Bruttopreises aus den obigen Werten
        doBrutto = doPreis + doPreis * doMWSt / 100 - (doPreis + doPreis * 
doMWSt / 100) * inSkonto / 100
        oFeld.BoundField.updateDouble(doBrutto) 'Der Bruttowert wird in das 
dafür vorgesehene Feld übertragen
        E_Preis_Brutto 'Hier wird eine weitere Prozedur aufgerufen, in der der 
Bruttowert auf den Wert für ein einzelnes Teil heruntergerechnet wird ...
END SUB

> 
> Was mir bei dieser Programmierung nicht ganz klar ist:
> 
> Bei meine Basic- Programmen, die ich erstelle, ist es für mich Gesetz,
> alles was mehrfach benutzt wird in einer Sub anzulegen.
> Was Du in Deinem Beispiel ja auch tust.
> 
> *Nur - wie übergibst Du die Parameter?*

Was in einer SUB-Prozedur liegt ist auch nur dort als Variable vorhanden. 
Deklariere ich die Variablen am Anfang eines Moduls, so gelten sie für die 
ganze Bibliothek. Das kann auch mit dem Begriff "PUBLIC" statt "DIM" deutlich 
gemacht werden.

Das wird dann mit der Zeit allerdings recht unübersichtlich. Ich suche mir 
manchmal einen Ast nach bereits deklarierten Variablen. Deshalb überlege ich, 
nur die fast ununterbrochen benutzten Variablen direkt am Anfang eines Moduls 
zu definieren. Dies wären von den obigen Variablen

DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT
DIM oForm AS OBJECT
DIM oFeld AS OBJECT


Wenn Du von einer Prozedur zur anderen etwas übergeben willst, so musst Du das 
beim Aufruf der zweiten Prozedur tun:

SUB Prozedur
        ZweiteProzedur("Wert1","Wert2")
END SUB

SUB ZweiteProzedur(Wert1 AS STRING, Wert2 AS INTEGER)
        tu dies und das mit Wert1 und Wert2
END SUB

Nur eine Funktion wie

FUNCTION Funktion1
        Funktion1 = 3
END FUNCTION

übergibt einen Wert an die aufrufende Instanz zurück.

Gruß

Robert




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@de.openoffice.org
For additional commands, e-mail: users-h...@de.openoffice.org

Antwort per Email an