![]() |
Datenformular Oberfläche
Guten Tag zusammen,
ich habe ein Problem mit der Oberfläche zur Eingabe von Daten in Delphi. Das Endergebnis muss ähnlich sein wie die Registrierung einer Internetseite, es soll also Felder geben, in denen man etwas eintragen kann, ich brauche aber die Kontrolle darüber, was eingetragen werden darf (Also z.B. im Feld Geburtsdatum dürfen keine Buchstaben eingegeben werden). Das Problem: Diese Felder müssen 1. dynamisch erzeugt werden können und 2. in großer Anzahl verfügbar sein. Bisher habe ich während der Laufzeit Checkboxen/Edittextfelder usw. erstellt, das ist bei der Menge an Feldern aber nicht praktikabel. Es muss beispielsweise eine Art zweidimensionales Array aus Checkboxen geben, die man nach belieben ankreuzen kann. Das Array kann aber bis zu 1000x1000 Felder groß werden - und die dynamische Erzeugung von derart vielen Checkboxen und Edittextfeldern macht Delphi einfach nicht mit. (Nur falls das wichtig ist: Die erstellten Komponenten werden alle in einer Scrollbox untergebracht) Einer meiner Lösungsansätze war, Excel in Delphi einzubinden und die Felder der Tabelle zu nutzen. Das funktioniert zwar auch im Prinzip, aber dann habe ich keine Kontrolle über die Eingabe und in welche Felder der Nutzer klicken/schreiben darf. Hat jemand eine Idee, wie ich das lösen könnte? vielen Dank schoneinmal für eure Hilfe ! |
AW: Datenformular Oberfläche
Zitat:
|
AW: Datenformular Oberfläche
Mich würde einmal interessieren, wie lange man als Anwender braucht, um 1.000.000 Checkboxen gewissenhaft durchzuarbeiten.
|
AW: Datenformular Oberfläche
@Bernhard: Danke Dir. Ressourcensparen hört sich gut an, ich habe von dem was du meinst aber noch nie etwas gehört. Kennst Du vielleicht ein Beispiel/Tutorial, das Du mir zeigen könntest, damit ich mir das mal ansehen kann?
@DeddyH: Ich weiß nicht recht wie ich das einfach erklären soll, aber im Prinzip erstellt der PC automatisch eine Art "Muster" mit diesen Checkboxen. Der Nutzer muss aber immer die Möglichkeit haben, bestimmte Felder zu ändern. 1000x1000 ist außerdem ein absoluter Extremfall, theoretisch muss es aber möglich sein. Aber du hast schon Recht: Optimal wäre es, wenn man ähnlich wie in Excel mehrere Felder mit der Maus makieren könnte. |
AW: Datenformular Oberfläche
Dann mach es doch wie im Excel und nimm ein DataGrid, welches CheckBoxen als Datenfelder anbietet.
Der VirtualStringTree kann sowas oder du nimmst andere spezielle Komponenten dafür. Tipp: Man kann Datenbankkomponenten (z.B. DBDataGrids) nicht nur mit einer Datenbank verwenden (MemoryTables/MemoryDataSets ala TClientDataSet). |
AW: Datenformular Oberfläche
Zitat:
|
AW: Datenformular Oberfläche
Es müssen ja nicht wirklich Checkboxen sein.
Ein DrawGrid nehmen und dort auf den Click in ein Feld reagieren. Die ClickInformation benutzen um in der Datenstruktur darunter den Wert festzulegen (Boolean) und anhand dieses Wertes im Drawagrid das Feld darstellen. |
AW: Datenformular Oberfläche
@Himitsu: Entschuldige bitte die dumme Frage, aber du meinst TDBGrid, oder? Hab damit nämlich noch nie gearbeitet, schaue mir das aber mal an, danke!
@Haentschman: Ich hab auch schon überlegt, ob es vielleicht anders geht, aber im Kontext des Programms wüsste ich nicht wie. Und wie gesagt, 1000x1000 ist die absolute Obergrenze, im Normalfall werden es nur ca. 100x50 sein - nur muss mein Programm ja damit zurecht kommen, falls es mal mehr wird. @Sir Rufo: Das ist auch eine gute Idee, werde auch das mal ausprobieren, danke! Falls zufällig aus dem Kopf ein gutes Tutorial für Grids aller Arten kennt wäre ich dafür dankbar, ansonsten such ich es mir einfach selbst zusammen, ist auch kein Problem :) |
AW: Datenformular Oberfläche
Zitat:
Zitat:
Sonst können wir dir keine Alternativen vorschlagen. |
AW: Datenformular Oberfläche
@haentschman: Es geht um ein Codesystem, wie es z.B. in Hotels für Türschlösser verwendet wird. Man bekommt eine Karte und kann damit bestimmte Türen öffnen. Im Programm soll man auswählen können, welche Türen welche Karte öffnen kann. Standartmäßig öffnet jede Karte die dazugehörige Tür und die Haustür, aber das kann manchmal auch anders sein. Und wenn es nunmal 1000 Türen und Karten gibt... Eigentlich sollte das aber kein Problem sein, ich bin nur sehr unerfahren mit Delphi. Momentan versuche ich zum Beispiel rauszubekommen, wie ich prüfen kann, welche Zellen einer Stringgrid makiert sind.
|
AW: Datenformular Oberfläche
Eventuell könnte es mit 2 Listen übersichtlicher sein.
Eine Liste, wo alle Türen drinstehn, welche mit der Karte verknüpft sind und dann gibt es eine Liste, wo alle Türen drinstehn (eventuell noch gruppiert nach Etage oder Dergleichen) und dazu noch ein Edit, wo man einen Filter (Bestandteil des Namens) angeben kann. |
AW: Datenformular Oberfläche
Zitat:
Dabei würde ich die Türen im Grid bezogen zur Etage darstellen. Also in einer Zeile sind nur Türen aus der gleichen Etage. In der Zelle die Tür-Nummer und wenn sich die Maus über einer Zelle befindet würde ich noch erweiterte Informationen zu der Tür (was ist denn dahinter) anzeigen lassen. Mit dem DrawGrid ist es ja kein Problem da mit Grafiken und Farben zu arbeiten um das sehr übersichtlich zu gestalten. |
AW: Datenformular Oberfläche
Man kann es auch noch kombinieren.
- in der Liste steht alles - und im Grid z.B. je eine Etage (das könnte man noch weitertreiben und einen Grundriß anbieten, wo man die Türen darin auswählt) |
AW: Datenformular Oberfläche
@Himitsu/Sir Rufo: Das sind eigentlich nette Ideen, danke, aber die Oberfläche ist so leider ausdrücklich gewünscht wie ich sie beschrieben hab (aus praktischen Gründen, um das zu erklären müsste ich weit ausholen, spielt aber ja eigentlich auch keine Rolle). Ich denke aber, wie SirRufo schon sagte, dass man mit einer StringGrid/DrawGrid gut zurecht kommen kann(Wenn man sich denn damit auskennt... ;-) ), nur finde ich (bisher zumindest) keine brauchbare Möglichkeit, die Selektierten Zellen einer Stringgrid zu verändern.
Folgendes wäre ja schon ausreichend (Wobei sich eine Drawgrid aufgrund der Übersichtlichkeit wohl doch besser eignen würde):
Delphi-Quellcode:
Also wenn das Event per Tastendruck ausgelöst wird, tauscht die Procedur den Wert aller makierten Zellen aus. Stringgrid[X,Y].Selected gibt es aber ja scheinbar nicht. Ich habe zwar
*Pseudocode*
For X:=1 To Stringgrid.ColCount Do Begin For Y:=1 To Stringgrid.RowCount do Begin If Stringgrid[X,Y].Selected then if Stringgrid[X,Y]='True' then Stringgrid[X,Y]='False' else Striggrid[X,Y]='True'; End; End; ![]() @SirRufo: Das mit den Informationen ist übrigens eine tolle Idee, wäre das vielleicht mit den Hints möglich? Dann könnte man theoretisch doch auch zu den Angaben (Name, Zimmernummer, Bettenanzahl etc.) kommen, wenn man auf eine Zeile doppelklickt, oder? Gibt es denn irgendwo eine Übersicht über die Grids? ![]() |
AW: Datenformular Oberfläche
Also ich denke hier fehlt eine zusätzliche Ebene.
Zum Beispiel sollte es möglich sein die Räume in Gruppen zu ordnen. Es gibt dann z.B. Technikräume, Personalräume, Sicherheitsbereiche, Geschäftführung, Gästezimmer 1.Stock, Gästezimmer 2.Stock, ... Das Gleiche kann man auch mit den Karten machen. Es gibt Standardkarten, Mitarbeiterkarten, Masterkarten, ... Dann braucht man nur noch definieren: Masterkarten dürfen in alle Räume ausser in die Räume der Geschäftführung. Mitarbeiterkarten dürfen in die Personalräume. ... Jede Karte jedem einzelnen Raum zuzuorden ist viel zu kompliziert. Mit den Gruppen wird das erteilen oder entziehen von Zutrittsrechten stark vereinfacht. |
AW: Datenformular Oberfläche
Wie gesagt, ich verstehe die Idee dahinter und danke Euch für den Tipp, aber das steht leider nicht zur Diskussion. Danke aber aufjedenfall auch nocheinmal für die Anregung, Grids zu verwenden. Ich wünschte nur, die hätten eine so einfach verständliche API wie Excel, dann wäre ich schon fertig :)
|
AW: Datenformular Oberfläche
Zitat:
Das was sie wollen ist nicht das was sie brauchen!! Wenn man als Softwareentwickler nicht versucht den Kunden von einer besseren Lösung zu überzeugen, dann wird die Software eben nicht wirklich erfolgreich sein. Denn meistens ist der Besteller <> der Benutzer. Aber manchmal muss man den Kunden zu seinem Glück zwingen. Wenn nicht zur Diskussion steht, wie eine Software sein Ziel erreichen soll, dann läuft etwas ganz arg schief! |
AW: Datenformular Oberfläche
Nein nein, so war das gar nicht gemeint. Es gibt Gründe, warum die Oberfläche in diesem Fall so sein muss und nicht in Etagen unterteilt werden kann. Nur die im Kontext auszuführen würde recht lange dauern und spielt ja auch eigentlich keine Rolle, glaubt mir einfach, dass es dafür einen Grund gibt. Zu euch kam ich ja, weil ich auf der Suche nach Tipps bin, wie ich das als unerfahrener Delphianer hinkriege. Immerhin, ein bisschen bin ich ja schon weitergekommen: Ich glaube, der Ausdruck, den ich suche, um die selektierten Zellen zu erfassen ist ähnlich wie "state = [gdSelected]".
|
AW: Datenformular Oberfläche
Hallo ...,
ne kleine Lektüre für zwischendurch :wink: ![]() oder aber gleich ![]() |
AW: Datenformular Oberfläche
Danke Dir :) Auf den "Seiten" war ich zwar schon, hatte aber nach "gdSelected" gesucht, was dort nicht auftauchte. Aber ein anderes Beispiel hats ja auch getan. Allerdings steht diese Abfrage bei mir ja nicht in OnDrawCell. Das war meine erste Lösung, aber die funktionierte nur, wenn ich Enter gedrückt halte, während ich die Zelle selektiere. Es kann aber ja auch sein, dass ich erst zwei Sekunden, nachdem ich die Zelle selektiert habe, Enter drücke. Trotzdem soll die Zelle dann entsprechend eingefärbt werden. Aber wenn ich innerhalb des OnKeyPress Events nach gdSelected frage, muss ich ja erstmal an den State der jeweiligen Zelle kommen.
|
AW: Datenformular Oberfläche
Hmm, wie wäre es mit der Suchfunktion hier im Forum ;)
![]() ![]() Edit: das färben der Zelle musst du selbst übernehmen. Stichwort 'DrawCell' Edit2: die selektierte Zelle kannst du ganz leicht im OnClick Event abfragen. ![]() |
AW: Datenformular Oberfläche
Also ich würde ein DrawGrid hier bevorzugen.
Ein StringGrid ist immer praktisch, wenn man Text darstellen will und evtl. der Benutzer diesen Text bearbeiten soll. Hier soll aber etwas ausgewählt und per Klick oder Tastendruck ein Zustand geändert werden. Da könnten die Funktionen vom StringGrid etwas im Wege sein um es perfekt erscheinen zu lassen. Da das StringGrid aber eine Ableitung vom DrawGrid ist, arbeiten beide Varianten ziemlich ähnlich |
AW: Datenformular Oberfläche
Aber da er noch in der 'Probier'-Phase ist, wird ein Stringgrid leichter zu handeln sein. Ansonsten stimme ich dir voll zu.
|
AW: Datenformular Oberfläche
... :duck:
Peinlich. Ich hab zwar genau danach gesucht, aber nur über Google, weil ich dachte "Wenn es hier im Forum was gibt wirds ja auch auf Google zu finden sein". Tja.. Soviel sinnloser Aufwand wegen einem (fast) Einzeiler. Aber jetzt gehts ja, Dankeschön! :-D Jetzt mach ich mich dann mal an die Arbeit, falls es noch was zu dem Thema gibt melde ich mich nochmal.. Danke nochmal an alle! |
AW: Datenformular Oberfläche
Hallo nocheinmal,
dank Euren Tipps komme ich mit dem Färben und anpassen der Grids zwar gut klar und mache viele Fortschritte, eine Sache gibt es aber noch. Ich habe die Stringgrid so eingestellt, dass die selektierte Zelle Blau und alle anderen makierten Zellen rötlich eingefärbt sind. Zur Übersicht wird jede zweite Spalte/Reihe leicht gräulich verfärbt. Nur wenn ich in eine der Verfärbten Zellen etwas schreibe wird sofort das OnDrawCell Ereignis ausgelöst, welches den Text wieder übermalt. Zuerst hab ich versucht, den Text danach einfach nocheinmal schreiben zu lassen, das bringt aber nichts, da dann sofort wieder das Ereignis ausgelöst wird. Ich habe im Forum auch mal nach transparenten Farben / transparentem zeichnen mit Canvas gesucht, das gibt es aber nicht bzw. wäre sehr aufwändig. Hat jemand vielleicht eine Idee, wie ich das Problem lösen könnte oder mit welchen Suchbegriffen ich mich durchhangeln könnte ? Dankeschön schoneinmal :) |
AW: Datenformular Oberfläche
Hm, habe gerade mal in einem kleinen Testprogramm versucht, den Inhalt und die Farbe als Bitmap zu Speichern und diese dann wiederum in der Tabelle auszugeben. Das erscheint mir aber erstens sehr umständlich und zweitens vor allem nicht gerade performant, wenn man bedenkt mit welchen Listengrößen ich hier hantiere.. Hat da vielleicht jemand einen besseren Ansatz für mich ? Komme hier irgendwie nicht weiter
|
AW: Datenformular Oberfläche
Nein, so macht man das auch nicht ;)
Alles was dort erscheinen soll musst du im OnDrawCellEvent erledigen also zeichnen. Zeig doch mal den Code den du bislang dort stehen hast EDIT Bitte definiere doch auch was du unter "etwas schreibe" genau meinst. Soll der Anwender da etwas schreiben, oder die Anwendung Text ausgeben? |
AW: Datenformular Oberfläche
Mein bisheriges OnDrawCellEvent (Der Umweg über "sg", da ich mehrere Stringgrids hab, die ich gleich Formatieren möchte):
Delphi-Quellcode:
Wenn ich ein Feld mit Text(z.B. "TEST" oder "111222333") selektiere verschwindet der Text, da er von dem OnDrawCell-Event übermalt wird. Sobald ich die Selektion aufhebe ist der Text aber wieder sichtbar, der Inhalt geht also nicht verloren, wird nur überzeichnet.
sg := TStringGrid (Sender);
if (((((ARow+1) mod 2 <> 0) And (ARow<>0) AND (ACol<>0))) OR (((ACol+1) mod 2 <> 0) And (ACol<>0) AND (ARow<>0))) then begin //Färbe jede zweite Zelle zur Übersicht ein (Außer die Erste Spalte/Reihe) sg.canvas.brush.color := cl3DLight; sg.canvas.FillRect(Rect); end; if ((ARow>=sg.Selection.Top) AND (Arow<=Sg.Selection.Bottom) AND (ACol>=sg.Selection.Left) AND (ACol<=Sg.Selection.Right)) then Begin //Färbt die makierten Felder sg.canvas.brush.color := $FACE87; sg.canvas.FillRect(Rect); End; if ((Arow=sg.Row) ANd (ACol=sg.Col)) then Begin //Färbt das selektierte Feld sg.canvas.brush.color := $0045FF; sg.canvas.FillRect(Rect); End; Der Inhalt der Felder kann je nachdem sowohl vom Nutzer als auch vom Programm selbst verändert werden. Ich schätze mal, ich verstehe nicht ganz richtig, was du mit "Alles was dort erscheinen soll..." meinst, aber einen ähnlichen Gedanken hatte ich auch schon, daher stand probehalber mal
Delphi-Quellcode:
am Ende des Events, da ich mir erhofft hatte, durch die "Änderung" des Inhalts würde der Text nocheinmal neu (-> Über die Farbe) geschriben. Es führt aber nur dazu, dass die gesamte Tabellendarstellung flimmert (Wahrscheinlich, da dadurch dasselbe Event immer wieder aufgerufen wird).
for X:=0 To Sg.ColCount do
Begin for Y:=0 To Sg.RowCount do Begin if Sg.Cells[X,Y]<>'' then sg.Cells[X,Y]:=sg.Cells[x,Y]; End; End; |
AW: Datenformular Oberfläche
Vielleicht hilft dir ja ein
Delphi-Quellcode:
wo der Text dann auch gemalt wird.
sg.Canvas.TextRect
Das meinte ich mit "Alles" ;) Siehe dazu auch ![]() |
AW: Datenformular Oberfläche
Moin...,
versuche mal folgendes:
Delphi-Quellcode:
const tFormat = DT_SINGLELINE or DT_CENTER or DT_VCENTER;
var tText: String; begin with (Sender as TStringGrid) do begin tText:= Trim(Cells[ACol, ARow]); // Text der Zelle if (gdFixed in State) then begin // fixe Zelle // feste Zellen bleiben unberührt end // (gdFixed in State) else begin // nicht fixe Zellen if (gdSelected in State) then begin // markierte Zelle Canvas.Brush.Color:= clHighlight; // HintergrundFarbe selektierte Zelle Canvas.Font.Color:= clBlack; // Schriftfarbe end else begin // normale Zelle if Odd(ARow) then // alle ungeraden Zeilen Canvas.Brush.Color:= clMoneyGreen // einfärben else Canvas.Brush.Color:= clInfoBk; // end; // <> (gdFixed in State) Canvas.FillRect(Rect); // Hintergrund zeichnen DrawText(Canvas.Handle, PChar(tText), Length(tText), Rect, tFormat); // Textausgabe // formatierte Textausgabe könnte auch über ExtTextOut() erfolgen end; // nicht fixe Zellen end; // with end; |
AW: Datenformular Oberfläche
Danke Ihr zwei, jetzt hab ichs. Das mit Drawtext war mir einfach entgangen :)
|
AW: Datenformular Oberfläche
Guten Abend, ich bin es nochmal :(
Es tut mir leid, dass ich euch schon wieder mit Fragen zu diesem Thema löchere, hatte eigentlich gehofft, jetzt allein weiterzukommen. Aber bei meiner Stringgrid gibt es noch ein Problem, mit dem ich nicht fertig werde. Ich möchte die Eingaben des Nutzers kontrollieren, wenn er eine Zelle Editiert (in manchen Zellen sind beispielsweise nur die Werte 1,2,3 erlaubt). Bisher habe ich das mit SetEditText abgefangen, aber wenn die Zelle noch leer ist und der Benutzer sie gerade erst anklickt kommt eine Fehlermeldung, da die leere Zelle weder den Wert 1 noch 2 oder 3 hat. Ich bräuchte also ein Event, welches erst ausgelöst wird, wenn der Nutzer mit seiner Bearbeitung fertig ist. Aber es gibt sowohl unterschiedliche Eingabemöglichkeiten - direkt über das Programm, manuell vom Nuter oder STRG+V (Was ich mit OnKeyDown abfange und dann auf alle selektierten Zellen übertrage, damit bin ich auch nicht wirklich zufrieden, es funktioniert manchmal nämlich aus irgendeinem Grund nicht...) - als auch verschiedene Arten, das Editieren zu beenden (Selektion eines anderen Feldes, Tab, Enter, Selektion eines anderen Objekts oder sogar Form/Programms...), dass ich es, egal wie ich es auch versuche, nie schaffe, alle Möglichkeiten sauber und zuverlässig abzufangen. Ich habe schonmal nach "On Edit" und ähnlichem gesucht, konnte aber leider nicht viel hilfreiches finden. Auf ![]() ![]() |
AW: Datenformular Oberfläche
Nabend ...,
der InplaceEditor arbeitet manchmal, sagen wir mal, gewöhnungsbedürftig ;) Aber ich halte den Ansatz, Eingaben bzw. rein kopierte Strings über den Editor zu filtern, für falsch. Ich würde generell auf den Editor verzichten und zb. bei Doppelklick ein separates 'Eingabefenster' öffnen. In diesem könntest du dich austoben, danach würde ich die gemachten Eingaben prüfen, bearbeiten was auch immer und gleich in die Db wegsichern und erst dann die markierten Zellen schreiben. Edit: ok, Doppelklick ist natürlich blöd bei Mehrfachauswahl 8-) also solltes du dann ne bestimmte Taste abfangen zum öffnen des Eingabefensters zb. Tab oder zirkumflex oder so. |
AW: Datenformular Oberfläche
Der Plan war aber (Da die Stringgrid sehr groß werden kann), dass man beliebig viele Zellen markieren kann und dann in alle markierten gleichzeitig schreibt/kopiert etc...
Oder hab ich Dich falsch verstanden? *Edit* Wie meinst du das denn mit dem separatem Eingabefenster? Wenn wirklich ein neues Fenster dafür aufgeht verliert man ja die Übersicht... Außerdem ist es sehr wichtig, dass alles möglichst schnell geht |
AW: Datenformular Oberfläche
Ich glaube du denkst zu kompliziert.
Ich meinte: Du markierst alle zu editierenden Zellen wie bisher, aber statt den InplaceEditor zu benutzen öffnest du ein neues Eingabefenster, machst die Eingabeoperationen und schließt des wieder. Beim schließen wird die Db geschrieben sowie die Eingaben an das Grid weitergereicht. Dieses besagte Eingabefenster musst du natürlich selbst erstellen, praktisch dein eigener Editor. der Vorteil ist natürlich das du des auf deine Bedürfnisse quasi massschneidern kannst. Edit: vielleicht könntest du ein Demo von deinem programm kurz hier anhängen. Ich kann mir ehrlich gesagt immer noch net vorstellen wie du die tausende zellen darstellst. |
AW: Datenformular Oberfläche
So, nach ein bisschen basteln funktioniert es jetzt (fast) wie gedacht. Jetzt muss ich es nur noch schaffen, dass die Selektion bei Doppelklick/Enter nicht aufgehoben wird.
Vielen Dank nochmal für Deinen Tipp, dank Dir ist endlich der Groschen gefallen. Manchmal fragt man sich wirklich, wieso man es nicht gleich so gemacht hat :) *Edit* Achja. Ich hab für das Eingabefenster ein Edittextfeld umfunktioniert - es klappt auch -, aber wenn ich Enter drücke kommt immer ein Fehlermeldungsgeräusch, das ist etwas seltsam. Ist mir aber schon mehrfach bei Edittexten aufgefallen |
AW: Datenformular Oberfläche
Delphi-Quellcode:
Sollte so funktionieren.
procedure TForm1.DeinSGKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if (Key = VK_RETURN) then begin frm_Eingabe.Show; // eigenes Editorfenster end; end; Edit: Du solltest das Eingabefenster aber Modal anzeigen. |
AW: Datenformular Oberfläche
So ähnlich siehts bei mir auch aus. Nur, ähm, modal? :?
|
AW: Datenformular Oberfläche
MyForm.ShowModal => Das Formular bekommt alle Maus- und Tastenereignisse exklusiv, bis man es schließt.
MyForm.Show => Das Formular ist sichtbar und bekommt alle Maus- und Tastenereignisse, wenn man es selektiert (anklickt). |
AW: Datenformular Oberfläche
Zitat:
Delphi-Quellcode:
procedure TFormMain.Edit_FeldKeyPress(Sender: TObject; var Key: Char);
begin IF Key = #13 THEN BEGIN IF TextIstZahl(Edit_Feld.Text) THEN BEGIN Do.Something; // oder mach was anderes ... Do.AnotherThing; // ... weise irgendwas irgendwem zu oder mach was du willst ... ELSE ShowMessage('fehlerhafte Eingabe: Nur Ziffern erlaubt ...'); END; Key := #0; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz