Einsteigerprobleme

Fragen zum Thema InterRun
Antworten
Christian Hönnicke
Profi
Beiträge: 105
Registriert: Sa, 10 Feb, 2007 19:31

Einsteigerprobleme

Beitrag von Christian Hönnicke » Do, 14 Jun, 2007 21:32

Hallo,

irgendwie wirkt C einfacher als InterRun (bzw. die Doku ist ausführlicher).
Die Aufgabenstellung: Anzeige der Summe aller (Unter-)Konten unter "Transfer" und "Konten".
Grafikelemente: Beschriftung, Waehrungsfeld, Knopf.

Programmcode (der Versuch):

Procedure Knopf1_OnClick
| iteriere ueber alle "Geld"konten und addiere deren Bestand

Var i : Float
i = Account("Transfer").TotalBalance
i = Accounts("Konten").TotalBalance + i
Waehrungsfeld1.Value = i;
EndProcedure

Procedure Bericht1_OnOpenWindow(var CanOpen : Boolean)
CanOpen = true
Knopf1_OnClick()
EndProcedure

Wie müssten die Funktionen korrekterweise aussehen?

Was mir weiterhin aufgefallen ist:
1.) Die Links der Dokumentation von InterRun sind teilweise ungültig - beispielsweise die meisten Beispiele unter "Variablen".
2.) Warum wird für TotalBalance als Rückgabewert "Float" angegeben, wenn es diesen laut Dokumentation garnicht gibt?
3.) Laut Kontextmenü kann man deaktivierte Methoden aktivieren sowie aktivierte Methoden.

Wenn möglich hätte ich auch noch ein Beispiel man Graphen zeichnet (bsp. Sinuskurve). Auch dort ist die Dokumentation schlecht (nicht) erreichbar.

Gruß
Christian

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Sa, 16 Jun, 2007 6:18

Hallo Christian,

ja, Du hast Recht, die Doku über InterRun ist recht dürftig und wir haben leider kaum Zeit, diese zu verbessern. Aber ein freies Wochenende wird kommen...
Außerdem erhalten wir bald Verstärkung und dann sieht alles viel besser aus.

var i : Float

muss lauten

var i : Double

Die Deklaration Float wird aber ab dem nächsten Update mit unterstützt.

Das Semikolon bei Waehrungsfeld1.Value = i; muss weg, dann sollte es gehen.
Einfacher wäre allerdings die Schreibweise:
Waehrungsfeld1.Value = Account("Transfer").TotalBalance + Accounts("Konten").TotalBalance

Knopf1_OnClick() geht so nicht, da es sich hier um eine Ereignisbehandlungsroutine handelt, die nur von EuroKass und nicht von Außen aufgerufen werden kann. Verwende lieber die Autofunktion von Waehrungsfeld1 zur obigen Berechnung und im OnClick-Ereignis eines Schalters schreibst Du dann Frame.Refresh.

Punkt 3 verstehe ich nicht.

Grafikbefehle werden über die Windows-API-Funktionen gezeichnet. Hier ein Beispiel für eine Linie auf einem Panel (Flaeche):

Procedure Schalter1_OnClick
Var DC : Integer
Dc = GetDc(Flaeche1.Handle)
Line(Dc,2,2,30,30, Rgb(50,100,100),1,0)
Line(Dc,30,30,70,2,Rgb(255,100,100),1,0)
ReleaseDc(Flaeche1.Handle,Dc)
EndProcedure

Gruß,
Dirk Schauries
Team Schauries

Christian Hönnicke
Profi
Beiträge: 105
Registriert: Sa, 10 Feb, 2007 19:31

Beitrag von Christian Hönnicke » So, 17 Jun, 2007 10:00

Hallo,

zu 3.) Einzelne Funktionen kann man per Kontextmenü deaktivieren bzw. aktivieren. Das Kontextmenü wird dabei nicht aktualisiert, sondern es steht jedesmal "Programm aktivieren" da.

