Jump to content


Photo
- - - - -

Free Pascal


Wichtiger Hinweis für Besucher der Community!

Das Erstellungsdatum des von Dir aufgerufenen Themas liegt bereits einige Zeit zurück. Wir möchten darauf hinweisen, den Inhalt der Diskussion auf seine Aktualität hin zu prüfen. Weitere Informationen findest Du auf dieser Seite.

  • Please log in to reply
59 replies to this topic

#41 Mythos

Mythos

    TEFEx CEO

  • Moderatoren
  • 3,478 posts
  • 16699 thanks

Posted 16 February 2012 - 10:12 PM

ich möchte mir mal eine OO-Programmiersprache aneignen und da ist C/C++ einfach zu kompliziert


Dann vermute ich mal das Java auch nicht unbedingt dein Freund ist oder? Wäre auch Plattformunabhängig und recht einfach in der GUI-Erzeugung (zumindest im Gegensatz zu C), dafür hab ich noch nie gesehen das man mit Java DLLs schreiben könnte... :moveaway: .

über eine Datei zu gehen wäre möglich - ich möchte aber die Techniken rund um DLL/Gui/Applikation... verstehen, nutzen und lernen, verstehen, lernen, verstehen...


Ich glaub ich hab da was falsch verstanden: Du willst also nicht eine DLL machen die für die Datenübertragung zur einer GUI-Applikation verantwortlich ist, sondern eine DLL, die selber eine GUI macht?
Sprich die GUI wird aus dem MT heraus erzeugt und damit "direkt" mit Daten gefüttert...

Also wenn du GUI und OO lernen willst, würd ich erstmal eine standalone GUI bauen die alles erfüllt was deine DLL-GUI soll. Die GUI hat dann vermutlich eine init (in C und so die "main") und eine Funktion die sie mit Daten füttert (die kannst im Standalone ja zu testzwecken einfach in zufälligen Abständen aufrufen).
Wenn das läuft, packst du es in eine DLL, rufst die 2 Funktionen von MT aus auf und fertig.

Ich kenn mich jetzt mit DLLs nit so aus, aber ich wär mir nit sicher wie einwandfrei das alles (vor allem die GUI) direkt aus der DLL heraus läuft. Deswegen würd ichs Schritt für Schritt machen, sonst kämpfst du gegen 3 Windmühlen gleichzeitig.
  • 0

Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.

Einstein


Es ist nicht deine Schuld, das die Welt ist wie sie ist. Es wär nur deine Schuld wenn sie so bleibt.


Thanked by 3 Members:
Der Wolf , Vola , RAiNWORM

#42 RAiNWORM

RAiNWORM

    Floor Broker

  • Developer
  • 909 posts
  • 6489 thanks
  • Wohnsitz:NRW

Posted 16 February 2012 - 10:17 PM

Du willst also nicht eine DLL machen die für die Datenübertragung zur einer GUI-Applikation verantwortlich ist, sondern eine DLL, die selber eine GUI macht?
Sprich die GUI wird aus dem MT heraus erzeugt und damit "direkt" mit Daten gefüttert...

Ich habe es bislang noch nicht geschafft, eine GUI als DLL direkt in MT4 einzubinden. Stattdessen muss die DLL die Kommunikationsschnittstelle zwischen MT4 und der GUI bilden. Das funktioniert dann auf jeden Fall. Der Datenaustausch könnte dann über lokale Speicherbereiche, Files oder TCP/IP erfolgen. Ich hatte mich für TCP/IP entschieden, da ich dann die GUI "sonst wo" hinlegen kann.
  • 0
Wer in die Fußstapfen eines anderen Tritt, wird niemals überholen...

Thanked by 5 Members:
Der Wolf , Mythos , WOGO , oldschuren , Vola

#43 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 16 February 2012 - 10:53 PM

ich hatte sogar eine Version wo die DLL eine GUI aufgemacht hat!! ABER die Daten wurden nur dann in das Memo geschrieben, wenn ich das Fenster geschlossen habe.
Ich habe dann diese Version ad akta gelegt und konzentriere mich jetzt auf die Variante wie oben von euch beschrieben. Ich dachte das wäre einfacher, aber Pusteblume - der (MT4) schreibt seine Daten schön in eine Datei - über meine DLL - in meiner GUI kommt aber nichts an.
Ich fische wahrscheinlich mit meiner GUI in einem Gebiet des Speichers wo sich die DLL kaputt lacht - d.h. die spielt mit mir blinde Kuh. :cow:

@Mythos: Java wäre zwar auch eine Option - habe mich aber jetzt für Freepascal entschieden. Der Nachteil bei Java ist ja, daß dort ein Interpreter gebraucht wir, genauso wie bei C# - hatte ich nämlich auch überlegt.
  • 0

Thanked by 3 Members:
RAiNWORM , Der Wolf , Vola

#44 Mythos

Mythos

    TEFEx CEO

  • Moderatoren
  • 3,478 posts
  • 16699 thanks

Posted 17 February 2012 - 08:51 AM

ich hatte sogar eine Version wo die DLL eine GUI aufgemacht hat!! ABER die Daten wurden nur dann in das Memo geschrieben, wenn ich das Fenster geschlossen habe.

Is jetzt ein Schuss ins Blaue, aber wird die GUI von der DLL "neu gezeichnet"? Ich hatte schon so Probleme, das die Daten und alles im Hintergrund theoretisch da waren, aber niemand der Oberfläche gesagt hat, das sie die Anzeige aktualisieren sollte. Normalerweise wird sie ja nur neu gezeichnet wenn es "notwendig" ist. Ich könnte mir vorstellen das beim schließen des Fensters ein solcher repaint automatisch passiert, bei deinem eigenen Memo aber nicht. Schonmal versucht die GUI bewegen (also das Fenster mit der Maus) oder Größe ändern? Das forciert normalerweise auch einen repaint.

Ich fische wahrscheinlich mit meiner GUI in einem Gebiet des Speichers wo sich die DLL kaputt lacht - d.h. die spielt mit mir blinde Kuh. :cow:


Naja, wenn du die Infos über eine Datei machst, ist der Speicherbereich ja vorgegeben. Kann es sein das tu die Datei beim lesen nicht neu öffnest/aktualisierst? und er deswegen nur die leere Datei sieht?
Hat es schonmal geklappt Inhalte aus einer Datei zu lesen?

(Also wenn der Code von dir reicht um in Pascal eine GUI zu erstellen, ist es wirklich ziemlich einfach ;)

@Java: Inwiefern ist das ein Hinderniss? Java hast du auf deinem PC sicher installiert. Wie gesagt DLL wird schwer, aber die klingt ja schon fertig ;)
  • 0

Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.

Einstein


Es ist nicht deine Schuld, das die Welt ist wie sie ist. Es wär nur deine Schuld wenn sie so bleibt.


Thanked by 3 Members:
Der Wolf , RAiNWORM , Vola

#45 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 17 February 2012 - 06:04 PM

Is jetzt ein Schuss ins Blaue, aber wird die GUI von der DLL "neu gezeichnet"? Ich hatte schon so Probleme, das die Daten und alles im Hintergrund theoretisch da waren, aber niemand der Oberfläche gesagt hat, das sie die Anzeige aktualisieren sollte. Normalerweise wird sie ja nur neu gezeichnet wenn es "notwendig" ist. Ich könnte mir vorstellen das beim schließen des Fensters ein solcher repaint automatisch passiert, bei deinem eigenen Memo aber nicht. Schonmal versucht die GUI bewegen (also das Fenster mit der Maus) oder Größe ändern? Das forciert normalerweise auch einen repaint.

Naja, wenn du die Infos über eine Datei machst, ist der Speicherbereich ja vorgegeben. Kann es sein das tu die Datei beim lesen nicht neu öffnest/aktualisierst? und er deswegen nur die leere Datei sieht?
Hat es schonmal geklappt Inhalte aus einer Datei zu lesen?

