![]() |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Hallo Xcessive_,
Danke für die umfangreiche Bug-Liste... Zu 1: In der aktuellen Version kommt diese Meldung theoretisch überhaupt nicht mehr Zu 2: Behoben Zu 3: Hm... Das Spiel ist eher suboptimal programmiert, das muss ich ehrlich zugeben. Das Sample soll ja auch eher die grafischen Effekte zeigen. Aber ich schau mal, was ich machen kann. Zu 4: Schick mir am Besten mal das gesammte Projekt, dann kann ich besser danach schauen. Nochmal Danke, Igel457 |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
hi Xcessive,
also so wie ich dein programmcode verstanden hab, hast du 2 Instanzen von TAddraw und versucht dan auf diesen zu rendern, das geht soweit ich weis nicht, oder igel ? ^^ probiers doch einfach mal so, mache eine instanz von Addraw und dann einfach eine unterschiedung
Delphi-Quellcode:
so in der art ;)
AdPerCounter.Calculate;
AdGameDraw.ClearSurface(clBlack); AdGameDraw.BeginScene; if Stage = 1 then begin AdSplashImgLst.Find('Splash').Draw(AdSplashDraw, 0, 0, 0); Inc(Frames); if Frames > 300 then Inc(Stage); end else if Stage = 0 then begin AdSpriteEngine.Move(AdPerCounter.TimeGap / 1000); AdSpriteEngine.Draw; AdSpriteEngine.Dead; if AdSpriteEngine.GetCountOfClass(TBrickSprite) = 0 then begin CreateLevel; end; end; AdGameDraw.EndScene; AdGameDraw.Flip; end; |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Du hast recht, das mit den beiden AdDraws habe ich übersehen... Das geht natürlich nicht!
|
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Danke für den Tipp. Ja, war blöd von mir, hätte ich auch selber drauf kommen können. Nein, das geht schon so wie ich das geschrieben habe, bloß wie gesagt, die Partikeleffekte sind nicht da, jedenfalls nicht bei dem Ball, aber bei der Explosion beim Treffer eines Steins. War etwas spät gestern :) Aber ich freue mich schon auf die weiteren Versionen, echt klasse. Werde wohl mal anfangen damit ein bissl zu basteln. Habe auch mal damit angefangen sowas zu schreiben, aber leider auf Grund von Zeitmangel wieder eingestampft. Und ich finde es super, dass jemand mal sowas für Delphi schreibt :thumb:
// edit: Die AdApps.pas in der Revision 1.2 im CVS ist leer, ist das richtig? ;) ![]() |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Zitat:
Jetzt nicht mehr... |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Zitat:
|
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Bei mir verschwinden die Ball-Partikel auch immer.
Ich hab auch noch nen paar mehr Probleme, aber da die Telekom streikt und hier Beispiele und so schon viel weiterhelfen, muss ich warten bis die rosanen aufhören und mein internet heile machen... :twisted: |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Ich bin auch begeistert, läuft alles super!
Allerdings, ist es normal, dass immer 50% CPU verbraucht werden? Das ist bei Dual-Core hier so, dann wäre das auf einem normalen PC 100%? Zweite Sache: Wie geht das mit der OpenGL-Geschichte? Weiter so! |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Hallo,
danke für das Lob. Das mit dem 100% liegt an dem OnIdle. Du kannst versuchen einfach ein Sleep(0) oder Sleep(1) in die Prozedur einzufügen, schon sinkt die Auslastung auf 4-3%. Allerdings beträgt die maximale Framerate dann 512FPS. Mit dem OpenGL geht das ganz einfach: Du kompilierst das Plugin und schreibst dann einfach AdDraw.DllName := 'AndorraOGL.dll'; Schon läuft's mit OpenGL. Allerdings werden (noch) weder Indexbuffer oder Lichter unterstützt. Igel457 |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Ha, so einfach... daran hätte ich eigentlich auch selber denken können :wink:
Jetzt springt der Lüfter vom Notebook nicht ständig an, da ist das arbeiten entspannter :) |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Mir ist gerade aufgefallen, dass das Koordinatensystem der Spriteengine genau andersrum gepolt is, wie das der einzelnen Sprites. Wäre nett, wenn du das ändern könntest.
|
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Das stimmt schon - die Spriteengine ist ja auch nur ein Sprite. Das kommt dir vermutlich nur so vor: Um den Bildschirmausschnitt nach rechts zu bewegen muss die Spriteengine logischerweise nach links. :-)
|
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Stimmt, wenn du das jetzt so sagst. Hat mich nur ein wenig irritiert.
|
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
in der aktuellen CVS-Version gibt es eine neue Unit: "AdSpriteEngineEx". Diese untersützt das Zoomen aus der Szene und Splitscreenss. Einfach die neue Unit einbinden und TSpriteEngine durch TSpriteEngineEx ersetzen Zoom:
Delphi-Quellcode:
Splitscreen:
SpriteEngineEx.Zoom := 1; //Normal
SpriteEngineEx.Zoom := 3; //3-mal verkleinert SpriteEngineEx.Zoom := 0.5; //Alles doppelt
Delphi-Quellcode:
Ich hoffe, diese Funktionen kann irgendjemand gebrauchen,
//"Bildschirm" 1
SpriteEngineEx.ViewPort := Rect(0,0,100,100); //Ausgabe auf (0|0;100|100) begrenzen SpriteEngineEx.Reset; //Nur bei der verwendung von TLightSprite benötigt SpriteEngineEx.Draw; //Zeichnen //"Bildschirm" 2 SpriteEngineEx.ViewPort := Rect(100,100,200,200); //Ausgabe auf (100|100;200|200) begrenzen SpriteEngineEx.Reset; //Nur bei der verwendung von TLightSprite benötigt SpriteEngineEx.Draw; //Zeichnen Igel457 Edit: Im Anhang ist ein Bildchen der neuen TAdEdit-Komponente |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Hi Igel,
ich möchte mit deiner Engine ein kleines (aber feines) Spiel umsetzen. Wie kann man den Effekt realisieren, dass ein Objekt links den Bildschirm verlässt und rechts wieder auftaucht (wie z.B. in Asteroids)? Gibt es dort einen einfachen Schalter oder muss man das selbst mit Verdoppelung der Objekte und synchronisiertem Raus-/reinschieben realisieren? Gruß, Andreas |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Das wirst du manuell machen müssen - Ich würde die DoDraw-Mathode der Sprites überschreiben und das Bild des Sprites ggf. zwei, drei, oder sogar viermal malen lassen. Und sobald es komplett über den einen Bildschirmrand verschoben hast, musst du die Koordinaten in die andere Ecke setzen. Mit den Kollisionen ist das Ganze ein wenig komplizierter - du kannst ja temporäre Dummy-Sprites erzeugen.
|
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Das sind so viele Seiten oder ich weis net wo was drin steht ^^
Naja ich wollte mal mit Delphi das öffnen und testen und naja habe ein AV bei:
Delphi-Quellcode:
Hoffe ich bekomme schnell hilfe, will des auch mal so ein wenig testen ^^
procedure TAdTexture.Initialize;
begin Finalize; FAd2DTexture := FParent.AdAppl.CreateBitmapTexture; end; Sieht net aus die Exe-Demos ^^ [Edit]Anleitung lesen! Naja okay etz hab ich die DLL sache gemacht^^ Naja etz steht da das die Datei die auf dem Ort was da steht vorhanden ist, das die dort irgendwie net da ist. Also der kann eine Vorhande Datei nicht finden. :?: --> Okay geht etz doch, hat nur so ausgesehen als würde die URL stimmen ^^[/Edit] MfG hui1991 |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
hi, kannste mal den GUI-Editor compiliert hochladen. mit Turbo Delphi klappts ja nicht weil man JVCL braucht. Und wenns irgendwie geht nicht mit 7zip packen. Danke
|
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Liste der Anhänge anzeigen (Anzahl: 1)
Da ich das ganze mit Turbo Delphi Explorer entwickle, sollte das schon gehen - einfach die JVCL und JCL entpacken und zum Suchpfad hinzufügen.
@hui1991 Wenn ich dich richtig verstanden habe, geht es jetzt oder? @Taron Ich habe den Editor trotzdem mal angehängt... |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Mal davon abgesehen, dass ich die Editoren und das OpenGL Plugin nicht compileiren kann streiken auch die GUI-Units...
Ich habe folgendes Problem: Schon wenn ich die Units nur einbinde (AdGUI, AdGUIConnector, AdSkin) hängt es beim compilieren.
Delphi-Quellcode:
Ich habe die JCL und JVCL problemlos installiert und benutze D2005 PE. Habe das ganze auch schon mit den aktuellen Dateien aus dem CVS probiert. Ist das Problem bekannt oder bin ich der einzige bzw. zu doof dazu...
[Fehler] JvSimpleXML.pas(2131): E2003 Undefinierter Bezeichner: 'RsEInvalidXMLElementUnexpectedCharacte'
[Fehler] JvSimpleXML.pas(2163): E2003 Undefinierter Bezeichner: 'RsEInvalidXMLElementUnexpectedCharacte_' [Fehler] JvSimpleXML.pas(2186): E2003 Undefinierter Bezeichner: 'RsEUnexpectedValueForLPos' [Fehler] JvSimpleXML.pas(2186): E2008 Inkompatible Typen [Fehler] JvSimpleXML.pas(2330): E2003 Undefinierter Bezeichner: 'RsEInvalidXMLElementExpectedBeginningO' [Fehler] JvSimpleXML.pas(2338): E2003 Undefinierter Bezeichner: 'RsEInvalidXMLElementExpectedEndOfTagBu' [Fehler] JvSimpleXML.pas(2344): E2003 Undefinierter Bezeichner: 'RsEInvalidXMLElementMalformedTagFoundn' [Fehler] JvSimpleXML.pas(2362): E2003 Undefinierter Bezeichner: 'RsEInvalidXMLElementErroneousEndOfTagE' [Fehler] JvSimpleXML.pas(2512): E2003 Undefinierter Bezeichner: 'RsEInvalidCommentExpectedsButFounds' [Fehler] JvSimpleXML.pas(2536): E2003 Undefinierter Bezeichner: 'RsEInvalidCommentNotAllowedInsideComme' [Fehler] JvSimpleXML.pas(2545): E2003 Undefinierter Bezeichner: 'RsEInvalidCommentUnexpectedEndOfData' [Fehler] JvSimpleXML.pas(2602): E2003 Undefinierter Bezeichner: 'RsEInvalidCDATAExpectedsButFounds' [Fehler] JvSimpleXML.pas(2633): E2003 Undefinierter Bezeichner: 'RsEInvalidCDATAUnexpectedEndOfData' [Fehler] JvSimpleXML.pas(2769): E2003 Undefinierter Bezeichner: 'RsEInvalidHeaderExpectedsButFounds' [Fehler] JvSimpleXML.pas(2807): E2003 Undefinierter Bezeichner: 'RsEInvalidCommentUnexpectedEndOfData' [Fehler] JvSimpleXML.pas(2872): E2003 Undefinierter Bezeichner: 'RsEInvalidHeaderExpectedsButFounds' [Fehler] JvSimpleXML.pas(2899): E2003 Undefinierter Bezeichner: 'RsEInvalidCommentUnexpectedEndOfData' [Fehler] JvSimpleXML.pas(2952): E2003 Undefinierter Bezeichner: 'RsEInvalidStylesheetExpectedsButFounds' [Fehler] JvSimpleXML.pas(2983): E2003 Undefinierter Bezeichner: 'RsEInvalidStylesheetUnexpectedEndOfDat' [Fehler] JvSimpleXML.pas(3087): E2003 Undefinierter Bezeichner: 'RsEInvalidDocumentUnexpectedTextInFile' [Fataler Fehler] AdGUI.pas(23): F2063 Verwendete Unit 'JvSimpleXML.pas' kann nicht compiliert werden |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Was passiert wenn du in eine neue VCL-Formularanwendung die Komponente TJvSimpleXML ziehst? Geht das? Verwendest du vielleicht gleichzeitig die eine Unit "JvSimpleXML", die in dem Prerequisitenpackage ist und gleichzeitig die JVCL einer neueren Version oder so was? Wie du siehst werden die Fehler ja nicht von einer meiner Units hervorgerufen.
|
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Also bei einem neuen Projekt mit der Komponente funktionert es genauso wenig...leider. Es werden die gleichen Fehler angezeigt. Ich habe alle Ordner in der Bibliothek durchsucht und nur die eine "JvSimpleXML.pas" gefunden...
|
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Mit der aktuellen CVS-Version kann man jetzt Kollisionen mit "PixelCheck" durchführen. Dazu einfach die Eigenschaft "PixelCheck" des Sprites auf true setzten. Dabei wird der aktuelle Alphachannel verwendet. "PixelCheck" funtioniert noch nicht mit Rotationen!
Ich hoffe, das dieses Feature zu gebrauchen ist. |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Ist die Funktionsweise so zu sehen, dass etwa ein Bild, was einen Kreis enthält nur mit dem wirklichen Kreis kollidiert und nicht mit dem Rechteck des Bildes? Das kostet doch dann bestimmt viel Performance...oder?
|
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Die Performanceauslastung hält sich in grenzen, solange es sich um kleinere Bilder handelt - man sollte auch nicht bei einem Spiel mit tausenden Sprites für jedes PixelCheck einschalten - halt nur für die, bei denen es wirklich nötig ist.
Edit: Bei zwei 100x100px großen Bilder dauert eine Kollision 0,2 ms (auf jeden fall bei mir mit einem 3GHz Prozessor) - sprich 5000FPS. |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
PixelCheck wär für mein Programm wirklich sehr gut zu gebrauchen. Allerdings benötige ich die Rotationen auch.
Muss ich bei mir mal antesten wie es mit der Performance bestellt ist. Denn es kann schon mal vorkommen, dass ich 50 Sprites Pixelchecken lassen will. |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Ich werde mich darum kümmern, dass das mit der Rotation bald funktioniert - das Problem ist nämlich nicht ganz Trivial. Die Performance der Überprüfungsmethode könnte man noch um einiges steigern, doch ich denke, dass das momentan ersteinmal schnell genug ist.
|
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Andreas,
ich versuch gerade eine GUI zu laden, jedoch wird nur ein Mauszeiger angezeigt, den man auch nicht verschieben kann. Relevanter Code:
Delphi-Quellcode:
Die Datei GUI.axg hänge ich hier mal an. Die anderen Dateien (sunna.axs, cursors.xml, cursors.ail) hab ich auch dem Toolsordner entnommen.
// DrawMenu
if not FMenuLoaded then MenuState := Menu; with FEngine do begin FAdDraw.ClearSurface(clBlack); FAdDraw.BeginScene; FAdGUI.Update(FAdPerformanceCounter.TimeGap / 1000); FAdDraw.EndScene; FAdDraw.Flip; end; // SetMenuState if Value <> FMenuState then begin FMenuLoaded := false; FMenuState := Value; // Menüdaten laden case FMenuState of msMainMenu: begin FAdGUI.LoadFromFile('GUI.axg'); FMenuLoaded := true; end; msNone: fMenuLoaded := false; end; end; // Idle FAdPerformanceCounter.Calculate; if FAdDraw.CanDraw then begin case State of gsMainMenu: begin FGUI.DrawMenu(msMainMenu); end; end; end; Done := false; // OnCreate von TGUI FAdGUI := TAdGui.Create(FEngine.FAdDraw); FAdGUI.Skin.LoadFromFile('sunna.axs'); FAdGUI.Cursors.LoadFromFile('cursors.xml'); FAdGUI.DesignMode := false; Runtergeladen hab ich heute von Deiner Seite die Version 0.20 ALPHA. |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Hallo Manuel,
für dein Problem gibt es vermutlich 2 Ursachen: - du musst die Unit AdComponents einbinden - und du musst die Events deines Formulars mit den Events der GUI Verknüpfen - am besten über TAdGuiConnector in der Unit AdGUIConnector (oder so ähnlich) Dann sollte es eigentlich gehen. |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Hi Andreas!
Die Unit AdComponents hat geholfen! Danke =) Jetzt hab ich eine weitere Frage: Wie kann ich die GUI mittig zentrieren? Ich hab schon Versucht AdGUI.X und AdGUI.Y zu setzen, jedoch zeigen sich da keine Veränderungen. |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Die GUI kannst du nicht zentrieren, dafür aber das Formular über GUI.FindComponent('Form1').X/Y... Aber das Formular bekommt noch wie in der VCL eine entsprechende Eigenschaft.
PS: Vielleicht wäre es besser gewesen, du hättest einen neuen Thread aufgemacht. Ist ist schließlich kein Bug, sondern eher ein allgemeines Problem ;-). Sonst wird es hier so unübersichtlich... |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Stimmt sorry.
Hier noch kurz die Lösung:
Delphi-Quellcode:
// var frm: TAdForm;
frm := (FAdGUI.FindComponent('frm') as TAdForm); frm.X := (FEngine.FAdDraw.Display.Width / 2) - (frm.Width / 2); frm.y := (FEngine.FAdDraw.Display.Height / 2) - (frm.Height / 2); |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
sag mal wie müsste ich es anstellen, wenn ich deine Engine unter Lazarus verwenden wollte ?
Habe ich dann richtige Komponenten oder nur Klassen ? |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Nur Klassen ;-)
|
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Ich meinte ob das Komponenten sind, die sich in die IDE einbauen.
Weil wenn es keine sind, brauche ich das gar nicht installieren ! edit: im Moment habe ich Probleme habe alle Dateien im SRC Verzeichnis der aktuellen Version in ein Packte gepackt aber er findet immer die Windows Unit nicht, was auch kein wunder ist ! weil ich unter Linux bin ! |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
@mimi
Sorry, habe ich vergessen umzuändern. Du musst in der Unit "AdDllLoader.pas" anstatt "Windows" "DynLibs" einbinden und das auch überall wo "Windows.irgendwas" steht hinschreiben - dann sollte es gehen. Es kann auch sein das dass Teil nicht "DynLibs" sondern "DynLib" heißt, da bin ich mir nicht mehr so sicher. Aber mit dem Linux wirst du so schnell keinen Erfolg erzielen - ich bin nämlich zu doof einen GLX OpenGL-Renderingcontext anzulegen (In dll/OpenGl/OGLMain.pas). Wenn du das hin bekommst bin ich dir natürlich sehr sehr dankbar. Apropos OpenGL - ich habe das Ganze mal erweitert. Jetzt gehen auch die IndexBuffer (braucht man um das Vertexlighting besser aussehen zu lassen, für Models und 3D-Heightmaps (nein, die implementiere ich nicht ;-))) und Ambientlighting. Und wo ich gerade dabei bin: Hat vielleicht jemand Lust eine Art FAQ für Andorra 2D zu erstellen, am besten in verschiedene Kategorien (Installation, Spriteengine, GUI, Drawing) unterteilt - es kommen nämlich oft immer wieder die selben Fragen auf. Ich selbst habe gerade keine Zeit das zu machen. Man müsste einfach mal diesen Thread und diese [dp]Andorra*[/dp] Threads durchgehen. Schön wäre es, wenn die FAQ auf Englisch sind (wobei eine zusätzliche Deutsche Version auch nicht schaden würden). Also, wenn jemand Zeit und Lust hat, einfach hier melden und mir dann als PN schicken, ich formatiere das dann und stelle es auf die Website. @Die Muhkuh Ich habe vergessen, dass TAdForm schon seit einem Monat eine Property "Center" besitzt, mit der man das Ganze zentrieren kann. Danke fürs Testen und Verwenden (der Hinweis im ersten Beitrag gilt übrigens immer noch), igel457 |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Also:
Unit Ad3DObj musste ich: Buffer.Vertices := vert; ändern, ich weiß gar nicht mehr was da vohrer stand ! in der gleichen Unit musste ich bei FParent.RegisterNotifyEvent(@Notify); ein @ hinzufügen. Unit AdApps Dort hänge ich fest: weil er TPictureCollection nicht finden. ich habe Irgendwo gelesen das du das umgeändert hast, aber in was ? Sobald ich das Package fehlerfrei Kompilieren kann, werde ich mal versuchen ob ich so ein OpenGl Context unter Linux erzeugen kann. Geht es nur darum ? Ach ja wenn das Packge fehlerfrei läuft kann ich es dir ja zukommen lassen. Evlt. ! dynlibs wahr richtig. edit: Unit AdDraws um GetTickCount zu finden musste ich lclinft einbinden ! |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
TPictureCollection => TAdImageList
|
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
doch nicht !
edit: jetzt doch: ich häng in der unit pngimage fest und zwar wird die Funktion oder was auch immer CopyMemory nicht gefunden. Ich habe alle Dateien zum Package hinzugefügt ! |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.20 AL
Sorry das ich erst so spät Antworte, ich hatte da ein kleines Problemchen.
Für was willst du ein Package erstellen? Es gibt doch nichts zum Installieren. Es langt wenn du den src Ordner zum Suchpfad hinzufügst. PngImage ist nur für Windows - damit hast du unter Linux garantiert keinen Erfolg. Darum würde ich dir vorschlagen einfach die Unit AdPNG nicht einzubinden und einfach selbst eine Loader-Klasse zu implementieren, wenn du PNGs benötigen solltest. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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