4.) Ebenfalls gibt es im Kontextmenü einen Punkt "Alle anzeigen". Warum wird damit der Baum zusammengeklappt?

5.) Welche Bedeutung haben haben einzelne fettgeschriebene Methoden und wie bekomme ich diese wieder normalgeschrieben?

> Verwende lieber die Autofunktion von Waehrungsfeld1 zur obigen Berechnung und im OnClick-Ereignis eines Schalters schreibst Du dann Frame.Refresh.

6.) Was ist die "Autofunktion" ?

7.) Ich habe die Zeile "Waehrungsfeld1.Value = Account("Transfer").TotalBalance + Accounts("Konten").TotalBalance" in die Bericht1_OnRefresh() eingefügt. In Knopf1_OnClick habe ich die Zeile "Frame.Refresh" eingefügt. Leider wird das Währungsfeld nicht aktualisiert. Was fehlt noch?

8.) Was ist eigentlich der Unterschied zwischen "Single" und "Float"?

Gruß
Christian

Christian Hönnicke
Profi
Beiträge: 105
Registriert: Sa, 10 Feb, 2007 19:31

Beitrag von Christian Hönnicke » So, 17 Jun, 2007 10:31

Hallo,

9.) Warum darf ich im Formulareditor eigentlich nicht scrollbare Bilder im Nachhinein nicht mehr in der Größe ändern?

Gruß
Christian

Christian Hönnicke
Profi
Beiträge: 105
Registriert: Sa, 10 Feb, 2007 19:31

Beitrag von Christian Hönnicke » So, 17 Jun, 2007 11:47

Hallo Dirk,

vielen Dank für deine Hilfe, aber irgendwie stell ich mich zu blöde an. Ich wollte mal wieder meine Kenntnisse über Lineare Regression (Minimale-Quadrate) auf Vordermann bringen. Aber irgendwie tue ich mich mit InterRun sehr schwer.

Also, ich brauche den Kontostand eines Kontos (Edit-Conrol?) für einen vorgegebenen Zeitraum (zwei Datumsfelder) an jeden einzelnen Tag. Dann bräuchte ich ich noch Min/Max/Mittelwert. Ebenfalls bräuchte ich die Größe der Fläche auf der alles dargestellt wird, damit die Grafik sinnvoll skaliert werden kann. Anschließend müssen die müssen alle Punkte in die Fläche eingezeichnet werden.

Ich denke, danach komme ich wieder alleine klar.

Vielen Dank für die Hilfe.

Gruß
Christian

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » So, 17 Jun, 2007 12:49

Hallo Christian,

zu 3.
im Kontextmenü müsste aber das Image bei Aktivierung „vertieft“ dargestellt werden. Wenn nicht, bitte Bescheid geben.

zu 4.
Weil er sich die geöffneten Knoten nicht merkt sondern die ganze Liste neu einliest. Das zu speichern ist sehr aufwändig.

zu 6.
Alle Komponenten eines Berichts haben eine Autofunktion – rechte Maustaste, „Auto-Funktion“. Diese wird beim Öffnen und Aktualisieren eines Berichts ausgeführt.

zu 7.
So ist es eigentlich richtig. Ich werde das überprüfen.

zu 8.
Single ist intern 4 und Double 8 Byte groß. In EuroKass wird aber grundsätzlich in Double gerechnet. Dient also nur der Abwärtskompatibilität.

zu 9.
Vielen Dank für den Tipp! Das ist ein Bug. Mit Strg + Pfeiltasten geht es zwar aber die Mauszeiger verweigern ihren Dienst. Danke, wird behoben.

zur Grafik melde ich mich später wieder...

Gruß,
Dirk Schauries
Team Schauries

Christian Hönnicke
Profi
Beiträge: 105
Registriert: Sa, 10 Feb, 2007 19:31

Beitrag von Christian Hönnicke » Mo, 18 Jun, 2007 22:25