(Also wenn der Code von dir reicht um in Pascal eine GUI zu erstellen, ist es wirklich ziemlich einfach ;)

das Schreiben der Datei ist nur die Kontrolle das die Daten auch ankommen - ich lese die Datei nicht wieder ein - die Daten sollen direkt an die GUI gesendet werden

@Java: Inwiefern ist das ein Hinderniss? Java hast du auf deinem PC sicher installiert. Wie gesagt DLL wird schwer, aber die klingt ja schon fertig ;)


ich konzentriere mich jetzt nur noch auf FreePascal - ich habe von beiden bisher keine Ahnung und von daher ist es egal

Ich habe noch einmal 1 Beispiel angehangen...

Attached Files


  • 0

Thanked by 3 Members:
Vola , Der Wolf , RAiNWORM

#46 Mythos

Mythos

    TEFEx CEO

  • Moderatoren
  • 3,478 posts
  • 16699 thanks

Posted 17 February 2012 - 09:32 PM

das Schreiben der Datei ist nur die Kontrolle das die Daten auch ankommen - ich lese die Datei nicht wieder ein - die Daten sollen direkt an die GUI gesendet werden


Ok, irgendwas versteh ich nicht. Was machst du derzeit?

Ich hab gedacht die Version wo die GUI direkt von der DLL erzeugt wird, ist nicht mehr aktuell...
Wie passiert bei dir derzeit die Datenübertragung von DLL zu GUI? Weil wenn die GUI nicht direkt von der DLL erzeugt wird, is es ja eine eigene Applikation.
  • 0

Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.

Einstein


Es ist nicht deine Schuld, das die Welt ist wie sie ist. Es wär nur deine Schuld wenn sie so bleibt.


Thanked by 3 Members:
Vola , RAiNWORM , Der Wolf

#47 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 23 August 2012 - 07:24 PM

Hallo,

habe bei meinem Projekt jetzt festgestellt das Daten "verloren" gehen.
Das ganze realisiere ich über die Indy-Komponenten - TCP-Sockets

Das ganze stellt sich folgendermaßen dar:

Metarader (EA) sendet "permanent" Daten an eine <--------> DLL (TCP-Server) <--------> DLL gibt die Daten an das Hauptprogramm-<HP> (TCP-Cient)
beim HP kommen aber am Anfang nicht alle Daten an, sondern erst nach "kurzer" Zeit - da das HP diese Daten schon verarbeitet, kommt ein Fehler.
Jetzt würde ich gern in der DLL ein Debugging einrichten, weiß aber nicht wie - ich habe die Unit IdLogDebug eingebunden die aber nichts ausgibt.
Hat jemand ein Beispiel wie man diese Unit richtig einbindet? - oder was gibt es noch für Möglichkeiten eine DLL zu debuggen??

Die Basis dafür ist MTEC von RAiNWORM
  • 0

Thanked by 4 Members:
RAiNWORM , Der Wolf , Kleinerbroker , Vola

#48 wh

wh

    Floor Broker

  • *_skilled
  • 555 posts
  • 3767 thanks
  • Wohnsitz:Neubrandenburg

Posted 23 August 2012 - 10:15 PM

Sendet permanent Daten: Wie?

Serializable / unserializable die Daten, dass sollte die Lösung sein bzw. packe alles in
eine Liste / Array / JSON / XML und sende dann.

XML / Json zu schreiben auf MT4 Seite ist einfach ... Free Pascal hat sicher Bibliotheken.
  • 0
Causality is the relationship between an event (the cause) and a second event (the effect), where the second event is a consequence of the first.

Thanked by 4 Members:
RAiNWORM , Der Wolf , Kleinerbroker , Vola

#49 wh

wh

    Floor Broker

  • *_skilled
  • 555 posts
  • 3767 thanks
  • Wohnsitz:Neubrandenburg

