Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Laufzeit: erstellte Editfelder ansprechen (https://www.delphipraxis.net/9861-laufzeit-erstellte-editfelder-ansprechen.html)

Piro 6. Okt 2003 16:42


Laufzeit: erstellte Editfelder ansprechen
 
Hallo Leute ich brauche mal eure Hilfe. Wie ihr unten seht, erstelle ich mir edtfelder zur Laufzeit.

Mein Frage ist wie die einzelnen Felder ansprechen soll um deren Inhalt auszulesen?

Delphi-Quellcode:
     x := 70;
     for i := 0 to (sgspielergebnisse.RowCount - 1) do
     begin
        feld := TEdit.Create(PageControl1.Pages[4]);
        point := TLabel.Create(PageControl1.Pages[4]);
        feld1 := TEdit.Create(PageControl1.Pages[4]);
        with feld do
        begin
            Parent := PageControl1.Pages[4];
            Height := 22;
            Width := 30;
            Left := 390;
            Top := x;  
        end;
        with point do
        begin
            Parent := PageControl1.Pages[4];
            caption := ':';
            Height := 22;
            Width := 5;
            Left := 430;
            Top := x;
        end;
        with feld1 do
        begin
            Parent := PageControl1.Pages[4];
            Height := 22;
            Width := 30;
            Left := 450;
            Top := x;
        end;
        x := x + 28;
     end;
Hofentlich kann mir einer helfen.

Matze 6. Okt 2003 16:52

Re: Laufzeit: erstellte Editfelder ansprechen
 
Delphi-Quellcode:
var s: string;

s:=field.Text;
oder vielleicht auch nicht. :mrgreen:

Chewie 6. Okt 2003 17:23

Re: Laufzeit: erstellte Editfelder ansprechen
 
Das Problem ist, dass die Edit-Klassen erzeugt werden, aber die Klassenvariable nicht gespeichert wird.
Besser wäre es, die Edit-Felder in Arrays zu verwalten. So kannst du ohne Probleme dein Edit-feld anhand des Indexes ansprechen.

So sieht das dann etwa aus:
Delphi-Quellcode:
var
  Feld, Feld1: Array of TEdit;
  Point: Array of TLabel;

     Setlength(Feld, ssgspielergebnisse.RowCount - 1);
     Setlength(Point, ssgspielergebnisse.RowCount - 1);
     Setlength(Feld1, ssgspielergebnisse.RowCount - 1);
     
     x := 70;
     for i := 0 to (sgspielergebnisse.RowCount - 1) do
     begin
        feld[i] := TEdit.Create(PageControl1.Pages[4]);
        point[i] := TLabel.Create(PageControl1.Pages[4]);
        feld1[i] := TEdit.Create(PageControl1.Pages[4]);
        with feld[i] do
        begin
            Parent := PageControl1.Pages[4];
            Height := 22;
            Width := 30;
            Left := 390;
            Top := x;  
        end;
        with point[i] do
        begin
            Parent := PageControl1.Pages[4];
            caption := ':';
            Height := 22;
            Width := 5;
            Left := 430;
            Top := x;
        end;
        with feld1[i] do
        begin
            Parent := PageControl1.Pages[4];
            Height := 22;
            Width := 30;
            Left := 450;
            Top := x;
        end;
        x := x + 28;
     end;
Jetzt kannst du z.B. via Feld[3] auf das 4. erzeugte Feld zugreifen.

Piro 7. Okt 2003 10:25

Re: Laufzeit: erstellte Editfelder ansprechen
 
danke leute für eure schnelle Hilfe.

Piro 7. Okt 2003 10:44

Re: Laufzeit: erstellte Editfelder ansprechen
 
habe es jetzt mal ausprobiert. Und es funktioniert nur halb.

Er erzeugt die Felder.

Zum Schluß bekommen ich eine Meldung: "Invalide Pointer Operation"

warum muss man eigentlich vorher setleng definieren?

Nalincah 7. Okt 2003 10:47

Re: Laufzeit: erstellte Editfelder ansprechen
 
Mit SetLength bestimmt du die Größe des Arrays. In deinem Fall:

Delphi-Quellcode:
Setlength(Feld, ssgspielergebnisse.RowCount - 1);
Feld=Name des Arrays und dann die Anzahl der Ergebnisse ist die Größe (Anzahl der Speicherplätze für Werte)

Piro 7. Okt 2003 11:00

Re: Laufzeit: erstellte Editfelder ansprechen
 
habe ich schon alleine gelöst.

war ein syntaxfehler meinerseits

Nalincah 8. Okt 2003 09:35

Re: Laufzeit: erstellte Editfelder ansprechen
 
Delphi-Quellcode:
var
  // VARIABLENDEKLARATION ZUM ERSTELLEN DER KOMPONENTEN
  // DBCon erstellen
  DBCon: array of TADOConnection;

procedure DBOpen(DataBase:String; TabCaption:String);
begin
  // DBCon erstellen
  setlength(DBCon, anzahltabs);
  DBCon[anzahlTabs] := TADOConnection.Create(nil);
  ....
end;
Das kompiliert der auch aber zur Laufzeit im Einzelschritt krieg ich bei dieser Zeile

Delphi-Quellcode:
DBCon[anzahlTabs] := TADOConnection.Create(nil);
folgenden Fehler:

Zugriffsverletzung bei Adresse 004B44D9 in Modul 'DBUtilities.exe'. Schreiben von Adresse 00000000

Sharky 8. Okt 2003 10:03

Re: Laufzeit: erstellte Editfelder ansprechen
 
Zitat:

Zitat von General2003
Delphi-Quellcode:
DBCon[anzahlTabs] := TADOConnection.Create(nil);

Müsste es nicht [anzahlTabs-1] heissen? Ich meinte das SetLength das Array bei 0 beginnt.
Oder?

Nalincah 8. Okt 2003 10:56

Re: Laufzeit: erstellte Editfelder ansprechen
 
anzahltabs ist ja zu diesem moment noch 0

Sharky 8. Okt 2003 11:04

Re: Laufzeit: erstellte Editfelder ansprechen
 
Zitat:

Zitat von General2003
anzahltabs ist ja zu diesem moment noch 0

Delphi-Quellcode:
procedure DBOpen(DataBase:String; TabCaption:String);
begin
  // DBCon erstellen
  setlength(DBCon, anzahltabs);
  DBCon[anzahlTabs] := TADOConnection.Create(nil);
  ....
end;
Das bedeutet doch das Du hier ein Array mit der "Länge" 0 erzeugst! Dann kannst Du doch auch nicht auf ein Element zugreifen.
anzahltabs müsste also min. 1 sein.

Nalincah 8. Okt 2003 11:16

Re: Laufzeit: erstellte Editfelder ansprechen
 
Ahh also SetLength(DBCon, 1)
Dann aber DBCon[0]

Werd ich gleich mal ausprobieren

Christian Seehase 8. Okt 2003 14:41

Re: Laufzeit: erstellte Editfelder ansprechen
 
Moin Sebastian,

was mir bei Deinen Worten auffällt:
Willst Du das Array immer nach und nach vergrössern?

Für die Performance sinnvoller wäre es das Array erst einmal auf einen Wert zu dimensionieren, der der zu erwartenden Anzahl von Elementen entspricht, und nur im Notfall das Array zu vergrössern, da bei jeder Vergrösserung der gesamte Inhalt des Arrays umkopiert wird.
Dann muss man zwar selber die Position des nächsten freien Elementes verwalten, aber das wird durch die höhere Geschwindigkeit locker wieder aufgewogen (hängt natürlich auch von der Anzahl der Elemente ab)

Nalincah 8. Okt 2003 16:16

Re: Laufzeit: erstellte Editfelder ansprechen
 
Das hast du vollkommen richtig rausgelesen. Will ein Programm schreiben mit dem man Datenbanken öffnen kann. Will, dass jedesmal alle Komponenten neu erstellt werden. Für jede Datenbank ein eigenes Tabsheet. Aber ich denk mal ich werd jetzt das ganze auf 10 Datenbank beschränken. Oder was hältst du davon?

tableD 8. Okt 2003 16:29

Re: Laufzeit: erstellte Editfelder ansprechen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von daywalker299
habe es jetzt mal ausprobiert. Und es funktioniert nur halb.

Er erzeugt die Felder.

Zum Schluß bekommen ich eine Meldung: "Invalide Pointer Operation"

warum muss man eigentlich vorher setleng definieren?

Ich hab auch verschiedene Komponenten in einem dynamischen Array verwaltet, und wenn man die Routine ein zweitesmal ausführen will bekomme ich den Fehler "Die Komponente hWiz existiert bereits." - wobei hWiz der Name des dynamischen Fensters ist - wird durch ne XML Datei angegeben.
ich häng einfach mal den quelltext ran .. vielleicht könnt ihr mir sagen was falsch ist.

So das sind die wichtigen Prozedure. Bei Klick auf den Button Ausführen wird die Prozedur gestartet und die XML Datei eingelesen. EIn Beispiel für eine solche XML Datei findet ihr auf meiner HP www.enterprise-webdev.de.vu unter XML Demo.

Danke im Vorraus.

[edit=Daniel B]Code ausgeschnitten und als Textdatei angehängt, Bitte das nächste mal selbst machen, nicht einfach hunderte von Zeilen einfach so reinposten, da scrollt man ja ewig. Danke. Mfg, Daniel B[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 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