Hallo Dirk,

(Achso ich bin mit 5.9.6.0 unterwegs. Das Liveupdate kommt immernoch nicht durch die Firewall.)

zu 3.
Ja, wenn man sehr genau hinschaut, dann kann man die "Vertiefung" erkennen. Irgendwie... naja ... ungünstig umgesetzt.

zu 4.
Ich war nur eine ganze Weile am Rätseln, welche Funktion(en) sich hinter "alles anzeigen" und "verbergen" verbirgt. Besonders, da beide im ersten Moment den Baum zusammenklappen.

zu 6.
So lange "Auto-Funktion" gleich dem "OnRefresh" entspricht, bin ich glücklich ;-). Wobei ich sagen muss, dass ich so meine Schwierigkeiten mit dem ganzen Programmiercenter & Berichtdesigner habe... irgendwie nicht sonderlich intuitiv benannt bzw. zu bedienen.

zu 8.
*hm* und wozu dann noch zusätzlich Float? Ich gehe mal davon aus, dass Single und Double Fließkommazahlen sind.

10.
Zu den einzelnen Funktionen habe ich im Kontextmenü den Eintrag "Beispiel". Da bekomme ich nur die Fehlermeldung, dass er die zugehörigen Textdateien nicht finden kann.

11.
Es gibt im Eigenschaften-Editor noch einen (leider nicht reproduzierbaren) Bug, wenn man auf den Reiter Komponenten geht, wo es zu einer Zugriffsverletzungsschleife kommt. Da kann man den ganzen Abend die Messageboxen zu machen.

12.
Warum darf ich im Eigenschaften-Editor unter dem Reiter Ereignisse den Programmtext editieren/löschen, aber nach dem Bestätigen mit "Enter" wird das ursprüngliche Programm wieder angezeigt?

13. Ich weiß, nicht sonderlich sinnvoll:
Var RangeDays : String
RangeDays = Datumsfeld2.Date - Datumsfeld1.Date
Msg( RangeDays )
Ergibt einen sehr schönen Hänger.

> zur Grafik melde ich mich später wieder...
(und siehe 13)

Ich harre dann mal der Dinge, die da noch kommen werden. 8)

Gruß
Christian

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Di, 19 Jun, 2007 22:14

Hallo Christian,

>>Das Liveupdate kommt immer noch nicht durch die Firewall.
Ändere in EK im Bereich LiveUpdate die Proxyeinstellungen, dann sollte es gehen.

zu 3.
>>Ja, wenn man sehr genau hinschaut, dann kann man die "Vertiefung" erkennen.
>>Irgendwie... naja ... ungünstig umgesetzt.
Ok, werden wir ändern in „aktivieren/deaktivieren“

zu 6.
>>So lange "Auto-Funktion" gleich dem "OnRefresh" entspricht, bin ich glücklich .
>>Wobei ich sagen muss, dass ich so meine Schwierigkeiten mit dem ganzen
>>Programmiercenter & Berichtdesigner habe... irgendwie nicht sonderlich intuitiv benannt
>>bzw. zu bedienen.
Ja, das Handling wurde schon öfter bemängelt. Wir überlegen mal...

zu 8.
>>*hm* und wozu dann noch zusätzlich Float? Ich gehe mal davon aus, dass Single und
>>Double Fließkommazahlen sind.
Genau, beide werden als 8-Byte große Fließkommazahlen behandelt.
Float, Single oder Extended... das ist historisch gewachsen. Wir wollen es dem Anwender halt leicht machen.

zu 10.
>>Zu den einzelnen Funktionen habe ich im Kontextmenü den Eintrag "Beispiel".
>>Da bekomme ich nur die Fehlermeldung, dass er die zugehörigen Textdateien nicht finden
>>kann.
Wie gesagt, beim nächsten freien Wochenende wird nachgearbeitet.

zu 11.
>>Es gibt im Eigenschaften-Editor noch einen (leider nicht reproduzierbaren) Bug,
>>wenn man auf den Reiter Komponenten geht, wo es zu einer Zugriffsverletzungsschleife
>>kommt. Da kann man den ganzen Abend die Messageboxen zu machen.
Das hört sich schlecht an. Ich werde das überprüfen. Danke für den Hinweis!!!

zu 12.
>>Warum darf ich im Eigenschaften-Editor unter dem Reiter Ereignisse den Programmtext
>>editieren/löschen, aber nach dem Bestätigen mit "Enter" wird das ursprüngliche Programm
>>wieder angezeigt?
Weil ich sonst keine Möglichkeit habe, den Text einer Zelle in die Zwischenablage zu kopieren.
F2, Strg + C und schwup, hab ich den Inhalt kopiert. Das gilt für fast alle Listen.
Ist die Zelle nicht im Editmodus, wird bei Strg + C in der Regel die ganze Zeile in die Zwischenablage kopiert.

zu 13.
>>Ich weiß, nicht sonderlich sinnvoll:
>>Var RangeDays : String
>>RangeDays = Datumsfeld2.Date - Datumsfeld1.Date
>>Msg( RangeDays )
>>Ergibt einen sehr schönen Hänger.
Vielen Dank für den Hinweis!!! Da muss ich ein Wörtchen mit dem Interpreter reden.
Bedenke nur, dass „Datumsfeld2.Date - Datumsfeld1.Date“ eh nicht geht, da es sich hier um String- und nicht um Double-Variablen handelt.

Versuche mal folgendes:

Procedure Schalter1_OnClick

var DC : Integer | Device Context des GDI merken
var RunDate : String | Laufdatum für die Kontostände
var S1,S2 : String | Hilfsvariablen
var I : Integer | Hilfsvariable
var Balance : Double | Kontostand merken
var MinBalance, MaxBalance : Double | Min- und Maxwerte der Kontostände
var Steps : Integer | Anzahl Messwerte

| prüfe, ob die Eingaben evtl. vertauscht sind
if DateToFloat(Datumsfeld1.Date) < DateToFloat(Datumsfeld2.Date)
s1 = Datumsfeld1.Date
s2 = Datumsfeld2.Date
EndIf
else
s1 = Datumsfeld2.Date
s2 = Datumsfeld1.Date
EndElse

| dreht es sich nur um einen Tag dann abbrechen
if s1 = s2
Sm('Datumsbereich zu klein')
exit
EndIf

MinBalance = 100000
MaxBalance = -100000
Steps = DateDiff(s1,s2) + 1

RunDate = s1
for i = 1 to Steps
Balance = Account("Familie").TotalBalance(RunDate)

if Balance < MinBalance
MinBalance = Balance
EndIf

if Balance > MaxBalance
MaxBalance = Balance
EndIf

ShowMessage(FloatToStr(Balance)) |zum testen... später löschen
RunDate = AddDays(RunDate,1)
Next

Dc = Bild1.Dc | DC merken

| und jetzt die Zeichenroutine basteln
|...

| Linien zeichnen man mit...
| Line(Dc,2,2,30,30,Rgb(50,100,100),1,0)


| wurde alles gezeichnet, dann refreshen...
Bild1.Refresh

EndProcedure

Viel Spaß

Dirk Schauries
Team Schauries

Christian Hönnicke
Profi
Beiträge: 105
Registriert: Sa, 10 Feb, 2007 19:31

Beitrag von Christian Hönnicke » Do, 21 Jun, 2007 22:15

Hallo Dirk,

zu 10.
>>Zu den einzelnen Funktionen habe ich im Kontextmenü den Eintrag "Beispiel".
>>Da bekomme ich nur die Fehlermeldung, dass er die zugehörigen Textdateien nicht finden kann.

>Wie gesagt, beim nächsten freien Wochenende wird nachgearbeitet.