Posted 23 August 2012 - 10:37 PM

Schaue mal hier:

http://articles.mql4.com/730

Ggfs. einen XML Parser kann man auch auf Seite MT4 "hard coden" (mit Mt4 - würde ich nicht machen, dann doch in C) und
Free Pascal hat Libs ...
  • 0
Causality is the relationship between an event (the cause) and a second event (the effect), where the second event is a consequence of the first.

Thanked by 4 Members:
RAiNWORM , Der Wolf , Vola , Kleinerbroker

#50 wh

wh

    Floor Broker

  • *_skilled
  • 555 posts
  • 3767 thanks
  • Wohnsitz:Neubrandenburg

Posted 23 August 2012 - 10:41 PM

Einen habe ich noch

http://codebase.mql4.com/5040
  • 0
Causality is the relationship between an event (the cause) and a second event (the effect), where the second event is a consequence of the first.

Thanked by 4 Members:
RAiNWORM , Der Wolf , Vola , Kleinerbroker

#51 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 24 August 2012 - 04:44 PM

Einen habe ich noch

http://codebase.mql4.com/5040


erst einmal danke für die Antworten.
der Aufwand ist mir im Moment zu hoch - es funktioniert ja eigentlich, nur zu einem falschen Zeitpunkt!!
Was ich möchte, ist einfach mal die DLL debuggen um zu schauen wo die Daten "verschluckt" Posted Image werden - offensichtlich klappt das nicht mit einer DLL die von MetaTrader aufgerufen wird??!!
Die Daten werden komplett von MT gesendet - der letzte Teil geht aber beim ersten senden verloren und danach sind die Daten vollständig.
Irgend wie habe ich den Anschein das die DLL nicht wartet bis alles gesendet wurde und schon mal den ersten Teil weiterreicht - das muss ein Puffer-Problem sein.
  • 0

Thanked by 5 Members:
wh , RAiNWORM , ajkonly , Der Wolf , Vola

#52 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 01 September 2012 - 12:49 PM

Hallo,

habe bei meinem Projekt jetzt festgestellt das Daten "verloren" gehen.
...
...
...
Die Basis dafür ist MTEC von RAiNWORM


naja, das kommt davon, wenn man Software übernimmt, diese dann anpasst und bei dem Rest nicht genau hinschaut oder durchblickt - RAiNWORM hat nämlich einen Parameter bei dem die Länge der Daten bestimmt wird... und meine Daten waren einfach länger und so wurde der Rest glatt "abgeschnitten"
  • 0

Thanked by 4 Members:
Der Wolf , wh , RAiNWORM , ajkonly

#53 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 01 September 2012 - 12:51 PM

Hallo,

hat schon mal jemand einen Erfolg erziehlt und mit <GetDlgItemText> einen Wert aus einer Edit Box bekommen?

