Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Objekte zur Laufzeit erzeugen (https://www.delphipraxis.net/180410-objekte-zur-laufzeit-erzeugen.html)

Sir Rufo 20. Mai 2014 07:22

AW: Objekte zur Laufzeit erzeugen
 
Liste der Anhänge anzeigen (Anzahl: 1)
So dann will ich auch noch mal einen zum Besten (bzgl. der Formatierung) geben.

3 Varianten
Delphi-Quellcode:
procedure Foo1;
begin
if Voraussetzung then begin
MeinCode1;
MeinCode2;
end else begin
MeinCode2;
MeinCode1;
end;
end;

procedure Foo2;
begin
  if Voraussetzung then
  begin
    MeinCode1;
    MeinCode2;
  end
  else
  begin
    MeinCode2;
    MeinCode1;
  end;
end;

procedure Foo3;
begin
  if Voraussetzung
  then
    begin
      MeinCode1;
      MeinCode2;
    end
  else
    begin
      MeinCode2;
      MeinCode1;
    end;
end;
und was CnPack daraus macht
Anhang 41210
Ja, aus dem Grund nehme ich Variante 3

Sherlock 20. Mai 2014 08:23

AW: Objekte zur Laufzeit erzeugen
 
Das versteh ich nicht, guter Sir. Warum Variante 3? Die ist... nicht schön. then in einer eigenen Zeile? Also wirklich.

Sherlock

Sir Rufo 20. Mai 2014 08:43

AW: Objekte zur Laufzeit erzeugen
 
Zitat:

Zitat von Sherlock (Beitrag 1259466)
Das versteh ich nicht, guter Sir. Warum Variante 3? Die ist... nicht schön. then in einer eigenen Zeile? Also wirklich.

Sherlock

Macht nichts, denn schön liegt im Auge des Betrachters ;)

Für mich zählt nur die Lesbarkeit und damit ist es für mich einfacher (damit schneller) die Struktur zu erfassen.
Sobald die Bedingungen etwas umfangreicher werden (ab einer gewissen Schmerzgrenze lager ich aber Teile in Funktionen aus), dann schreibe ich das sogar so:
Delphi-Quellcode:
if //
  Bedingung1 or //
  Bedingung2 or //
  Bedingung3 and Bedingung4 //
then
  Foo
else
  Bar;
Dein Vorschlag wäre ja dann so
Delphi-Quellcode:
if Bedingung1 or Bedingung2 or Bedingung3 and Bedingung4 then
  Foo
else
  Bar;
Und wenn der automatische Zeilenumbruch (Codeformatierung) zuschlägt, dann wird es ganz doof
Delphi-Quellcode:
if Bedingung1 or Bedingung2 or
  Bedingung3 and Bedingung4 then
  Foo
else
  Bar;
Jetzt ist nicht auf einen kurzen Blick erkennbar, was wohin gehört. Bei meiner Variante sehe ich die einzelnen Teile sofort.

Und selbst diese Variante (ohne Zeilenkommentare) ist besser lesbar
Delphi-Quellcode:
if Bedingung1 or Bedingung2 or
  Bedingung3 and Bedingung4 
then
  Foo
else
  Bar;

p80286 20. Mai 2014 13:37

AW: Objekte zur Laufzeit erzeugen
 
@Luki206
Nun da greift wer ins Klo. Mit anderen worten, ein Zeiger zeigt in die Botanik und nict mehr auf Speicher der für Deine Anwendung verfügbar ist.

@all
Heute hab ich da was über Haarspalterei gelesen...
Manchmal kommt's darauf an, da ist auch so etwas gut brauchbar:
Delphi-Quellcode:
If bedingung1 then... else
If Bedingung2 then... else
If Bedingung3 then... else
..
If Bedingung99 then
else showessage('Deine Daten sind Schrott');
und ebenso
Delphi-Quellcode:
if (Bedingung1 or
    Bedingung2 or
   (Bedingung3 and Bedingung4)or
    Bedingung5 then ......

Popov 20. Mai 2014 15:26

AW: Objekte zur Laufzeit erzeugen
 
Also richtig soll es angeblich so sein:
Delphi-Quellcode:
  if a = b then
    begin
    a := 1;
    b := 2;
    end
  else
    begin
    a := 2;
    b := 1;
    end;
Persönlich mache ich es heute so (also fast richtig ;) ):
Delphi-Quellcode:
  if a = b then
  begin
    a := 1;
    b := 2;
  end
  else
  begin
    a := 2;
    b := 1;
  end;
