![]() |
Problem: DBEdit/Edit Felder per Knopfdruck generieren
Guten Tag,
ich habe einpaar Fragen bezüglich der Erstellung von DBEdit/Edit Feldern, nachdem man eine beliebige Zahl in ein Editfeld eingetragen und auf einen Button geklickt hat: Ich erstelle über diese Möglichkeit Labels-, DBEdit-, Edit- und Memo-Felder. Mein erstes Problem besteht darin, dass ich bei der ersten Erstellung nach dem Programmaufruf zwar Felder erstellt bekomme, jedoch - zur selben Laufzeit - wenn ich nun neue Felder erstellen möchte, eine Fehlermeldung bekomme, dass es bereits schon Felder mit dem Namen gibt (ist ja prinzipiell logisch). Aber nun muss ich eine Möglichkeit suchen, die überprüft, ob bereits Felder mit dem Namen erstellt worden sind und wenn ja, diese Felder wieder löschen, wenn eben eine neue Anzahl von Feldern erstellt werden sollen. Ich hatte gedacht, dass ich mit dem Destruktor arbeiten kann, aber ich erhalte trotzdem eine Fehlermeldung, sicherlich, weil beim ersten Aufruf noch keine Felder erstellt worden sind. Und hier müsste ich eben vorher überprüfen, ob schon Felder vorhanden sind. Mein zweites Problem besteht darin, dass ich ein Feld erstellen lasse, welches aus zwei weiteren Feldern die Werte (Integer) berechnet und in dem erstellten Feld anzeigen soll. Aber wie greife ich auf das Feld zu, wenn ich es automatisch erstelle? Der Name des Feldes ist beispielweise bei einem Editfeld '"Edit_" + x' (wobei x für eine Zählvariable steht). Wenn ich im Code darauf zugreife, erhalte ich eine Fehlermeldung, dass es das Feld eben nicht gibt. Mein drittes Problem: Um anzuzeigen, um was für ein Feld es sich überhaupt handelt, erstelle ich zusätzlich noch Labels und fülle deren "Caption" mit Werten aus einem Array. D.h ich zähle die Anzahl der Einträge in dem Array und weise sie dann der Caption mit "ArrayName[x] (x = Zählvariable)" zu. Doch es werden irgendwie komische Zeichen mit angezeigt. Zurzeit ist es ein Pfeil nach oben gefolgt von einem C und einem K. Kann mir leider nicht erklären, weshalb diese Zeichen dort auftauchen. Mein Array enthält lediglich die Werte "Artikel", "Anzahl", "EP" und "GP". Ich hab schon rumprobiert und gesucht, aber ich zurzeit echt überfragt. Vielleicht kann mir jemand von euch vielleicht weiterhelfen ;) Danke schonmal im Voraus für jede Hilfe. Mit freundlichen Grüßen ShortyHL |
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
Versuch es mal mit .FindComponent()
|
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
Zitat:
|
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
Der Form.
Die Methode liefert dir ein TObject |
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
Ich erhalte einen Fehler "inkompatible Typen": String und TDBEDit...
var DBE: TDBEdit; if Form1.ScrollBox1.FindComponent(DBE) then begin [...] end; so korrekt? |
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
FindComponent sucht dir eine Komponente anhand des Namens.
Delphi-Quellcode:
überprüft ob es eine Komponente eines bestimmten Namens schon existiert
if not Assigned(FindComponent('<Name der ges. Kompo>')) then
|
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
d.h. bei
Delphi-Quellcode:
müsste geprüft werden, ob das Objekt bereits erstellt wurde und wenn ja, wird es gelöscht?
var DBE: TDBEdit;
begin if not Assigned(Form1.FindComponent('DBE')) then DBE.Destroy; end; |
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
Assigned gibt false zurück, wenn P den Wert nil hat, andernfalls true.
das heißt du machst es genau umgekehrt. Wenn BDE nicht exisitiert, dann zerstöre es. irgendwie schwachsinnig.
Delphi-Quellcode:
if Assigned(Form1.FindComponent('DBE')) then FreeAndNil(DBE);
|
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
Nein. DBE ist nur der Name der Variable nicht der des Objekts. DBE referenzirt in deinem Fall auch kein Objekt.
Zudem sollte man nie Destroy direkt sonder .Free aufrufen |
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
@Noobinator: Das reicht aber auch nicht, denn die lokale Variable DBE ist nicht initialisiert worden. Richtig wäre es so:
Delphi-Quellcode:
var DBE: TComponent;
begin DBE := FindComponent('DBE'); FreeAndNil(DBE); //Assigned entfällt, da Free auf nil prüft end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 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