procedure winDlgTest.DoRun;varMsg: String;Buffer1: Array[0..20] of Char;Buffer2: Array[0..255] of Char;wnd, txt,Text: integer;begin{1838012 - WinHandle (Window Class #32770)1127 - ID von Edit Box}wnd := GetDlgItem(1838012,1127); -> erhalte Werttxt := GetDlgItemText(wnd, 1127, Buffer1, 256); {-> kein Wert}txt := GetDlgItemText(1838012, 1127, Buffer1, 256); {-> kein Wert}Text := GetWindowText(wnd,Buffer2, 256);Msg := Buffer2[0];Terminate;end;

  • 0

Thanked by 5 Members:
Der Wolf , wh , RAiNWORM , ajkonly , Vola

#54 RAiNWORM

RAiNWORM

    Floor Broker

  • Developer
  • 909 posts
  • 6489 thanks
  • Wohnsitz:NRW

Posted 01 September 2012 - 04:06 PM

RAiNWORM hat nämlich einen Parameter bei dem die Länge der Daten bestimmt wird... und meine Daten waren einfach länger und so wurde der Rest glatt "abgeschnitten"

Entschuldigung Posted Image Bei Datenübergaben arbeite ich immer mit Begrenzungen, um Overflow-Attacken vorzubeugen.
Bei TCP/IP muss man auf Empfangsseite aufpassen, da die Daten beliebig packetiert werden können und somit in mehreren Schüben ankommen können. Dabei besteht auch ein Unterschied zwischen LAN und Internet, was die Packetgrößen anbelangt.

Zum Debuggen der DLL: da die von MT aufgerufen wird, hast du mit "normalen", praktikablen Mitteln keine Chance. Du müsstest dann zu Low-Level-Debuggern übergehen. Das macht dann aber keinen Spass und kostet unnötig Zeit.

Mich würde mal was ganz anderes interessieren: was baust du da eigentlich? Posted Image
  • 0
Wer in die Fußstapfen eines anderen Tritt, wird niemals überholen...

Thanked by 4 Members:
Der Wolf , wh , Bull68 , Vola

#55 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 01 September 2012 - 05:50 PM

Zum Debuggen der DLL: da die von MT aufgerufen wird, hast du mit "normalen", praktikablen Mitteln keine Chance. Du müsstest dann zu Low-Level-Debuggern übergehen. Das macht dann aber keinen Spass und kostet unnötig Zeit.

zum debuggen benutze ich <OutputDebugString> - ist ganz praktisch


Mich würde mal was ganz anderes interessieren: was baust du da eigentlich? Posted Image

...einen TradeManager - mit dem ich meine Trades überwachen und vor allem auswerten kann. Der erste Schritt ist das initialisieren, d.h. wenn ich Trades eröffnen will zeigt er mir verschieden Werte an - siehe Anhang

Was ich am Ende will ist ein Tool zum auswerten aller Trades von verschiedenen Accounts (Brokern) ... und vielleicht noch ein paar Dinge mehr

Attached Files


  • 0

Thanked by 4 Members:
Der Wolf , wh , RAiNWORM , Vola

#56 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 18 October 2012 - 09:10 AM

Hallo an alle Datenbank-Profis,

ich hab da mal'ne Frage

Ich habe eine DB (Sqlite) mit verschiedenen Tabellen (siehe Anhang).
Jetzt möchte ich folgendes erreichen:

z.B. in der TM_HistoryOrders gibt es die Spalte <TradeTyp> - diese wird mittels <OrderType()> Metatrader gefüllt - diese Funktion gibt aber nur Zahlen aus (1-5)
Ich habe mir dann gedacht eine weitere Tabelle anzulegen - TM_OrderTypes - diese soll eine referenzierende Tabelle sein. Jetzt habe ich mit Primärschlüsseln und Fremdschlüsseln (Foreign Keys) herumexperimentiert und komme nicht weiter. Als Ergebnis dieser ganzen Aktion möchte ich, dass in der Spalte <Trade_Typ> buy od. sell od. sell Limit ... steht
Wie kann ich das in der DB realisieren??

Attached Files


  • 0

Thanked by 4 Members:
Vola , RAiNWORM , ronner , whipsaw

#57 Mythos

Mythos

    TEFEx CEO

  • Moderatoren
  • 3,478 posts
  • 16699 thanks

Posted 21 October 2012 - 11:34 AM

Also wenn du in einer tabelle eine int-Spalte TradeTyp hast, wird in der Spalte nie buy oder sell stehen.
Du kannst aber beim auslesen der tabelle nicht die tabelle selbst sondern ein JOIN nehmen

ala "SELECT * FROM (TM_HistoryOrders JOIN TM_OrderTypes using (TM_HistoryOrders.TradeTyp ==TM_OrderTypes.typeId))"

damit kombinierst du die zwei tabellen derart, das zu TM_HistoryOrders Spalten von TM_OrderTypes (für die Ausgabe) hinzugefügt werden. Und zwar genau die Zeile von TM_OrderTypes in der der entsprechende Wert von TM_HistoryOrders.TradeTyp passt.

also zB
TM_HistoryOrders:
id | TradeTyp | ....
1 | 2 | orderinfo1...
2 | 1 | orderinfo2....

TM_OrderTypes:
typeid | name
1 | BUY
2 | SELL
3 | BUY_LIMIT
....

dann gibt das JOIN folgenden Output (sortierung "zufällig")
id | TradeTyp | .... | name
1 | 2 | orderinfo1... | SELL
2 | 1 | orderinfo2.... | BUY

damit das ganze auch recht schnell geht, sollte natürlich bei den OrderTypes die typeID der PrimaryKey oder zumindest ein Index sein.
  • 0

Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.

Einstein


Es ist nicht deine Schuld, das die Welt ist wie sie ist. Es wär nur deine Schuld wenn sie so bleibt.


Thanked by 5 Members:
Vola , whipsaw , Kleinerbroker , RAiNWORM , ronner

#58 RAiNWORM

RAiNWORM

    Floor Broker

  • Developer
  • 909 posts
  • 6489 thanks
  • Wohnsitz:NRW

Posted 21 October 2012 - 12:20 PM

Du kannst aber beim auslesen der tabelle nicht die tabelle selbst sondern ein JOIN nehmen

Das wäre die saubere Lösung. Alternativ könntest du mit dem CASE-Statement arbeiten:

The CASE expression

A CASE expression serves a role similar to IF-THEN-ELSE in other programming languages.
...

  • CASE x WHEN w1 THEN r1 WHEN w2 THEN r2 ELSE r3 END
  • CASE WHEN x=w1 THEN r1 WHEN x=w2 THEN r2 ELSE r3 EN

Quelle

ala "SELECT * FROM (TM_HistoryOrders JOIN TM_OrderTypes using (TM_HistoryOrders.TradeTyp ==TM_OrderTypes.typeId))"

Ist das Standard-SQL? Ansonsten müsste es meines Erachtens anstatt "using" "on" genommen werden und an Stelle von "==" "=".
  • 1
Wer in die Fußstapfen eines anderen Tritt, wird niemals überholen...

Thanked by 3 Members:
Vola , whipsaw , ronner

#59 Mythos

Mythos

    TEFEx CEO

  • Moderatoren
  • 3,478 posts
  • 16699 thanks

Posted 21 October 2012 - 04:15 PM

Ist das Standard-SQL? Ansonsten müsste es meines Erachtens anstatt "using" "on" genommen werden und an Stelle von "==" "=".


Nö, das war "as i remember" SQLite ;) hast Recht es is "ON", hab noch gewusst das eines für liste von spalten ist und eines für die Bedingung... Das "==" is halt schon so automatisch bei Vergleichen Posted Image

bzgl Case: wenn es nur genau eine Abfrage ist, gehts so, aber dann wärs fast besser es als "switch" in den Code zu packen, weil bei 6 Möglichkeiten wird das CASE ein bissl unübersichtlich
  • 0

Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.

Einstein


Es ist nicht deine Schuld, das die Welt ist wie sie ist. Es wär nur deine Schuld wenn sie so bleibt.


Thanked by 3 Members:
Vola , ronner , RAiNWORM

#60 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 23 October 2012 - 07:56 AM

... danke erst einmal für die Tips - ich habe das jetzt direkt im Code eingearbeitet - werde bestimmt wieder auf euch zukommen , wenn es um Views oder Trigger geht... Wenn ich eine "vorzeigbare" Version habe, werde ich sie mal hier reinstellen...
  • 0

Thanked by 3 Members:
RAiNWORM , ronner , Vola

Wichtiger Hinweis für Besucher der Community!

Das Erstellungsdatum des von Dir aufgerufenen Themas liegt bereits einige Zeit zurück. Wir möchten darauf hinweisen, den Inhalt der Diskussion auf seine Aktualität hin zu prüfen. Weitere Informationen findest Du auf dieser Seite.


0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users