![]() |
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:
Hofentlich kann mir einer helfen.
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; |
Re: Laufzeit: erstellte Editfelder ansprechen
Delphi-Quellcode:
oder vielleicht auch nicht. :mrgreen:
var s: string;
s:=field.Text; |
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:
Jetzt kannst du z.B. via Feld[3] auf das 4. erzeugte Feld zugreifen.
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; |
Re: Laufzeit: erstellte Editfelder ansprechen
danke leute für eure schnelle Hilfe.
|
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? |
Re: Laufzeit: erstellte Editfelder ansprechen
Mit SetLength bestimmt du die Größe des Arrays. In deinem Fall:
Delphi-Quellcode:
Feld=Name des Arrays und dann die Anzahl der Ergebnisse ist die Größe (Anzahl der Speicherplätze für Werte)
Setlength(Feld, ssgspielergebnisse.RowCount - 1);
|
Re: Laufzeit: erstellte Editfelder ansprechen
habe ich schon alleine gelöst.
war ein syntaxfehler meinerseits |
Re: Laufzeit: erstellte Editfelder ansprechen
Delphi-Quellcode:
Das kompiliert der auch aber zur Laufzeit im Einzelschritt krieg ich bei dieser Zeile
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;
Delphi-Quellcode:
folgenden Fehler:
DBCon[anzahlTabs] := TADOConnection.Create(nil);
Zugriffsverletzung bei Adresse 004B44D9 in Modul 'DBUtilities.exe'. Schreiben von Adresse 00000000 |
Re: Laufzeit: erstellte Editfelder ansprechen
Zitat:
Oder? |
Re: Laufzeit: erstellte Editfelder ansprechen
anzahltabs ist ja zu diesem moment noch 0
|
Re: Laufzeit: erstellte Editfelder ansprechen
Zitat:
Delphi-Quellcode:
Das bedeutet doch das Du hier ein Array mit der "Länge" 0 erzeugst! Dann kannst Du doch auch nicht auf ein Element zugreifen.
procedure DBOpen(DataBase:String; TabCaption:String);
begin // DBCon erstellen setlength(DBCon, anzahltabs); DBCon[anzahlTabs] := TADOConnection.Create(nil); .... end; anzahltabs müsste also min. 1 sein. |
Re: Laufzeit: erstellte Editfelder ansprechen
Ahh also SetLength(DBCon, 1)
Dann aber DBCon[0] Werd ich gleich mal ausprobieren |
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) |
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?
|
Re: Laufzeit: erstellte Editfelder ansprechen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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 ![]() 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