Das ist eigentlich Quatsch, denn else gehört in die gleiche Ebene wie if:
Delphi-Quellcode:
  if a = b then
  begin
    a := 1;
    b := 2;
  end
    else
  begin
    a := 2;
    b := 1;
  end;
Früher machte ich es immer so, aber zumindest begin nach then, korrigiere aber inzwischen jeden Code damit:
Delphi-Quellcode:
  if a = b then begin
    a := 1;
    b := 2;
  end else begin
    a := 2;
    b := 1;
  end;
Man spart sich zwar mindestens eine Zeile, muss aber immer erst zwei mal gucken um zu sehen, dass die nächsten zwei Zeilen einen Block bilden. Die Übersichtlichkeit ist nicht so flüssig.

Furchtbar sind natürlich die ganz coolen Formen der Formatierung:
Delphi-Quellcode:
  if a = b then
                begin
    a := 1;
    b := 2;
                end
    else
                begin
    a := 2;
    b := 1;
                end;
Das tue ich mir inzwischen fast gar nicht mehr an. Postet es einer so, ignoriere ich die Frage:
Delphi-Quellcode:
if a=b then
begin
a:=1;
b:=2;
end
else
begin
a:=2;
b:=1;
end;
Da muss ich zu sehr im Kopf den Code entwirren.

DeddyH 20. Mai 2014 15:34

AW: Objekte zur Laufzeit erzeugen
 
Zitat:

Zitat von Popov (Beitrag 1259535)
Also richtig soll es angeblich so sein:
Delphi-Quellcode:
  if a = b then
    begin
    a := 1;
    b := 2;
    end
  else
    begin
    a := 2;
    b := 1;
    end;

Quelle? Der (uralte) Style Guide sagt da etwas anderes.

Popov 20. Mai 2014 16:37

AW: Objekte zur Laufzeit erzeugen
 
Wenn ich für alles was ich im Leben sagte einen Quellennachweis liefen müsste...

Ich weiß nicht mehr wo ich es gesehen habe, ich habe es aber paar mal gesehen und es waren in der Regel Seiten von Unis. Auch sahen die Seiten in der Regel schön "klassisch" aus, also HTML pur, wie in den guten alten Zeiten Anfang 90. Womit ich also nicht behaupte, dass das neu ist, muss aber auch nicht alt sein. Ich gucke mal in meinen Lesezeichen ob ich da was finde.

Andererseits ergibt das zum Teil einen Sinn.
Delphi-Quellcode:
  if a = b then
    ...
  else
    ...
Else ist ein Teil der If-Anweisung, gehört also in die gleiche Ebene, nicht eingerückt.

Begin und End bilden einen Block. Somit stellt sich die Frage wohn damit?
Delphi-Quellcode:
  if a = b then
    a := 1
  else
    b := 2;
Das ist alles eine einzige Anweisung, auch wenn es über vier Zeilen verteilt ist. Woran erkennt man das? Spätestens daran, dass es nur ein abschließendes Semikolon am Ende gibt. Geht also auch so:
Delphi-Quellcode:
  if a = b then a := 1 else b := 2;
  ...
Wenn ich nun mehr als eine Zeile benötige, brauche ich einen Block.
Delphi-Quellcode:
  if a = b then
  begin
    a := 1;
    b := 2
  end
  else
    b := 2;
Und nun stellt sich die Frage zu was gehört Begin und End? Ist es ein Teil des Blocks selbst, dann muss man es so schreiben:
Delphi-Quellcode:
  if a = b then
    begin
    a := 1;
    b := 2
    end
  else
    b := 2;
Oder ist es ein Teil der If-Anweisung, dann die vorherige Variante.

DeddyH 20. Mai 2014 17:18

AW: Objekte zur Laufzeit erzeugen
 
Delphi-Quellcode:
if a = b then
  begin
    a := 1;
    b := 2;
  end
else
  b := 2;
So würde ich es schreiben. Und Behauptungen, die man nicht belegen kann, sind eben nur Behauptungen.

Sir Rufo 20. Mai 2014 17:21

AW: Objekte zur Laufzeit erzeugen
 
Wenn
Delphi-Quellcode:
else
ein Teil der
Delphi-Quellcode:
if
-Anweisung ist und deswegen in die gleiche Ebene sollte wie das
Delphi-Quellcode:
if
, dann gilt das auch für
Delphi-Quellcode:
then
.

Sag ich doch die ganze Zeit ;)

DeddyH 20. Mai 2014 17:24

AW: Objekte zur Laufzeit erzeugen
 
Jetzt sind wir aber mittlerweile weit ab vom Thema, oder?

Luki206 20. Mai 2014 18:17

AW: Objekte zur Laufzeit erzeugen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Zitat von DeddyH (Beitrag 1259545)
Jetzt sind wir aber mittlerweile weit ab vom Thema, oder?

Jap, aber vielen dank für die aufschlussreiche Erklärung wo
Delphi-Quellcode:
if; else; & begin; end;
stehen :thumb:

Nur weiß ich jetzt immer noch nicht warum ich ausgerechnet einen Fehler beim beenden des Programms bekomme. Nur was mich wundert, ich habe einen Style drin, wenn ich wieder auf das Windows-Theme umsteige bekomme ich einen Fehler beim erzeugen des zweiten Formulars..

DeddyH 20. Mai 2014 18:31

AW: Objekte zur Laufzeit erzeugen
 
Die "0"-Adresse weist auf einen nil-Pointer hin, d.h. Du greifst sehr wahrscheinlich auf etwas zu, für das Du keinen Speicher reserviert hast.

Luki206 20. Mai 2014 18:51

AW: Objekte zur Laufzeit erzeugen
 
Mir ist aber nicht bekannt wo :gruebel: kann es etwas mit dem Style zu tun haben?

DeddyH 20. Mai 2014 19:02

AW: Objekte zur Laufzeit erzeugen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe zwar keine Styles, aber daran liegt es vermutlich nicht.

[edit]Ich habe mal schnell ein Beispiel geschrieben (unter Delphi 7, höher steht mir gerade nicht zur Verfügung). Mach doch mal ein Testprojekt mit einem Panel und einem Button auf dem Hauptformular. Das Panel ziehst Du ein bisschen auf, damit ein paar Buttons darauf Platz finden (siehe Screenshot). Im Code schreibst Du oberhalb der Form-Deklaration folgenden Code:
Delphi-Quellcode:
type
  TPanel = class(ExtCtrls.TPanel)
  private
    FButtons: TObjectList;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure AddButtons(CountButtons: Cardinal; ClickEvent: TNotifyEvent);
  end;
Im Implementation-Teil dann das hier:
Delphi-Quellcode:
procedure TPanel.AddButtons(CountButtons: Cardinal;
  ClickEvent: TNotifyEvent);
const
  X_OFFSET = 10; //horizontaler Abstand
  Y_OFFSET = 10; //vertikaler Abstand
  BUTTONWIDTH = 75; //Breite jedes Buttons
  BUTTONHEIGHT = 25; //Höhe jedes Buttons
var
  i: integer;
  ButtonsPerRow: integer;
  NewButton: TButton;
begin
  //Evtl. schon vorhandene Buttons löschen
  FButtons.Clear;
  //Wieviele Buttons passen in eine Zeile bei Abstand rechts und links?
  ButtonsPerRow := (ClientWidth - X_OFFSET) div (X_OFFSET + BUTTONWIDTH);
  for i := 0 to CountButtons - 1 do
    begin
      //Neuen Button erzeugen, Eigenschaften zuweisen...
      NewButton := TButton.Create(nil);
      NewButton.Width := BUTTONWIDTH;
      NewButton.Height := BUTTONHEIGHT;
      NewButton.Caption := 'Button ' + IntToStr(Succ(i));
      NewButton.Left := X_OFFSET + (BUTTONWIDTH + X_OFFSET) * (i mod ButtonsPerRow);
      NewButton.Top := Y_OFFSET + (BUTTONHEIGHT + Y_OFFSET) * (i div ButtonsPerRow);
      NewButton.OnClick := ClickEvent;
      NewButton.Parent := self;
      //... und der Liste hinzufügen
      FButtons.Add(NewButton);
    end;
end;

constructor TPanel.Create(AOwner: TComponent);
begin
  inherited;
  FButtons := TObjectList.Create;
end;

destructor TPanel.Destroy;
begin
  FButtons.Free;
  inherited;
end;
Das Formular selbst wird noch um eine Methode erweitert:
Delphi-Quellcode:
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    //wird den Buttons als Click-Event zugewiesen
    procedure DoOnClick(Sender: TObject);
  public
    { Public-Deklarationen }
  end;
Und der Formular-Code sieht in der Implementation dann so aus:
Delphi-Quellcode:
procedure TForm1.DoOnClick(Sender: TObject);
begin
  if Sender is TButton then
    ShowMessage(TButton(Sender).Caption);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Panel1.AddButtons(100, DoOnClick);
end;
Tritt der Fehler damit auch auf? [/edit]

Luki206 20. Mai 2014 19:07

AW: Objekte zur Laufzeit erzeugen
 
Ich meine ja, weil die Buttons mit Style richtig erzeugt werden und ohne Style bekomme ich ja den Fehler..

Dalai 20. Mai 2014 19:13

AW: Objekte zur Laufzeit erzeugen
 
Wenn der Fehler beim Beenden des Programms kommt, liegt es IMO nahe, wenn auf ein Objekt zugegriffen wird, das bereits freigegeben wurde. Auch hier hilft das Durchsteppen mit dem Debugger sehr beim Lokalisieren des Fehlers.

MfG Dalai

DeddyH 20. Mai 2014 19:14

AW: Objekte zur Laufzeit erzeugen
 
Ich habe meinen letzten Beitrag editiert, versuch das doch bitte mal mit und ohne Styles.

Luki206 21. Mai 2014 16:13

AW: Objekte zur Laufzeit erzeugen
 
Bei mir fängt es schon am
Delphi-Quellcode:
 TPanel = class(ExtCtrls.TPanel)
an.. er findet ExtCtrls nicht

DeddyH 21. Mai 2014 16:49

AW: Objekte zur Laufzeit erzeugen
 
ExtCtrls und Contnrs musst Du noch in die uses-Klausel im interface-Teil aufnehmen.

Luki206 22. Mai 2014 09:57

AW: Objekte zur Laufzeit erzeugen
 
Ok jetzt funktioniert es und der Fehler tritt nicht mehr auf. Nur wie bekomme ich jetzt die Buttons nicht in ein Panel sondern in eine ScrollBox? Ich habe auch eigentlich schon versucht TPanel in TScrollBox zu ändern aber ich denke so einfach ist das dann doch nicht oder?

DeddyH 22. Mai 2014 10:02

AW: Objekte zur Laufzeit erzeugen
 
Wieso denn nicht?

[edit]
Delphi-Quellcode:
type
  TPanel = class(ExtCtrls.TPanel)
  private
    FButtons: TObjectList;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure AddButtons(CountButtons: Cardinal; ClickEvent: TNotifyEvent);
  end;
wird zu
Delphi-Quellcode:
type
  TScrollBox = class(Forms.TScrollBox)
  private
    FButtons: TObjectList;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure AddButtons(CountButtons: Cardinal; ClickEvent: TNotifyEvent);
  end;
Fluppt auf Anhieb bei mir. [/edit]

Luki206 22. Mai 2014 14:09

AW: Objekte zur Laufzeit erzeugen
 
Bei mir nicht... Forms wird nicht erkannt, was muss diesmal in die uses? :D

Sir Rufo 22. Mai 2014 14:21

AW: Objekte zur Laufzeit erzeugen
 
Zitat:

Zitat von Luki206 (Beitrag 1259790)
Bei mir nicht... Forms wird nicht erkannt, was muss diesmal in die uses? :D

Delphi-Quellcode:
uses
  Forms;
bzw.
Delphi-Quellcode:
uses
  Vcl.Forms;
Und von Dokumentation hast du auch nichts gehört?
Delphi-Referenz durchsuchenTScrollBox :wall:

DeddyH 22. Mai 2014 14:25

AW: Objekte zur Laufzeit erzeugen
 
Zur Not eine ScrollBox aufs Form klatschen und STRG-F9 drücken, die fehlenden Units fügt Delphi dann ganz automatisch hinzu.

Luki206 22. Mai 2014 14:40

AW: Objekte zur Laufzeit erzeugen
 
Ja das habe ich mir auch gedacht. Die uses VCL.Forms war auch von Anfang an eingebunden nur bekomme ich trotzdem den Fehler :gruebel:

DeddyH 22. Mai 2014 14:43

AW: Objekte zur Laufzeit erzeugen
 
Delphi-Quellcode:
type
  TScrollBox = class(VCL.Forms.TScrollBox)
:roll:

Luki206 22. Mai 2014 14:46

AW: Objekte zur Laufzeit erzeugen
 
Ahhh, es war das Vcl. ... Danke :thumb:

Luki206 22. Jun 2014 18:29

AW: Objekte zur Laufzeit erzeugen
 
Ich muss mich hier noch einmal melden :hi: Jetzt stehe ich vor dem Problem das wenn ich die Form resizee bleiben die Buttons so in der Scrollbox wie sie auch erstellt wurden. Wie könnte ich es schaffen sie auszurichten ohne das sie ständig neu generiert werden müssen?
Danke
Luki :spin:

himitsu 22. Jun 2014 18:38

AW: Objekte zur Laufzeit erzeugen
 
Wie würstest du das denn machen, wenn du die Form im Form-Designer zusammenklicks?

Anchor, Align, usw.

Luki206 22. Jun 2014 18:50

AW: Objekte zur Laufzeit erzeugen
 
Das mit den Anchors haut nicht hin weil ich dann nicht mehr scrollen kann und Align geht auch nicht weil ich ja nicht alle Buttons übereinander legen will. Und die buttons sollen ja auch 'nachrücken' wenn in einer Zeile ein weiterer Button reinpassen würde.

Dejan Vu 22. Jun 2014 18:53

AW: Objekte zur Laufzeit erzeugen
 
Was hält dich davon ab, im OnResize einfach deine Controls programmtechnisch neu auszurichten? Das machst Du doch am, Anfang auch?

Luki206 22. Jun 2014 19:11

AW: Objekte zur Laufzeit erzeugen
 
Ja nur weiß ich nicht wie ich auf die Buttons wieder zugreifen soll.. Über die objectlist weiß ich nicht wie ich auf die Buttons zugreife.

Aviator 22. Jun 2014 19:26

AW: Objekte zur Laufzeit erzeugen
 
Du kannst entweder den Buttons beim Erstellen einen Namen geben (was sinnvoll wäre) oder immer durch die Komponenten der Form laufen und den Button entsprechend suchen. FindComponent bringt dir an der Stelle nix, da du keine Namen vergeben hast.

himitsu 22. Jun 2014 19:34

AW: Objekte zur Laufzeit erzeugen
 
Oder wie wäre es, wenn du die Buttons in andere Komponenten reinpackst?

- Diese kann man dann mit Anchor/Align ausrichten
- oder man nimmt ausrichtende Komponenten (TFlowPanel/TGridPanel)
- ...

Captnemo 22. Jun 2014 19:34

AW: Objekte zur Laufzeit erzeugen
 
Delphi-Quellcode:
for i:= 0 to FButtons.count-1 do
Beginn
  FButtons[i].left:=10; //oder was auch immer
  fButtons[i].top:=10; //ist ja nur ein Bespiel
End;
Ist doch eine Objectlist wenn ich das richtig gesehen.

Perlsau 22. Jun 2014 20:10

AW: Objekte zur Laufzeit erzeugen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Luki206 (Beitrag 1263185)
Ich muss mich hier noch einmal melden :hi: Jetzt stehe ich vor dem Problem das wenn ich die Form resizee bleiben die Buttons so in der Scrollbox wie sie auch erstellt wurden. Wie könnte ich es schaffen sie auszurichten ohne das sie ständig neu generiert werden müssen?

Wenn du deine visuellen Objekte in einer Objektliste verwaltest, mußt du doch nur die Objektliste durchgehen und die Position der Objekte neu berechnen. Ich mache das in meiner HTML-Template-Verwaltung eigentlich ganz einfach:
Delphi-Quellcode:
Function TVorschau.ZeichneBilder : Boolean;
Var
  x,y,
  i,z : Integer;
  Obj : TBild;

begin
  x := Allg.Bild_Abstand;
  y := Allg.Bild_Abstand;
  z := BList.Count;

  Try
    IF z > 0 THEN
    FOR i := 0 TO z-1 DO
    BEGIN
      Obj                  := BList[i];
      Obj.Bild.Left        := x;
      Obj.Bild.Top         := y;
      Obj.Bild.Width       := Allg.Bild_Breite;
      Obj.Bild.Height      := Allg.Bild_Hoehe;
      Obj.Bild.Visible     := True;

      Obj.Titel.Font       := VPanel.Font;
      Obj.Titel.Color      := Allg.BildTitel_Farbe;
      Obj.Titel.Width      := Allg.Bild_Breite;
      Obj.Titel.Height     := Allg.BildTitel_Hoehe;
      Obj.Titel.Left       := Obj.Bild.Left;
      Obj.Titel.Top        := Obj.Bild.Top + Allg.Bild_Hoehe;
      Obj.Titel.ShowHint   := True;
      Obj.Titel.Visible    := True;

      x := x + Allg.Bild_Breite + Allg.Bild_Abstand;
      IF x > (VPanel.ClientWidth - Allg.Bild_Breite - Allg.Bild_Abstand) THEN
      BEGIN
        x := Allg.Bild_Abstand;
        y := y + Allg.Bild_Abstand + Allg.Bild_Hoehe + Allg.BildTitel_Hoehe;
        IF VPanel.Height < (y + Allg.Bild_Abstand + Allg.Bild_Hoehe + Allg.BildTitel_Hoehe) THEN
           VPanel.Height := VPanel.Height + Allg.Bild_Abstand + Allg.Bild_Hoehe + Allg.BildTitel_Hoehe;
      END;
    END;

    Result := True;
  Except
    Result := False;
  End;
end;
Das Ergebnis ist durchaus zufriedenstellend, wie das angehängte Bild zeigt:

Luki206 23. Jun 2014 09:43

AW: Objekte zur Laufzeit erzeugen
 
Ach so, Ok. Vielen Dank :thumb: Wie könnte ich eigentlich das umbauen das es auch mit Firemonky funktioniert? Also das mit dem erstellen der Buttons?

stahli 23. Jun 2014 12:16

AW: Objekte zur Laufzeit erzeugen
 
@Luki206
Ich habe Deine Fragestellung nur schnell überflogen.
Für den Fall, dass Du hier etwas entnehmen kannst: http://www.delphipraxis.net/165177-scrollboxflow.html

Luki206 23. Jun 2014 15:25

AW: Objekte zur Laufzeit erzeugen
 
@Stahli: Beim ausführen der ScrollBoxFlowR.dproj bekomme ich folgenden Fehler bzw. mir wird angezeigt das ich die "acntDelphiXE_R" nicht habe:
Code:
[dcc32 Fataler Fehler] ScrollBoxFlowR.dpk(37): E2202 Package 'acntDelphiXE_R' wird benötigt, konnte aber nicht gefunden werden

stahli 23. Jun 2014 15:41

AW: Objekte zur Laufzeit erzeugen
 
Sorry, das ist ein älteres Package, das ich länger nicht mehr in der Hand hatte. Die acnt.. ist von den AlphaSkins, die ich damals eingesetzt hatte.

Ich denke, Du könntest die Verwendung einfach aus den benötigten Packages entfernen, bin aber jetzt nicht sicher, ob das reicht.

Sonst nimm einfach nur die pas zum testen ohne komplettes Package.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 Uhr.
Seite 2 von 3     12 3      

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