![]() |
Quadratische fkt. Zeichnet nicht
hallo leute,
ich hab kein plan wieso die zeichnung bei mir net funzt. hab schon mit vielen algos probiert aber dieser sollte funktionieren...aber..
Delphi-Quellcode:
danke im vorraus!!
1 unit function_main;
2 3 interface 4 5 uses 6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 7 Grids, StdCtrls, ExtCtrls, ToolWin, ComCtrls; 8 9 type 10 TForm1 = class(TForm) 11 FunctionBox: TPaintBox; 12 btSolve: TButton; 13 ed_a: TEdit; 14 ed_b: TEdit; 15 ed_c: TEdit; 16 Label1: TLabel; // --- 17 Label2: TLabel; // Labels werden nicht unbedingt benötigt 18 Label3: TLabel; // --- 19 edbereich: TEdit; 20 edscalex: TEdit; 21 btReset: TButton; 22 edscaley: TEdit; 23 procedure btSolveClick(Sender: TObject); 24 procedure FormPaint(Sender: TObject); 25 procedure ClearBox(); 26 procedure btResetClick(Sender: TObject); 27 private 28 { Private-Deklarationen } 29 public 30 { Public-Deklarationen } 31 end; 32 33 var 34 Form1: TForm1; 35 36 implementation 37 38 {$R *.DFM} 39 40 procedure TForm1.btSolveClick(Sender: TObject); 41 var i,a,b,c,bereich,goright,goup: Integer; 42 y1,y2,scalex,scaley: Real; 43 begin 44 bereich:= Round(StrToInt(edbereich.Text)/2); //Breite eines Parabelastes 45 scalex:= StrToFloat(edscalex.Text); //Zoomfaktor für x-Achse(z.B. wenn man Breite halbieren will ScaleX:= 0,5) 46 scaley:= StrToFloat(edscaley.Text); //Zoomfaktor für y-Achse 47 48 goright:= Round(FunctionBox.Width/2); //GoRight schiebt Fkt nachrechts um sie in die Mitte zu bringen 49 goup:= Round(FunctionBox.Height/2); //GoUp schiebt Fkt nach oben umsie in die Mitte zu bringen 50 51 For i:= -(bereich) to (bereich-1) do 52 begin 53 a:= StrToInt(ed_a.Text); 54 b:= StrToInt(ed_b.Text); 55 c:= StrToInt(ed_c.Text); 56 y1:= (a*(i*i)+b*i+c); //Funktion für x alsAusgangspunkt für die Linie 57 y2:= (a*((i+1)*(i+1))+b*(i+1)+c); //Funktion für dennachfolgenden Wert von x für Endpunkt der Linie 58 59 with FunctionBox do 60 begin 61 Canvas.Pen.Color:= clBlack; 62 Canvas.MoveTo(Round((i)*scalex + goright), Height-Round(y1*scaley) -goup); 63 //MoveTo läst denCanvaszeiger zum Ausgangspunkt gehen 64 //*ScaleY skalliert die Parbel(kann man als einfachen Zoom verstehen) 65 //z.B.: Verdoppeln entspricht2; Halbieren entspricht 0,5 66 Canvas.LineTo(Round((i+1)*scalex + goright), Height-Round(y2*scaley) -goup); 67 //LineTo ziechnet eine Linievon Ausgangspunkt zu Endpunkt 68 //also von (x1,y1) zu (x2,y2)wobei x1=i, x2=(i+1), y1,y2 wurden vorher berechnet 69 //So wird die ganze Funktion im Bereich durchgerechnet und von jedem Punktzum nächsten eine Linie gezeichnet 70 end; 71 end; 72 end; 73 74 procedure TForm1.ClearBox(); //Prozedur, die ein simples Koordinatensystemzeichnet 75 begin 76 with FunctionBox do 77 begin 78 Canvas.Pen.Color:= clGray; 79 Canvas.Brush.Color:= clWhite; 80 Canvas.Rectangle(0,0,Width,Height); //zeichnet Rahmen 81 Canvas.MoveTo(0,round(Height/2)); 82 Canvas.LineTo(Width,round(Height/2)); //zeichnet x-Achse 83 Canvas.MoveTo(round(Width/2),0); 84 Canvas.LineTo(round(Width/2),Width); //zeichnet y-Achse 85 end; 86 end; 87 88 procedure TForm1.FormPaint(Sender: TObject); 89 begin 90 ClearBox(); 91 end; 92 93 procedure TForm1.btResetClick(Sender: TObject); 94 begin 95 ClearBox(); 96 end; 97 98 end. |
Re: Quadratische fkt. Zeichnet nicht
Zitat:
|
Re: Quadratische fkt. Zeichnet nicht
Schau dir mal dein OnPaint Event an... Da sollte sofort klar werden, dass das nix wird!
Da rufst du nur ein ClearBox auf. |
Re: Quadratische fkt. Zeichnet nicht
hätte ihr eine lösung für mich wie ich das am besten realisieren soll...ich bin echt verzweifelt sitze schon lange an deisem algo :shock:
|
Re: Quadratische fkt. Zeichnet nicht
Delphi-Quellcode:
Versuch mal so :mrgreen:
procedure TForm1.FormPaint(Sender: TObject);
begin // ClearBox(); end; |
Re: Quadratische fkt. Zeichnet nicht
das ist ja das problem...wenn ichs weglasse funzt es auch nicht :cry:
|
Re: Quadratische fkt. Zeichnet nicht
Häng das Projekt mal an.
|
Re: Quadratische fkt. Zeichnet nicht
Liste der Anhänge anzeigen (Anzahl: 1)
hier
|
Re: Quadratische fkt. Zeichnet nicht
Ich habe mal eine private Variable eingefügt.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) ed_a: TEdit; ed_b: TEdit; ed_c: TEdit; edbereich: TEdit; edscalex: TEdit; edscaley: TEdit; btsolve: TButton; btreset: TButton; functionbox: TPaintBox; procedure btSolveClick(Sender: TObject); procedure ClearBox(); procedure btResetClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure functionboxPaint(Sender: TObject); private { Private-Deklarationen } FHasFunction: Boolean; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.btSolveClick(Sender: TObject); var i,a,b,c,bereich,goright,goup: Integer; y1,y2,scalex,scaley: Real; begin bereich:= Round(StrToInt(edbereich.Text)/2); //Breite eines Parabelastes scalex:= StrToFloat(edscalex.Text); //Zoomfaktor für x-Achse(z.B. wenn man Breite halbieren will ScaleX:= 0,5) scaley:= StrToFloat(edscaley.Text); //Zoomfaktor für y-Achse goright:= Round(FunctionBox.Width/2); //GoRight schiebt Fkt nachrechts um sie in die Mitte zu bringen goup:= Round(FunctionBox.Height/2); //GoUp schiebt Fkt nach oben umsie in die Mitte zu bringen ClearBox; FHasFunction := true; For i:= -(bereich) to (bereich-1) do begin a:= StrToInt(ed_a.Text); b:= StrToInt(ed_b.Text); c:= StrToInt(ed_c.Text); y1:= (a*(i*i)+b*i+c); //Funktion für x alsAusgangspunkt für die Linie y2:= (a*((i+1)*(i+1))+b*(i+1)+c); //Funktion für dennachfolgenden Wert von x für Endpunkt der Linie with FunctionBox do begin Canvas.Pen.Color:= clBlack; Canvas.MoveTo(Round((i)*scalex + goright), Height-Round(y1*scaley) -goup); //MoveTo läst denCanvaszeiger zum Ausgangspunkt gehen //*ScaleY skalliert die Parbel(kann man als einfachen Zoom verstehen) //z.B.: Verdoppeln entspricht2; Halbieren entspricht 0,5 Canvas.LineTo(Round((i+1)*scalex + goright), Height-Round(y2*scaley) -goup); //LineTo ziechnet eine Linievon Ausgangspunkt zu Endpunkt //also von (x1,y1) zu (x2,y2)wobei x1=i, x2=(i+1), y1,y2 wurden vorher berechnet //So wird die ganze Funktion im Bereich durchgerechnet und von jedem Punktzum nächsten eine Linie gezeichnet end; end; end; procedure TForm1.ClearBox(); //Prozedur, die ein simples Koordinatensystemzeichnet begin with FunctionBox do begin Canvas.Pen.Color:= clGray; Canvas.Brush.Color:= clWhite; Canvas.Rectangle(0,0,Width,Height); //zeichnet Rahmen Canvas.MoveTo(0,round(Height/2)); Canvas.LineTo(Width,round(Height/2)); //zeichnet x-Achse Canvas.MoveTo(round(Width/2),0); Canvas.LineTo(round(Width/2),Width); //zeichnet y-Achse end; end; procedure TForm1.FormCreate(Sender: TObject); begin FHasFunction := false; end; procedure TForm1.functionboxPaint(Sender: TObject); begin if FHasFunction then btSolveClick(self) else ClearBox; end; procedure TForm1.btResetClick(Sender: TObject); begin FHasFunction := false; invalidate; end; end. |
Re: Quadratische fkt. Zeichnet nicht
danke!!!
nur eine frage hätte ich noch vielleicht....wie schaft man die eintelung in längeneinheiten auf den achsen? |
Re: Quadratische fkt. Zeichnet nicht
Du meinst "Markierungsstriche"? Einfach in ClearBox ausrechnen und in 2 Schleifen zeichnen.
|
Re: Quadratische fkt. Zeichnet nicht
Zitat:
|
Re: Quadratische fkt. Zeichnet nicht
für euch ist es einfach aber ich sitze schon seit stunden und bin immer noch nicht fertig...hab schon so ein kopf...
ich denk mal ich bin zu dumm für so etwas.....natürlich soll ich net immer fertige algos erfragen sondern selber denken.....aber langsam geht nichts mehr bei mir rein :roll: :?: teechart.....kommt mir zwar jetzt bekannt vor aber...i dont know what u mean^^ |
Re: Quadratische fkt. Zeichnet nicht
Also wenn Du das nicht in Deiner Komponentenpallette hast, war mein Kommentar nicht besonders hilfreich. Falls doch, klick Dir das auf Dein Formular, und drücke F1.
|
Re: Quadratische fkt. Zeichnet nicht
sieht nicht so aus.....finde nichts dazu unter index(suche)
gibts nur TChart...keine ahnung was das macht...irgendeine große komponente |
Re: Quadratische fkt. Zeichnet nicht
Mein Fehler. Ich meine TChart.
Das ist schade. Das nimmt einem eine Menge Arbeit ab. Achsen zeichnen und Werte in Pixel umrechnen usw. Wenn Dir das nicht gefällt, dann muss ich DeddyH dann doch Recht geben. Du brauchst also ein Dingens (ich schreib da immer eine Funktion mit TPoint Parameter), was Funktionswerte in Bildschirmkoordinaten umwandelt. Das rufst Du dann auf innerhalb einer Schleife, und machst einen Strich. |
Re: Quadratische fkt. Zeichnet nicht
Zitat:
Das ist im Grunde nichts anderes als eine Grafikkomponente mit allen möglichen Diagrammarten (Balken, Linien...), so wie du es vermutlich auch aus Excel kennst. Damit liesse sich natürlich auch deine Parabel zeichnen. Der Vorteil, du musst dich nicht um irgendwelche Skalierungen kümmern, sondern setzt nur beliebig deine (x,y) Punkte, und zwar in dem mathematischen Koordinatensystem deiner Wahl. |
Re: Quadratische fkt. Zeichnet nicht
jo tchart hab ich ....aber sagt mir bitte wie ichs umsetzen soll.....ich möchte so gerne das heute fertig kriegen danke :stupid:
|
Re: Quadratische fkt. Zeichnet nicht
Steht doch schon oben: F1
Zieh dir mal die Kompo auf dein Form und mach ein Doppelklick drauf, und du kannst loslegen. |
Re: Quadratische fkt. Zeichnet nicht
ja aber das sind soviele optionen drin ich weiss doch garnet was ich da auswählen soll????
bei hilfe kommt fehlermeldung :evil: |
Re: Quadratische fkt. Zeichnet nicht
Es wäre ja schon einmal hilfreich zu wissen, mit welcher Delphi-Version Du arbeitest.
|
Re: Quadratische fkt. Zeichnet nicht
borland delphi 2005
|
Re: Quadratische fkt. Zeichnet nicht
Auha, das ist so ziemlich das gruseligste Delphi, das jemals herausgekommen ist. Funktioniert F1 denn bei anderen Komponenten wie z.B. TButton?
|
Re: Quadratische fkt. Zeichnet nicht
Ich werde wieder paranoid.
|
Re: Quadratische fkt. Zeichnet nicht
:cyclops: Ich bin ein Star, holt mich hier raus :mrgreen:
|
Re: Quadratische fkt. Zeichnet nicht
ihr glaubt nicht wies mir geht :pale:
hat jemand eine idee wie ich das machen könnte? es müssen halt am besten die einheiten da stehen, falls möglich... aber wie bring ich das auszählen in die prozedur??? wenn mir keiner helfen kann dann könnt ihr den thread schließen.. |
Re: Quadratische fkt. Zeichnet nicht
kann mir den wirklich keiner helfen? :wall: :wall: :wall: :wall: :wall: :wall:
|
Re: Quadratische fkt. Zeichnet nicht
Nee, ich werde genau das tun, was ich immer tu, wenn ich paranoid werde: Ins Bett gehen und mir die Decke über den Kopf ziehen. Das hilft sofort.
A propos "hilft" - Ich würde mich nie trauen, Delphi ohne eine funktionierende Hilfefunktion zu benutzen. Den ganzen Kram kann sich doch keine Sau merken. |
Re: Quadratische fkt. Zeichnet nicht
also mit TChart habe ich noch nie gearbeitet, aber ich habe schon Plotter (bis 5. Grad) geschrieben.
Willst du das jetzt mit TChart machen (dann kann ich nicht helfen) oder mit Canvas (dann ja) mfg Looper |
Re: Quadratische fkt. Zeichnet nicht
egal hauptsache ich kriegs hin es muss hauptsache funktionieren^^
|
Re: Quadratische fkt. Zeichnet nicht
Hast du denn überhaupt schon etwas von dem probiert, was dir hier gesagt wurde. Sich einfach nur "dumm" stellen und denken, dass dir hier einer eine Lösung auf dem Silbertablett präsentiert, das wird wohl kaum der Fall sein.
Wo genau hakt es denn bei TChart? |
Re: Quadratische fkt. Zeichnet nicht
genau das problem ist es ja ich kann mirs überhaupt nicht vorstellen!
also wenn ich dan den graph über den tchart ausgebe sieht es dann genau so aus wie bei der tpaintbox odet timage.(ohne jegliche einteilung) wenn ich im design menü doppelklick auf tchart mache ..dankt ein menü über versch einstellungen un diagramme....aber was soll ich dort drin jetzt einstellen??? |
Re: Quadratische fkt. Zeichnet nicht
Funktioniert dieser Quellcode richtig?
Delphi-Quellcode:
Wenn ja, dann arbeite doch damit weiter.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) ed_a: TEdit; ed_b: TEdit; ed_c: TEdit; edbereich: TEdit; edscalex: TEdit; edscaley: TEdit; btsolve: TButton; btreset: TButton; functionbox: TPaintBox; procedure btSolveClick(Sender: TObject); procedure ClearBox(); procedure btResetClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure functionboxPaint(Sender: TObject); private { Private-Deklarationen } FHasFunction: Boolean; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.btSolveClick(Sender: TObject); var i,a,b,c,bereich,goright,goup: Integer; y1,y2,scalex,scaley: Real; begin bereich:= Round(StrToInt(edbereich.Text)/2); //Breite eines Parabelastes scalex:= StrToFloat(edscalex.Text); //Zoomfaktor für x-Achse(z.B. wenn man Breite halbieren will ScaleX:= 0,5) scaley:= StrToFloat(edscaley.Text); //Zoomfaktor für y-Achse goright:= Round(FunctionBox.Width/2); //GoRight schiebt Fkt nachrechts um sie in die Mitte zu bringen goup:= Round(FunctionBox.Height/2); //GoUp schiebt Fkt nach oben umsie in die Mitte zu bringen ClearBox; FHasFunction := true; For i:= -(bereich) to (bereich-1) do begin a:= StrToInt(ed_a.Text); b:= StrToInt(ed_b.Text); c:= StrToInt(ed_c.Text); y1:= (a*(i*i)+b*i+c); //Funktion für x alsAusgangspunkt für die Linie y2:= (a*((i+1)*(i+1))+b*(i+1)+c); //Funktion für dennachfolgenden Wert von x für Endpunkt der Linie with FunctionBox do begin Canvas.Pen.Color:= clBlack; Canvas.MoveTo(Round((i)*scalex + goright), Height-Round(y1*scaley) -goup); //MoveTo läst denCanvaszeiger zum Ausgangspunkt gehen //*ScaleY skalliert die Parbel(kann man als einfachen Zoom verstehen) //z.B.: Verdoppeln entspricht2; Halbieren entspricht 0,5 Canvas.LineTo(Round((i+1)*scalex + goright), Height-Round(y2*scaley) -goup); //LineTo ziechnet eine Linievon Ausgangspunkt zu Endpunkt //also von (x1,y1) zu (x2,y2)wobei x1=i, x2=(i+1), y1,y2 wurden vorher berechnet //So wird die ganze Funktion im Bereich durchgerechnet und von jedem Punktzum nächsten eine Linie gezeichnet end; end; end; procedure TForm1.ClearBox(); //Prozedur, die ein simples Koordinatensystemzeichnet begin with FunctionBox do begin Canvas.Pen.Color:= clGray; Canvas.Brush.Color:= clWhite; Canvas.Rectangle(0,0,Width,Height); //zeichnet Rahmen Canvas.MoveTo(0,round(Height/2)); Canvas.LineTo(Width,round(Height/2)); //zeichnet x-Achse Canvas.MoveTo(round(Width/2),0); Canvas.LineTo(round(Width/2),Width); //zeichnet y-Achse end; end; procedure TForm1.FormCreate(Sender: TObject); begin FHasFunction := false; end; procedure TForm1.functionboxPaint(Sender: TObject); begin if FHasFunction then btSolveClick(self) else ClearBox; end; procedure TForm1.btResetClick(Sender: TObject); begin FHasFunction := false; invalidate; end; end. mfg Looper |
Re: Quadratische fkt. Zeichnet nicht
arbeite weiter...bloß an was?
wir haben im informatik unterricht noch nie mit canvas programmiert....ich hab mir mit mühe hier das zeug herausgehollt. hab aber wirklich kp wie ich weiter machen soll.... :wall: |
Re: Quadratische fkt. Zeichnet nicht
Naja, mir fällt da noch eine "Schummellösung" ein: eine Vektorgrafik (wmf, als Klassen TMetaFile und TMetaFileCanvas) im Speicher erzeugen, dort alles maßstabgetreu drauf zeichnen und diese dann per StretchBlt auf die PaintBox klatschen, erspart eine Menge Arbeit beim Skalieren.
|
Re: Quadratische fkt. Zeichnet nicht
:shock:
ich bereuhe es informatik leistungskurs genommen zu haben....ich verstehe nur bahnhof :wiejetzt: |
Re: Quadratische fkt. Zeichnet nicht
Also ich gebe jetzt einfach mal ein Beispiel, wie ich das machen würde (vielleicht nicht die beste Methode, aber sie funktioniert und ist einfach zu verstehen - hoffe ich jedenfalls):
Du nimmst dir ein Image und gibst ihm eine gewisse Breite (Width, z.B. 800) und Höhe (Height, z.B. 600). Nun hat die Imagekomponente sein eigenes Canvas (=Leinwand). Auf diesem Canvas kannst du jedes einzelne Pixel ansprechen und färben oder auch Linien, Kreise, Rechtecke, etc. zeichnen. Als Angabe gibtst du immer die Pixel an und zwar ist die Position 0|0 oben links in der Ecke und 800|600 unten rechts. Hoffe das hast du soweit verstanden, wenn du Fragen zu Befehlen des Canvas hast, siehe hier: ![]() Und jetzt die Idee zum Zeichnen. Als erstes malst du ein Koordinatenkreuz mit den Methoden
Delphi-Quellcode:
Nun legst du zwei Variablen an: EinheitX und EinheitY, beide vom Typ Single. Diese Einheiten brauchst du um eine Skalierung hinzubekommen und den Graph richtig zu zeichnen.
//Koordinatenkreuz zeichnen
Image1.Canvas.MoveTo(Image1.Width div 2,0); //Cursor bewegt sich oben mitte Image1.Canvas.LineTo(Image1.Width div 2,Image1.Height); //Cursor zeichnet unten mitte Image1.Canvas.MoveTo(0, Image1.Height div 2); //Cursor bewegt sich nach links mitte Image1.Canvas.LineTo(Image1.Width, Image1.Height div 2); //Cursor zeichnet rechts mitte EinheitX ist leicht auszurechnen: Teile einfach die Breite des Images durch die Anzahl deiner X. Wenn du z.B. den Graphen von -5 bis 5 X zeichnen willst, dann hats du 11x (Die 0 zählt mit) also ist
Delphi-Quellcode:
Bei EinheitY brauchst du den maximalen Funktionswert für deine X-Spanne, also wenn du die Funktion X^2 zeichnest (von X = -2 .. 2) dann ist der maximale Funktionswert = 4, da 2^2 bzw. -2^2 = 4 ist.
EinheitX := Image1.Width / 11;
Also rechnest du
Delphi-Quellcode:
Das "*2" ist wichtig, weil du ja das feste Koordinatenkreuz in der Mitte hast.
EinheitY := Image1.Height / 4 * 2
Wie du den maximalen Funktionswert herausbekommt kannst du ja mal überlegen. Tipp: Schleife Nun musst du hinterher nur noch zeichnen und die Skalierungen vornehmen, aber versuche erstmal das oben genannte zu verstehen. Bei Fragen immer her damit. Ich werde mein Bestes versuchen :wink: mfg Looper [Edit] Gib nicht auf, wenn du den Grundgedanken raus hast, is es gnaz leicht! |
Re: Quadratische fkt. Zeichnet nicht
OK, schau Dir mal dieses Beispiel an (hat jetzt nix mit der Vektorgrafik zu tun):
Delphi-Quellcode:
procedure TForm1.ClearBox(); //Prozedur, die ein simples Koordinatensystemzeichnet
const Abst = 10; //10 Pixel Abstand zwischen den Markierungen var x,y,i: integer; begin with FunctionBox do begin Canvas.Pen.Color:= clGray; Canvas.Brush.Color:= clWhite; Canvas.Rectangle(0,0,Width,Height); //zeichnet Rahmen y := round(Height/2); //Markierungen von der Mitte nach unten while y < Height do begin Canvas.MoveTo(round(Width/2) - 5, y); Canvas.LineTo(round(Width/2) + 5, y); inc(y,Abst); end; y := round(Height/2); //Markierungen von der Mitte nach oben while y > 0 do begin Canvas.MoveTo(round(Width/2) - 5, y); Canvas.LineTo(round(Width/2) + 5, y); dec(y,Abst); end; x := round(Width/2); //Markierungen von der Mitte nach rechts while x < Width do begin Canvas.MoveTo(x,round(Height/2) + 5); Canvas.LineTo(x,round(Height/2) - 5); inc(x,Abst); end; x := round(Width/2); //Markierungen von der Mitte nach links while x > 0 do begin Canvas.MoveTo(x,round(Height/2) + 5); Canvas.LineTo(x,round(Height/2) - 5); dec(x,Abst); end; Canvas.MoveTo(0,round(Height/2)); Canvas.LineTo(Width,round(Height/2)); //zeichnet x-Achse Canvas.MoveTo(round(Width/2),0); Canvas.LineTo(round(Width/2),Width); //zeichnet y-Achse end; end; |
Re: Quadratische fkt. Zeichnet nicht
Zitat:
|
Re: Quadratische fkt. Zeichnet nicht
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 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-2025 by Thomas Breitkreuz