Achtung, es gibt zwei Baustellen. Einmal die Dokumentation unter www.interRun.de (da gibt es viele ungültige Links) UND irgendwelche Hilfetext in Eurokass (Kontextmenü).

zu 12.
>>Warum darf ich im Eigenschaften-Editor unter dem Reiter Ereignisse den Programmtext editieren/löschen, aber nach dem Bestätigen mit "Enter" wird das ursprüngliche Programm wieder angezeigt?

>Weil ich sonst keine Möglichkeit habe, den Text einer Zelle in die Zwischenablage zu kopieren.
F2, Strg + C und schwup, hab ich den Inhalt kopiert. Das gilt für fast alle Listen.
>Ist die Zelle nicht im Editmodus, wird bei Strg + C in der Regel die ganze Zeile in die Zwischenablage kopiert.

Und ich hatte schon die Hoffnung gehabt, schnell mal kleine Änderungen vornehmen zu können. Wenn schon Editormodus, dann will ich auch was editor können ;-).

13.
Ellipse( Dc, XPunkt-5, YPunkt-5, XPunkt+5, YPunkt+5, RGB( 50, 100, 100 ), RGB( 50, 100 , 100 ) )
malt alles, nur keine Kreise.

Vielen Dank für das Beispiel. Das hat viel geholfen. Ein Problem habe ich noch nicht lösen können (neben dem Ellipse die kein Kreis werden will). Wie kann ich elegant Variablen global speichern. Ziel ist es, mit per Knopf A die Funktion zu berechnen nun per Knopf B einen beliebigen Funktionswert zu der berechneten Funktion zu berechnen.

Gruß
Christian

Christian Hönnicke
Profi
Beiträge: 105
Registriert: Sa, 10 Feb, 2007 19:31

Beitrag von Christian Hönnicke » Do, 21 Jun, 2007 22:21

Entschuldigung für die ganzen Rechtschreib-/Grammatikfehler. Ich sollte so spät doch mal den Vorschauknopf nutzen und die Texte zweimal querlesen.
Besteht nicht die Möglichkeit in der Forumssoftware das nächträgliche Editieren (eines neuen Eintrages) zu erlauben?

Gruß
Christian

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Fr, 22 Jun, 2007 21:39

Hallo Christian,

schreibe Deine Beiträge zunächst in einer Textverarbeitung mit Rechtschreibprüfung und kopiere dann alles über die Zwischenablage in den Forumeditor.
Wir möchten diese Option nicht freigeben, da sonst bereits geschriebene Beiträge nachträglich für eigene Zwecke abgeändert werden könnten, ohne, dass wir das mitbekommen.
Ist alles schon passiert, leider.

Zum Punkt 13 weis ich im Moment keinen Rat. Meine Ellipsen sind kreisrund. Liegt es an der Bildschirmauflösung? Muss diese berücksichtig werden?

Gruß,
Dirk Schauries
Team Schauries

Christian Hönnicke
Profi
Beiträge: 105
Registriert: Sa, 10 Feb, 2007 19:31

Beitrag von Christian Hönnicke » Sa, 23 Jun, 2007 10:58

Hallo Dirk,

zu 13.
der gleiche Fehler tritt bei mir auch mit Rectangle auf. Die zweite Y-Koordinate scheint nach dem ersten Zeichnen nicht mehr aktualisiert zu werden.
For X = 1 To 10
XPunkt = X * 10
YPunkt = Y * 20
Rectangle( Dc, XPunkt-5, YPunkt+5, XPunkt+5, YPunkt-5, RGB( 50, 100 , 100 ), RGB( 50, 100 , 100 ) )
Next


Gibt es bei Eurokass/Interrun eigentlich die Möglichkeit eigene Prozeduren zu schreiben/nutzen?

Wie kann ich global Variablen definieren? Den Weg über Währungsfelder finde ich nicht sonderlich toll, außerdem schneiden diese Fließkommazahlen nach der zweiten Stelle ab.

Gruß
Christian

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Sa, 23 Jun, 2007 11:47

Hallo Christian,

in Deiner For-Schleife wird Y nicht verändert, daher verändert sich auch YPunkt nicht.

Prozeduren platziert man entweder im Modul, dann sind sie von überall aus aufrufbar oder lokal, dann ist deren Sichtbarkeit bewusst eingeschränkt.

Ein Beispeil:

Procedure DrawMyLine(Dc : Integer; X1,Y1,X2,Y2 : Integer; Color : Integer)
Line(Dc,X1,Y1,X2,Y2,Color)
EndProcedure

Aufruf:

Procedure Schalter1_OnClick
DrawMyLine(Bild1.DC,1,1,100,100,Rgb(200,10,50))
EndProcedure

Variablen können ebenfalls global im Modul gespeichert werden.

In EuroKass gibt es zum einen das EuroKass-Modul, welches über die gesamte Laufzeit und für alle Kassenbücher Gültigkeit hat und zum anderen das Kassenbuch-Modul, welches innerhalb des Kassenbuchs gespeichert wird und somit auch transportabel ist.

Gruß,
Dirk Schauries
Team Schauries

Christian Hönnicke
Profi
Beiträge: 105
Registriert: Sa, 10 Feb, 2007 19:31

Beitrag von Christian Hönnicke » Mi, 27 Jun, 2007 19:43

Hallo Dirk,

> in Deiner For-Schleife wird Y nicht verändert, daher verändert sich auch YPunkt nicht.

Tippfehler. Sollte heißen: YPunkt = X * 20 ändert aber nichts an dem Problem, dass er nur mit Tricks Quadrate/Kreise zeichnet.


Folgende Variablendefinition:
Var i : Integer

Warum kann "i" zur Laufzeit auch Double/Float/Single sein? Ich habe mich bei einigen Berechnungen gewundert, warum plötzlich ungenaue Zahlen kamen. SM(inttostr(i)) brachte immer den gewünschten Wert zum Vorschein, aber erst SM(floattostr(i)) offenbarte den genauen Wert, womit sich dann auch die Abweichungen/Fehler erklärten.

Gruß
Christian

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Mi, 27 Jun, 2007 22:11

Hallo Christian,

ok, das geht nicht. Werde das Thema InterRun erneut aufgreifen aber erst nach dem Sommerurlaub, einverstanden?

Gruß,
Dirk Schauries
Team Schauries

Christian Hönnicke
Profi
Beiträge: 105
Registriert: Sa, 10 Feb, 2007 19:31

Beitrag von Christian Hönnicke » Do, 28 Jun, 2007 20:29

Hi,

neues für die ToDo-Liste nach dem Sommerurlaub.

Der Parser hat es nicht so mit Punkt vor Strichrechnung....

YPunkt = Hoehe - (( m1 * ( X * XNext ) + n1 ) * YOff)

ist ungleich

YPunkt = Hoehe - ( m1 * ( X * XNext ) + n1 ) * YOff

Gruß
Christian

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Do, 28 Jun, 2007 20:48

Hallo Christian,

der Parser kann nicht Punkt vor Strichrechnung. Das wird auch „irgendwo“ geschildert.
Da es sich hier um einen Parser und nicht um einen Compiler handelt, hatten wir uns vor gut zwanzig Jahren dazu entschlossen, auf Binärbäume zu verzichten. Es macht zeitlich gesehen einen großen Unterschied, ob ich eine Funktion von links nach rechts einfach durchparse oder zunächst einen Rechenbaum aufbaue und dann analysiere.
Durch entsprechende Klammersetzung lässt sich das Problem aber umgehen, man muss es nur wissen.
Man sieht deutlich, wir haben viel zu wenig Zeit für EuroKass aber wie bereits erwähnt, wird sich das bald ändern.

Gruß,
Dirk Schauries
Team Schauries

Antworten