Aus stringgrid die daten nutzen
Hallo habe folgendes Problem ich möchte aus dem stringgrid die zeiten nutzen und sie in einem timer aktiv machen also ich gebe in die stringgrid zb die zeiten 5,3,4,9,6s ein dann soll zuerst die zeit 5s aktiviert werden und bestimmte checkboxen in der zeit sollen angesprochen werden. Dann soll er automatisch in die nächste celle rücken wo die zeit 3 steht und in dieser zeit sollen wieder bestimmte checkboxen checked sein usw.
bei dem quelltext klappt das prinzipiell schon aber er geht nicht von einer celle in die nächste er nimmt immer die zuletzt eingetragene. könnt ihr mir sagen wie ich den quelltext ändern muss damit es klappt Danke delphi-projekt
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var i,b:integer; g:string; begin Timer6.Interval := 1000 * strtoint(edzeit.text); g:= stringgrid1.Cells[1,stringgrid1.Row]; g:=(ComboBox1.Text); Timer6.Enabled:=True; if g ='Geradeaus' then begin cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=true; cbData7.checked:=true; end; if g= 'Rückwärts' then begin cbStrobe.checked:=false; cbData3.checked:=false; cbData1.checked:=true; cbData5.checked:=true; cbData7.checked:=true; end; if g= 'Geraderechts' then begin cbStrobe.checked:=false; cbData5.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData7.checked:=true; end; if g= 'Geradelinks' then begin cbStrobe.checked:=false; cbData7.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=true; end; end; end. |
Re: Aus stringgrid die daten nutzen
Hallo,
mit
Delphi-Quellcode:
sprichst Du immer eine bestimmte Zelle an, das wird sich so auch nie ändern. Wenn Du die Zeilen wechseln willst, musst Du mit einem Index auf die Zeilen zugreifen. Du musst Dir also irgendwo merken, welchen Wert Du zuletzt benutzt hast und dann diesen Index erhöhen für die nächste Benutzung.
g:= stringgrid1.Cells[1,stringgrid1.Row];
Delphi-Quellcode:
Inc(Index);
If Index > stringgrid1.Row then Index := 0; g:= stringgrid1.Cells[1,Index]; |
Re: Aus stringgrid die daten nutzen
Danke erstmal für die Antwort, ich habe den Quelltext jetzt so geändert es passiert jetzt aber
gar nichts Muss ich nochwas beachten? weil derzeit zählt der gar nicht. gruß delphi-projekt hier nochmal die änderung
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var i,b:integer; g:string; index:integer; begin Timer6.Interval := 1000 * strtoint(edzeit.text); Timer6.Enabled:=True; Inc(Index); If Index > stringgrid1.Row then Index := 0; g:= stringgrid1.Cells[1,Index]; if g ='Geradeaus' then begin cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=true; cbData7.checked:=true; end; |
Re: Aus stringgrid die daten nutzen
du hast index lokal in der buttonklick deklariert.
Bei jedem aufrufen der Buttonclick ist index dann wieder 0 Warum rückst du deinen Code nicht ein? liest sich absolut schrecklich. Auch würde ich es für sinnvoll halten, wenn du deinen Komponenten nicht bloß Namen wie cbData1 gibst. Gruß Frank |
Re: Aus stringgrid die daten nutzen
Sorry ich bin noch delphi anfänger ich hab gerade keine ahnung was du damit meinst wenn ich den code einrücken soll
meinst du das so
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var i,b:integer; g:string; var index:integer; begin Timer6.Interval := 1000 * strtoint(edzeit.text); Timer6.Enabled:=True; if g ='Geradeaus' then begin Inc(Index); If Index > stringgrid1.Row then Index := 0; g:= stringgrid1.Cells[1,Index]; cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=true; cbData7.checked:=true; end; |
Re: Aus stringgrid die daten nutzen
var index:integer;
procedure TForm1.Button3Click(Sender: TObject); var i,b:integer; g:string; //var index:integer; //hier wird index wieder 0 bzw. nicht 0 sondern undefiniert begin Timer6.Interval := 1000 * strtoint(edzeit.text); Timer6.Enabled:=True; if g ='Geradeaus' then begin Inc(Index); If Index > stringgrid1.Row then Index := 0; g:= stringgrid1.Cells[1,Index]; cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=true; cbData7.checked:=true; end; |
Re: Aus stringgrid die daten nutzen
Danke,
also ich habe es genauso gemacht aber der tut nicht die checkboxen checked machen da passiert gar nichts. muss ich nun noch was beachten? Gruß delphi-projekt |
Re: Aus stringgrid die daten nutzen
nee, unter Einrückung verstehe ich
Delphi-Quellcode:
halt alles, was zusammengehört, einrücken, saß man das sofort erkennt (z.B. Anweisungsblöcke der if-Anweisung). dein erster quelltext ist gruselig, weil nicht ersichtlich ist, welches end zu welchem begin gehört.
procedure TForm1.Button3Click(Sender: TObject);
var i,b:integer; g:string; index:integer; begin Timer6.Interval := 1000 * strtoint(edzeit.text); Timer6.Enabled:=True; if g ='Geradeaus' then begin Inc(Index); If Index > stringgrid1.Row then Index := 0; g:= stringgrid1.Cells[1,Index]; cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=true; cbData7.checked:=true; end; end; Quelltext ist nur eingerückt von deinem Code. scheint mir jetzt auch sinnfrei zu sein, da du Zitat:
Wenn du das mit dem index so durchziehen möchtest, mußt Du ihn als globale Variable deklarieren (ist aber nicht optimal, du kannst mal nach globalen Variablen im Forum suchen ;-) ) oder z.B. im private-Abschnitt der Form. Aus dem Var-Teil der Buttonclick muß es raus. Bei jedem click ist index wieder 0. Ansonsten weiß ich nicht wirklich, was genau Du tun willst (habe mir aber auch die anderen threads von Dir nicht ganz durchgelesen). Evtl ist es besser, du hängst mal das gnaze projekt dran, damit man sieht, was du eigentlich machen willst. |
Re: Aus stringgrid die daten nutzen
Doch hat er aber erst nachdem er die if abfrage stellt,dann geht's latürnich nicht
Delphi-Quellcode:
lol 3mal editiert
var index:integer;
procedure TForm1.Button3Click(Sender: TObject); var i,b:integer; g:string; //var index:integer; //hier wird index wieder 0 bzw. nicht 0 sondern undefiniert begin Timer6.Interval := 1000 * strtoint(edzeit.text); Timer6.Enabled:=True; g:= stringgrid1.Cells[1,Index]; if g ='Geradeaus' then begin cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=true; cbData7.checked:=true; end; Inc(Index); If Index > stringgrid1.Row then Index := 0; |
Re: Aus stringgrid die daten nutzen
Vielen vielen dank es klappt jetzt zumindest das er immer weiter zählt,
nun ist das problem mit der zeit ich möchte die zeit aus der stringgrid nehmen. also in der ersten celle steht 5s dann soll für 5s eine bestimmte checkbox checked sein in der 2 celle steht 3s und nach den 5s soll er mit den 3s weiterarbeiten. ich weiß nicht wie ich das vereinbaren muss. bei dem quelltext nimmt er immer die letzte zahl wie muss ich das denn ändern?
Delphi-Quellcode:
Timer6.Interval := 1000 * strtoint(edzeit.text);
|
Re: Aus stringgrid die daten nutzen
entschuldigt wenn ich so viele fragen stelle
aber ist es möglich,dass wenn ich auf den button3 click das er eine celle nach der anderen abarbeitet und die gewünschten checkboxen in der zugewiesenen zeit checked. (mit einem click auf den button) gruß delphi-projekt |
Re: Aus stringgrid die daten nutzen
Delphi-Quellcode:
Wobei die Standardtimer sehr ungenau, bei hoher Systemauslatung werden, aber das ist ein anderes Problem.
var index:integer;
procedure TForm1.Button3Click(Sender: TObject); var i,b,p_:integer; g:string; //var index:integer; //hier wird index wieder 0 bzw. nicht 0 sondern undefiniert zeitS:String; zeitI:integer; begin //ich hab hier mal die Nummer 0 genommen zeitS:=stringgrid1.Cells[0,Index]; //wenn du wirklich 5s schreibst dann das s entfernen p_:=pos('s',ansilowercase(zeits)); delete(zeitS,p_,1); zeitI:=Strtointdef(zeitS,-1); //-1 wenn Fehler edzeit.text:=zeitS; Timer6.Interval := 1000 * zeitI; //strtoint(edzeit.text); Timer6.Enabled:=True; g:= stringgrid1.Cells[1,Index]; if g ='Geradeaus' then begin cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=true; cbData7.checked:=true; end; Inc(Index); //If Index > stringgrid1.Row //<--- If Index > stringgrid1.Rowcount -1 then Index := 0; |
Re: Aus stringgrid die daten nutzen
ok also es sieht jetzt wie folgt aus
ich habe eine stringgrid erstellt diese hat 2 spalten für zeit und richtung
Delphi-Quellcode:
so dann habe ich ein edit feld in welches ich die zeit eingebe und eine combobox wo ich die
stringgrid1.cells[0,0]:='Zeit';
stringgrid1.cells[1,0]:='Richtung' richtungen auswählen kann ich gebe ein 5(edit) Geradeaus(combobox) 3(edit) Rückwärts(combobox) diese werte stehen dann in der stringgrid und durch den button3 soll nun bewirkt werden das er in die erste celle springt sieht aha 5s lang geradeaus in der zeit sollen bestimmte checkboxen checked sein nach den 5s soll er in die nächste zelle springen dort sieht er 3s rückwärts und für diese 3s sollen dann wieder bestimmte checkboxen checked sein. Also das mit der zeit hab ich jetzt so eingegeben
Delphi-Quellcode:
weil ich die "s" nicht mit eingebe aber das klappt irgendwie immer noch nicht ich tu mal meinen
zeitS:=stringgrid1.Cells[0,Index];
zeitI:=Strtointdef(zeitS,0); edzeit.text:=zeitS; Timer6.Interval := 1000 * zeitI; gesamten quelltext ran vielleicht findet ihr den Fehler. Aber schonmal vielen dank für die vielen infos.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin stringgrid1.Cells[0,stringgrid1.Row]:=(Edzeit.text); stringgrid1.Cells[1,stringgrid1.Row]:=(ComboBox1.Text); stringgrid1.Row:=stringgrid1.Row+1; anztimer:=stringgrid1.row; end; procedure TForm1.Button3Click(Sender: TObject); var i,b,p:integer; g:string; zeitS:String; zeitI:integer; begin zeitS:=stringgrid1.Cells[0,Index]; zeitI:=Strtointdef(zeitS,0); edzeit.text:=zeitS; Timer6.Interval := 1000 * zeitI; Timer6.Enabled:=True; g:= stringgrid1.Cells[1,Index]; if g ='Geradeaus' then begin cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=true; cbData7.checked:=true; end; if g= 'Rückwärts' then begin cbStrobe.checked:=false; cbData3.checked:=false; cbData1.checked:=true; cbData5.checked:=true; cbData7.checked:=true; end; if g= 'Geraderechts' then begin cbStrobe.checked:=false; cbData5.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData7.checked:=true; end; if g= 'Geradelinks' then begin cbStrobe.checked:=false; cbData7.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=true; end; Inc(Index); If Index > stringgrid1.Row then Index := 0; end; end. |
Re: Aus stringgrid die daten nutzen
ja du arbeitest mit row ,row ist falsch
nur mit cells und rowcount arbeiten
Delphi-Quellcode:
var index:integer;
procedure TForm1.Button1Click(Sender: TObject); var i,b,p_:integer; g:string; //var index:integer; //hier wird index wieder 0 bzw. nicht 0 sondern undefiniert zeitS:String; zeitI:integer; begin //cbData7.Checked:=True; //ich hab hier mal die Nummer 0 genommen zeitS:=stringgrid1.Cells[0,Index]; //<-EDIT //wenn du wirklich 5s schreibst dann das s entfernen p_:=pos('s',ansilowercase(zeits)); delete(zeitS,p_,1); zeitI:=Strtointdef(zeitS,-1); //-1 wenn Fehler edzeit.text:=zeitS; Timer1.Interval := 1000 * zeitI; //strtoint(edzeit.text); Timer1.Enabled:=True; g:= stringgrid1.Cells[1,Index]; //if g ='Geradeaus' //then begin //cbStrobe.checked:=false; //cbData1.checked:=false; //cbData3.checked:=true; //cbData5.checked:=true; cbData7.checked:=true; end; Inc(Index); If Index > stringgrid1.Colcount then Index := 0; end; procedure TForm1.FormCreate(Sender: TObject); var cnt1: Integer; begin Stringgrid1.FixedCols:=0; for cnt1 := 0 to Stringgrid1.RowCount - 1 do Stringgrid1.Cells[0,cnt1]:=inttostr(cnt1); end; procedure TForm1.Timer1Timer(Sender: TObject); begin cbData7.Checked:=False; Timer1.Enabled:=False; end; Und ein Post weiter oben editiere ich noch den Fehler |
Re: Aus stringgrid die daten nutzen
Ich habe den quelltext jetzt soweit übernommen aber sobald ich starte stehen die zahlen 1,2,3,4,5... in meiner stringgrid drin die soll ich doch aber eingeben oder habe ich was falsch in den quelltext übernommen?
|
Re: Aus stringgrid die daten nutzen
Das war nur zum Testen ob das Lesen und Umschalten per Timer funktioniert.
Ah so, und mit Row bestimmst du die Zeile die den Auswahlfocus erhält. Das war vieleicht auch so gewünscht,aber dann hätte Row dem index angepasst werden müssen. |
Re: Aus stringgrid die daten nutzen
Und wie tu ich das nun auf mein programm beziehen. Die zeit will ich ja eingeben und die richtung auch und danach soll er celle für celle abarbeiten .
der quelltext sieht nun wie folgt aus also was muss ich nun noch umschreiben das die zeiten nicht von anfangan da sind sondern das ich die eingebe und der rechner das alles automatisch macht. so wie vorherige seite beschrieben wie das pojekt aussieht. vielen dank nochmal
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var b:byte; Phase:integer; Zeit:integer; var cnt1: Integer; begin Stringgrid1.FixedCols:=0; for cnt1 := 0 to Stringgrid1.RowCount - 1 do Stringgrid1.Cells[0,cnt1]:=inttostr(cnt1); stringgrid1.cells[0,0]:='Zeit'; stringgrid1.cells[1,0]:='Richtung'
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var i,b,p:integer; g:string; zeitS:String; zeitI:integer; begin cbData7.Checked:=True; zeitI:=Strtointdef(zeitS,-1); edzeit.text:=zeitS; Timer6.Interval := 1000 * zeitI; Timer6.Enabled:=True; g:= stringgrid1.Cells[1,Index]; if g ='Geradeaus' then begin cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=true; cbData7.checked:=true; end; if g= 'Rückwärts' then begin cbStrobe.checked:=false; cbData3.checked:=false; cbData1.checked:=true; cbData5.checked:=true; cbData7.checked:=true; end; Inc(Index); If Index > stringgrid1.colcount then Index := 0; end; procedure TForm1.Timer6Timer(Sender: TObject); begin cbData7.Checked:=False; Timer6.Enabled:=False; end; end. |
Re: Aus stringgrid die daten nutzen
Ich geb's auf :roll:
|
Re: Aus stringgrid die daten nutzen
nein bitte nicht ich bin wirklich blutiger anfänger und das ist mein erstes etwas größeres projekt
erklärs mir doch bitte nochmal was du meinst ich hab schon so viel versucht aber es klappt halt noch nicht also mach ich noch irgendetwas falsch aber was |
Re: Aus stringgrid die daten nutzen
Das füllt Deine Zellen automatisch also musst Du das löschen
Delphi-Quellcode:
for cnt1 := 0 to Stringgrid1.RowCount - 1 do
Stringgrid1.Cells[0,cnt1]:=inttostr(cnt1); und das vermutlich auch weil Dir das anzeigt was aus dem Stringgrid gelesen wurde bzw. in der Variablen:ZeitS steht.
Delphi-Quellcode:
in Deinem Fall bleibt aber ZeitS leer weil Du
edzeit.text:=zeitS;
das nicht übernommen hast.
Delphi-Quellcode:
zeitS:=stringgrid1.Cells[0,Index];
|
Re: Aus stringgrid die daten nutzen
ok also ich habe das jetzt so gemacht wie du gesagt hast aber das programm bleibt jetzt
immer hängen und es klappt halt nicht so wie ich das beschrieben habe schau dir doch nochmal meinen quelltext an(siehe unten) muss ich jetzt nochwas in formcreate oder in die timer procedure schreiben? und nochmal vielen dank das du so viel nerven mit mir hast |
Re: Aus stringgrid die daten nutzen
so sieht jetzt mein quelltext aus dort muss aber nochwas falsch sein denn es läuft nicht
muss ich nochwas mit dem timer machen danke
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var i,b,p:integer; g:string; zeitS:String; zeitI:integer; begin zeitS:=stringgrid1.Cells[0,Index]; zeitI:=Strtointdef(zeitS,-1); Timer6.Interval := 1000 * zeitI; Timer6.Enabled:=True; g:= stringgrid1.Cells[1,Index]; if g ='Geradeaus' then begin cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=true; cbData7.checked:=true; end; Inc(Index); If Index > stringgrid1.colcount then Index := 0; |
Re: Aus stringgrid die daten nutzen
warte 10 Min.
|
Re: Aus stringgrid die daten nutzen
sorry mein internet hat gerade abgekackt
|
Re: Aus stringgrid die daten nutzen
Delphi-Quellcode:
wurde doch etwas länger..jetzt bin ich mal gespannt...
Var anztimer,index:integer;
procedure TForm1.Button2Click(Sender: TObject); begin if (stringgrid1.Row>stringgrid1.RowCount-2) then stringgrid1.RowCount:=stringgrid1.Rowcount+1; stringgrid1.Cells[0,stringgrid1.Row]:=(Edzeit.text); stringgrid1.Cells[1,stringgrid1.Row]:=(ComboBox1.Text); stringgrid1.Row:=stringgrid1.Row+1; anztimer:=stringgrid1.row; end; procedure TForm1.Button3Click(Sender: TObject); begin Timer6.Enabled:=Not Timer6.Enabled; end; procedure TForm1.Button4Click(Sender: TObject); Var cnt1:integer; begin for cnt1:=0 to Stringgrid1.RowCount-1 do Stringgrid1.Rows[cnt1].Clear; end; procedure TForm1.FormCreate(Sender: TObject); begin stringgrid1.FixedCols:=0; with combobox1 do begin Clear; items.Add('Geradeaus'); items.Add('Rückwärts'); items.Add('Geraderechts'); items.Add('Geradelinks'); itemindex:=0; end; edZeit.Text:='1'; Timer6.Enabled:=False; end; Procedure Machwas; var i,b,p:integer; g:string; zeitS:String; zeitI:integer; begin with Form1 do begin zeitS:=stringgrid1.Cells[0,Index]; zeitI:=Strtointdef(zeitS,0); Timer6.Interval := 1000 * zeitI; g:= stringgrid1.Cells[1,Index]; if g ='Geradeaus' then begin cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=true; cbData7.checked:=true; end; if g= 'Rückwärts' then begin cbStrobe.checked:=false; cbData1.checked:=true; cbData3.checked:=false; cbData5.checked:=true; cbData7.checked:=true; end; if g= 'Geraderechts' then begin cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=false; cbData7.checked:=true; end; if g= 'Geradelinks' then begin cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=true; cbData5.checked:=true; cbData7.checked:=false; end; Inc(Index); If Index > stringgrid1.Row then Index := 0; if (Timer6.Interval<1) then Timer6.Interval:=1; end; end; procedure TForm1.Timer6Timer(Sender: TObject); begin cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=false; cbData5.checked:=false; cbData7.checked:=false; Machwas; end; end. |
Re: Aus stringgrid die daten nutzen
dankeschön für den ausführlichen quelltext
ich habe viel verstanden aber etwas versteh ich noch nicht
Delphi-Quellcode:
ich habe einen button womit ich die werte in die stringgrid einfüge ist einer dieser zwei button dafür zuständig?
procedure TForm1.Button3Click(Sender: TObject);
begin Timer6.Enabled:=Not Timer6.Enabled; end; procedure TForm1.Button4Click(Sender: TObject); Var cnt1:integer; begin for cnt1:=0 to Stringgrid1.RowCount-1 do Stringgrid1.Rows[cnt1].Clear; end; der button welcher die werte in die stringgrid einfügt den hab ich folgenden quelltext unterzogen
Delphi-Quellcode:
und jetzt weiß ich nicht was ich mit den zwei anderen buttons machen soll
procedure TForm1.Button2Click(Sender: TObject);
begin if (stringgrid1.Row>stringgrid1.RowCount-2) then stringgrid1.RowCount:=stringgrid1.Rowcount+1; stringgrid1.Cells[0,stringgrid1.Row]:=(Edzeit.text); stringgrid1.Cells[1,stringgrid1.Row]:=(ComboBox1.Text); stringgrid1.Row:=stringgrid1.Row+1; anztimer:=stringgrid1.row; und was ich auch noch nicht versteh ist
Delphi-Quellcode:
soll ich bei machwas die gesamte procedure nocheinmal reinschreiben
procedure TForm1.Timer6Timer(Sender: TObject);
begin cbStrobe.checked:=false; cbData1.checked:=false; cbData3.checked:=false; cbData5.checked:=false; cbData7.checked:=false; [b]Machwas[/b]; |
Re: Aus stringgrid die daten nutzen
nochmals danke
ein problem ist noch aufgetreten also ich drücke den button und für die erste eingetragene zeit sind auch die gewünschten checkboxen checked aber dann rückt er nicht automatisch in die nächste celle ich muss erst nochmal den button drücken und dann fängt er mit der zweiten zeit an wie kann ich das problem lösen |
Re: Aus stringgrid die daten nutzen
Delphi-Quellcode:
Stringgrid1.Row:=index;
|
Re: Aus stringgrid die daten nutzen
ok und wo tu ich das einfügen?
|
Re: Aus stringgrid die daten nutzen
damit rückt der index bloß wieder in die erste celle aber trotzdem höhrt der auf zu zählen
und die checkboxen bleiben so wie sie sind |
Re: Aus stringgrid die daten nutzen
Ne schon gut hat sich erledigt es klappt so wie ich will
Dann möchte ich mich nochmal ganz herzlich bedanken du hast mir sehr geholfen ohne dich wär mein projekt in die brüche gegangen. Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz