![]() |
in Laufzeit Objakt hinzufügen
wie kann man während der laufzeit ein objekt in die form hinzufügen?
|
Re: in Laufzeit Objakt hinzufügen
keiner ne idee wie ich ein edit feld oder eine checkbox einfügen kann (kann ja auch bei oncreate geschehen)
|
Re: in Laufzeit Objakt hinzufügen
z.B. mit:
Delphi-Quellcode:
Var MeinEdit : TEdit;
procedure TForm1.FormCreate(Sender: TObject); begin MeinEdit := TEdit.Create(TForm1); end; procedure TForm1.FormDestroy(Sender: TObject); begin MeinEditFreeAndNil(MeinEdit); end; |
Re: in Laufzeit Objakt hinzufügen
könnt das so gehn:
Delphi-Quellcode:
var MyButton: TButton;
begin MyButton := TButton.Create(Form1); with MyButton do begin Parent := Form1; Height := 32; Width := 128; Caption := 'Neuer Button'; Left := 50; Top := 50; OnClick:=ButtonXClick; end; end; |
Re: in Laufzeit Objakt hinzufügen
wenn Du vorher irgendwo in dieser Unit
Delphi-Quellcode:
deklariert hast sollte das so gehen...
procedure TForm1.ButonXClick(Sender:TObject)
|
Re: in Laufzeit Objakt hinzufügen
Zitat:
Durch den Paramter Form1 in MeinEdit := TEdit.Create(Form1); wird das Formular zum Besitzer des Objektes/Komponente. In diesem Fall kümmert sich das Formular um die Freigabe. |
Re: in Laufzeit Objakt hinzufügen
Recht hast Du Jens, aber unser (Delphi-)junger Freund hier scheint mir auf dem besten Wege, selbst dynamisch Controls in eigenen Routinen/Komponenten zu erzeugen und dort spätestens tauchen die ersten Schutzverletzungen oder Speicherleaks auf. Daher @Remote1: Wenn der Owner mal kein Form, sondern eine Komponente von Dir sein sollte, dann immer im OnDestroy daran denken, die dynamisch erzeugten Objecte wieder freizugeben. :zwinker:
|
Re: in Laufzeit Objakt hinzufügen
ich hab jetz eigentlich nur noch ein paar kleine probleme:
und zwar ist das allen ziemlich langwierig (muss ne menge obj erstellen und das dauert) kann man das nicht irgendwie verschnellern bzw die obj verankern (werden bei mir auf registrierkarte erstellt und bei einem change sind die ja dann wieder weg --> deshalb hab ich bei onchange das ganze drin, damit die halt wieder erstellt werden) |
Re: in Laufzeit Objakt hinzufügen
¿?
(zeig mal 'n bischen Code...) |
Re: in Laufzeit Objakt hinzufügen
Delphi-Quellcode:
und das dann bei onchange (bzw extra procedure
procedure cedit(ort:tcomponent; par:twincontrol; jahr:string; x,y:integer);
var MyEdit: TEdit; begin MyEdit := TEdit.Create(ort); with MyEdit do begin Parent := par; Height := 21; Width := 33; Text := jahr; Left := x; Top := y; end; end;
Delphi-Quellcode:
aber nach dem erstellen will ich alle edit felder auch wieder auslesen und ich hab keine ahnung wie ich die ansprechen soll (edit1 geht ja wohl nicht)
for i:=1 to 5 do
cedit(Form2.PageControl1, Form2.PageControl1, inttostr(1872+i), 16,32+32*i); for i:=1 to 34 do cedit(Form2.PageControl1, Form2.PageControl1, inttostr(1884+i), 16,160+32*i); ach ja, das alles soll ne art datenbank werden ich les halt aus einer ini datensätze aus und dementsprechend werden dann die obj erstellt |
Re: in Laufzeit Objakt hinzufügen
Zitat:
![]() |
Re: in Laufzeit Objakt hinzufügen
Du mußt Dir ein Plätzchen suchen, an dem Du Dir Deine Edits "merkst".
Wenn Du dann aus der procedure "cedit" eine Funktion machst:
Delphi-Quellcode:
dann liefert Dir die Funktion einen Zeiger auf das Edit zurück.
function cedit(DeineParameterliste) : TEdit;
begin Result := TEdit.Create(ort); Result.Top := DeinTopParameter; ... end; diesen könntest Du and Deinem sicheren Örtchen (z.B. MeinOertchen : Array [1..5] of TEdit) speichern. Wenn Du dann später etwas mit den Edits anstellen möchtest, (Text setzten/verschieben/Freigeben), dann kannst Du mit MeinOertchen[Index].Eigenschaft auf die Eigenschaften zugreifen oder mit FreeAndNil(MeinOertchen[Index]); das Edit wieder freigeben. Gruß |
Re: in Laufzeit Objakt hinzufügen
könnt ihr ,al durchkontrollieren
ist natürlich noch nicht fertig
Delphi-Quellcode:
unit Kaiserreich;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls,IniFiles, StdCtrls, ExtCtrls, Grids, ValEdit, dbcgrids, TabNotBk, OleServer, Access2000, Buttons; type TMuenzen= record Jahr:string[4]; praegung: array [1..9,1..2] of byte; end; TForm2 = class(TForm) PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; TabSheet3: TTabSheet; TabSheet4: TTabSheet; TabSheet5: TTabSheet; TabSheet6: TTabSheet; TabSheet8: TTabSheet; TabSheet9: TTabSheet; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; ComboBox1: TComboBox; Button2: TButton; A: TCheckBox; B: TCheckBox; C: TCheckBox; D: TCheckBox; E: TCheckBox; F: TCheckBox; G: TCheckBox; H: TCheckBox; J: TCheckBox; TabSheet7: TTabSheet; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Label20: TLabel; Label21: TLabel; Label22: TLabel; Label23: TLabel; Label24: TLabel; Label25: TLabel; Label26: TLabel; Label27: TLabel; Label28: TLabel; Label29: TLabel; Label30: TLabel; Label31: TLabel; Label32: TLabel; Label33: TLabel; Label34: TLabel; Label35: TLabel; Label36: TLabel; Label37: TLabel; Label38: TLabel; Label39: TLabel; Label40: TLabel; Label41: TLabel; Label42: TLabel; Label43: TLabel; Label44: TLabel; Label45: TLabel; Label46: TLabel; Label47: TLabel; Label48: TLabel; Label49: TLabel; Label50: TLabel; Label51: TLabel; Label52: TLabel; Label53: TLabel; Label54: TLabel; Label55: TLabel; Label56: TLabel; Label57: TLabel; Label58: TLabel; Label59: TLabel; Label60: TLabel; Label61: TLabel; Label62: TLabel; Label63: TLabel; Label64: TLabel; Label65: TLabel; Label66: TLabel; Label67: TLabel; Label68: TLabel; Label69: TLabel; Label70: TLabel; Label71: TLabel; Label72: TLabel; Label73: TLabel; Label74: TLabel; Label75: TLabel; Label76: TLabel; Label77: TLabel; Label78: TLabel; Label79: TLabel; Label80: TLabel; Label81: TLabel; Label82: TLabel; Label83: TLabel; Label84: TLabel; Label85: TLabel; Label86: TLabel; Label87: TLabel; Label88: TLabel; Label89: TLabel; Label90: TLabel; procedure FormShow(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure PageControl1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; MO1,MO2,MO5,MO10,MO20,MO50,MO100,MO25,MO1_2: Array [1..37] of Record myedit:tedit; mycheckbox: array [1..9] of TCheckBox; end; muenze:TMuenzen; f1,f2,f3,f5,f10,f20,f50,f100,f25,f1_2: file of TMuenzen; implementation {$R *.dfm} function cedit1(ort:tcomponent; par:twincontrol; jahr:string; x,y:integer) : TEdit; begin Result := TEdit.Create(ort); Result.Parent := par; Result.Height := 21; Result.Width := 33; Result.Text := jahr; Result.Left := x; Result.Top := y; Result.ReadOnly:=true; end; function ccheckbox(ort:tcomponent; par:twincontrol; hacken:byte; x,y:integer):TCheckBox; begin Result := TCheckBox.Create(ort); Result.Parent := par; Result.Height := 17; Result.Width := 25; Result.Caption := ''; if hacken=1 then Result.checked :=true else Result.checked :=false; Result.Left := x; Result.Top := y; end; procedure pfennig_1; var i,k:integer; begin try reset(f1); for i:=1 to filesize(f1) do begin read(f1,muenze); MO1[i].myedit:=cedit1(Form2.PageControl1.Pages[0], Form2.PageControl1.Pages[0], muenze.jahr, 16,32*i); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then MO1[i].mycheckbox[k]:=ccheckbox(Form2.PageControl1.Pages[0], Form2.PageControl1.Pages[0], muenze.praegung[k,2] , k*25+54,32*i); end; end; reset(f1); finally end; end; procedure pfennig_2; var i,k:integer; begin try reset(f2); for i:=1 to filesize(f2) do begin read(f2,muenze); MO2[i].myedit:=cedit1(Form2.PageControl1.Pages[1], Form2.PageControl1.Pages[1], muenze.jahr, 16,32*i); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then MO2[i].mycheckbox[k]:=ccheckbox(Form2.PageControl1.Pages[1], Form2.PageControl1.Pages[1], muenze.praegung[k,2] , k*25+54,32*i); end; end; reset(f2); finally end; end; procedure pfennig_5; var i,k:integer; begin try reset(f5); for i:=1 to filesize(f5) do begin read(f5,muenze); MO5[i].myedit:=cedit1(Form2.PageControl1.Pages[2], Form2.PageControl1.Pages[2], muenze.jahr, 16,32*i); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then MO5[i].mycheckbox[k]:=ccheckbox(Form2.PageControl1.Pages[2], Form2.PageControl1.Pages[2], muenze.praegung[k,2] , k*25+54,32*i); end; end; reset(f5); finally end; end; procedure pfennig_10; var i,k:integer; begin try reset(f10); for i:=1 to filesize(f10) do begin read(f10,muenze); MO10[i].myedit:=cedit1(Form2.PageControl1.Pages[3], Form2.PageControl1.Pages[3], muenze.jahr, 16,32*i); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then MO10[i].mycheckbox[k]:=ccheckbox(Form2.PageControl1.Pages[3], Form2.PageControl1.Pages[3], muenze.praegung[k,2] , k*25+54,32*i); end; end; reset(f10); finally end; end; procedure pfennig_20; var i,k:integer; begin try reset(f20); for i:=1 to filesize(f20) do begin read(f20,muenze); MO20[i].myedit:=cedit1(Form2.PageControl1.Pages[4], Form2.PageControl1.Pages[4], muenze.jahr, 16,32*i); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then MO20[i].mycheckbox[k]:=ccheckbox(Form2.PageControl1.Pages[4], Form2.PageControl1.Pages[4], muenze.praegung[k,2] , k*25+54,32*i); end; end; reset(f20); finally end; end; procedure pfennig_25; var i,k:integer; begin try reset(f25); for i:=1 to filesize(f25) do begin read(f25,muenze); MO25[i].myedit:=cedit1(Form2.PageControl1.Pages[5], Form2.PageControl1.Pages[5], muenze.jahr, 16,32*i); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then MO25[i].mycheckbox[k]:=ccheckbox(Form2.PageControl1.Pages[5], Form2.PageControl1.Pages[5], muenze.praegung[k,2] , k*25+54,32*i); end; end; reset(f25); finally end; end; procedure pfennig_50; var i,k:integer; begin try reset(f50); for i:=1 to filesize(f50) do begin read(f50,muenze); MO50[i].myedit:=cedit1(Form2.PageControl1.Pages[6], Form2.PageControl1.Pages[6], muenze.jahr, 16,32*i); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then MO50[i].mycheckbox[k]:=ccheckbox(Form2.PageControl1.Pages[6], Form2.PageControl1.Pages[6], muenze.praegung[k,2] , k*25+54,32*i); end; end; reset(f50); finally end; end; procedure pfennig_1_2; var i,k:integer; begin try reset(f1_2); for i:=1 to filesize(f1_2) do begin read(f1_2,muenze); MO1_2[i].myedit:=cedit1(Form2.PageControl1.Pages[7], Form2.PageControl1.Pages[7], muenze.jahr, 16,32*i); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then MO1_2[i].mycheckbox[k]:=ccheckbox(Form2.PageControl1.Pages[7], Form2.PageControl1.Pages[7], muenze.praegung[k,2] , k*25+54,32*i); end; end; reset(f1_2); finally end; end; procedure pfennig_100; var i,k:integer; begin try reset(f100); for i:=1 to filesize(f100) do begin read(f100,muenze); MO100[i].myedit:=cedit1(Form2.PageControl1.Pages[8], Form2.PageControl1.Pages[8], muenze.jahr, 16,32*i); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then MO100[i].mycheckbox[k]:=ccheckbox(Form2.PageControl1.Pages[8], Form2.PageControl1.Pages[8], muenze.praegung[k,2] , k*25+54,32*i); end; end; reset(f100); finally end; end; procedure TForm2.FormShow(Sender: TObject); begin pagecontrol1.Pages[0].Show; // pagecontrol1.TabIndex:=0; pfennig_1; pfennig_2; pfennig_5; pfennig_10; pfennig_20; pfennig_25; pfennig_50; pfennig_1_2; pfennig_100; Form2.PageControl1.Height:=32*filesize(f1)+128; end; procedure TForm2.Button2Click(Sender: TObject); var i,k:integer; begin seek(f3,filesize(f3)); muenze.Jahr:=combobox1.Items.Strings[combobox1.ItemIndex]; muenze.praegung[1,1]:=ord(a.Checked); muenze.praegung[2,1]:=ord(b.Checked); muenze.praegung[3,1]:=ord(c.Checked); muenze.praegung[4,1]:=ord(d.Checked); muenze.praegung[5,1]:=ord(e.Checked); muenze.praegung[6,1]:=ord(f.Checked); muenze.praegung[7,1]:=ord(g.Checked); muenze.praegung[8,1]:=ord(h.Checked); muenze.praegung[9,1]:=ord(j.Checked); write(f3,muenze); end; procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); var i,k:integer; begin try reset(f1); for i:=1 to filesize(f1) do begin read(f1,muenze); seek(f1,filepos(f1)-1); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then muenze.praegung[k,2]:=ord(mo1[i].mycheckbox[k].Checked); end; write(f1,muenze); end; except application.MessageBox('Es ist ein Fehler beim speichern der Datei'+#10#13+'"\...\kaiserreich\1_Pfennig"'+#10#13+'aufgetreten','Fehler',mb_ok+mb_iconerror); end; try reset(f2); for i:=1 to filesize(f2) do begin read(f2,muenze); seek(f2,filepos(f2)-1); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then muenze.praegung[k,2]:=ord(mo2[i].mycheckbox[k].Checked); end; write(f2,muenze); end; except application.MessageBox('Es ist ein Fehler beim speichern der Datei'+#10#13+'"\...\kaiserreich\2_Pfennig"'+#10#13+'aufgetreten','Fehler',mb_ok+mb_iconerror); end; try reset(f5); for i:=1 to filesize(f5) do begin read(f5,muenze); seek(f5,filepos(f5)-1); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then muenze.praegung[k,2]:=ord(mo5[i].mycheckbox[k].Checked); end; write(f5,muenze); end; except application.MessageBox('Es ist ein Fehler beim speichern der Datei'+#10#13+'"\...\kaiserreich\5_Pfennig"'+#10#13+'aufgetreten','Fehler',mb_ok+mb_iconerror); end; try reset(f10); for i:=1 to filesize(f10) do begin read(f10,muenze); seek(f10,filepos(f10)-1); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then muenze.praegung[k,2]:=ord(mo10[i].mycheckbox[k].Checked); end; write(f10,muenze); end; except application.MessageBox('Es ist ein Fehler beim speichern der Datei'+#10#13+'"\...\kaiserreich\10_Pfennig"'+#10#13+'aufgetreten','Fehler',mb_ok+mb_iconerror); end; try reset(f20); for i:=1 to filesize(f20) do begin read(f20,muenze); seek(f20,filepos(f20)-1); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then muenze.praegung[k,2]:=ord(mo20[i].mycheckbox[k].Checked); end; write(f20,muenze); end; except application.MessageBox('Es ist ein Fehler beim speichern der Datei'+#10#13+'"\...\kaiserreich\20_Pfennig"'+#10#13+'aufgetreten','Fehler',mb_ok+mb_iconerror); end; try reset(f25); for i:=1 to filesize(f25) do begin read(f25,muenze); seek(f25,filepos(f25)-1); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then muenze.praegung[k,2]:=ord(mo25[i].mycheckbox[k].Checked); end; write(f25,muenze); end; except application.MessageBox('Es ist ein Fehler beim speichern der Datei'+#10#13+'"\...\kaiserreich\25_Pfennig"'+#10#13+'aufgetreten','Fehler',mb_ok+mb_iconerror); end; try reset(f50); for i:=1 to filesize(f50) do begin read(f50,muenze); seek(f50,filepos(f50)-1); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then muenze.praegung[k,2]:=ord(mo50[i].mycheckbox[k].Checked); end; write(f50,muenze); end; except application.MessageBox('Es ist ein Fehler beim speichern der Datei'+#10#13+'"\...\kaiserreich\50_Pfennig"'+#10#13+'aufgetreten','Fehler',mb_ok+mb_iconerror); end; try reset(f1_2); for i:=1 to filesize(f1_2) do begin read(f1_2,muenze); seek(f1_2,filepos(f1_2)-1); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then muenze.praegung[k,2]:=ord(mo1_2[i].mycheckbox[k].Checked); end; write(f1_2,muenze); end; except application.MessageBox('Es ist ein Fehler beim speichern der Datei'+#10#13+'"\...\kaiserreich\1_2_Pfennig"'+#10#13+'aufgetreten','Fehler',mb_ok+mb_iconerror); end; try reset(f100); for i:=1 to filesize(f100) do begin read(f100,muenze); seek(f100,filepos(f100)-1); for k:=1 to 9 do begin if muenze.praegung[k,1]=1 then muenze.praegung[k,2]:=ord(mo100[i].mycheckbox[k].Checked); end; write(f100,muenze); end; except application.MessageBox('Es ist ein Fehler beim speichern der Datei'+#10#13+'"\...\kaiserreich\100_Pfennig"'+#10#13+'aufgetreten','Fehler',mb_ok+mb_iconerror); end; try closefile(f1); closefile(f2); closefile(f5); closefile(f10); closefile(f20); closefile(f50); closefile(f100); closefile(f25); closefile(f1_2); closefile(f3); except application.MessageBox('Es ist ein Fehler beim schließen der Dateien aufgetreten','Fehler',mb_ok+mb_iconerror); end; end; procedure TForm2.FormCreate(Sender: TObject); begin assignfile(f1,pchar(ExtractFilePath(Application.ExeName)+'data\kaiserreich\1_pfennig.ini')); if fileexists(ExtractFilePath(Application.ExeName)+'data\kaiserreich\1_pfennig.ini') then reset(f1) else rewrite(f1); assignfile(f2,pchar(ExtractFilePath(Application.ExeName)+'data\kaiserreich\2_pfennig.ini')); if fileexists(ExtractFilePath(Application.ExeName)+'data\kaiserreich\2_pfennig.ini') then reset(f2) else rewrite(f2); assignfile(f5,pchar(ExtractFilePath(Application.ExeName)+'data\kaiserreich\5_pfennig.ini')); if fileexists(ExtractFilePath(Application.ExeName)+'data\kaiserreich\5_pfennig.ini') then reset(f5) else rewrite(f5); assignfile(f10,pchar(ExtractFilePath(Application.ExeName)+'data\kaiserreich\10_pfennig.ini')); if fileexists(ExtractFilePath(Application.ExeName)+'data\kaiserreich\10_pfennig.ini') then reset(f10) else rewrite(f10); assignfile(f20,pchar(ExtractFilePath(Application.ExeName)+'data\kaiserreich\20_pfennig.ini')); if fileexists(ExtractFilePath(Application.ExeName)+'data\kaiserreich\20_pfennig.ini') then reset(f20) else rewrite(f20); assignfile(f50,pchar(ExtractFilePath(Application.ExeName)+'data\kaiserreich\50_pfennig.ini')); if fileexists(ExtractFilePath(Application.ExeName)+'data\kaiserreich\50_pfennig.ini') then reset(f50) else rewrite(f50); assignfile(f100,pchar(ExtractFilePath(Application.ExeName)+'data\kaiserreich\100_pfennig.ini')); if fileexists(ExtractFilePath(Application.ExeName)+'data\kaiserreich\100_pfennig.ini') then reset(f100) else rewrite(f100); assignfile(f25,pchar(ExtractFilePath(Application.ExeName)+'data\kaiserreich\25_pfennig.ini')); if fileexists(ExtractFilePath(Application.ExeName)+'data\kaiserreich\25_pfennig.ini') then reset(f25) else rewrite(f25); assignfile(f1_2,pchar(ExtractFilePath(Application.ExeName)+'data\kaiserreich\1_2_pfennig.ini')); if fileexists(ExtractFilePath(Application.ExeName)+'data\kaiserreich\1_2_pfennig.ini') then reset(f1_2) else rewrite(f1_2); assignfile(f3,pchar(ExtractFilePath(Application.ExeName)+'data\temp_pfennig.ini')); if fileexists(ExtractFilePath(Application.ExeName)+'data\temp_pfennig.ini') then reset(f3) else rewrite(f3); end; procedure TForm2.PageControl1Change(Sender: TObject); begin case pagecontrol1.TabIndex of 0:Form2.PageControl1.Height:=32*filesize(f1)+128; 1:Form2.PageControl1.Height:=32*filesize(f2)+128; 2:Form2.PageControl1.Height:=32*filesize(f5)+128; 3:Form2.PageControl1.Height:=32*filesize(f10)+128; 4:Form2.PageControl1.Height:=32*filesize(f20)+128; 5:Form2.PageControl1.Height:=32*filesize(f25)+128; 6:Form2.PageControl1.Height:=32*filesize(f50)+128; 7:Form2.PageControl1.Height:=32*filesize(f1_2)+128; 8:Form2.PageControl1.Height:=32*filesize(f100)+128; end; end; end. |
Re: in Laufzeit Objakt hinzufügen
Hai Remote1,
nehme diesen überlangen Quellcode bitte aus dem Posting und füge ihn als Datei an. Danke. |
Re: in Laufzeit Objakt hinzufügen
Liste der Anhänge anzeigen (Anzahl: 1)
hier noch mal die datei
|
Re: in Laufzeit Objakt hinzufügen
vielleicht alles noch in mehr proceduren hauen -> wirds kleiner
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 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