Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem: DBEdit/Edit Felder per Knopfdruck generieren (https://www.delphipraxis.net/109791-problem-dbedit-edit-felder-per-knopfdruck-generieren.html)

ShortyHL 7. Mär 2008 16:18


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

mkinzler 7. Mär 2008 16:20

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
 
Versuch es mal mit .FindComponent()

ShortyHL 7. Mär 2008 16:44

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
 
Zitat:

Zitat von mkinzler
Versuch es mal mit .FindComponent()

Und was für eine Komponente füge ich in die Funktion ein? Zurzeit gibt es eine Fehlermeldung mit inkompatiblen Typen bzw. wenn ich daraus eine Anweisung mache, erfordert der Ausdruckstyp BOOLEAN. Füge ich dahinter ein "= true", hab ich auf einmal inkompatible Typen?

mkinzler 7. Mär 2008 17:00

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
 
Der Form.
Die Methode liefert dir ein TObject

ShortyHL 9. Mär 2008 11:54

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?

mkinzler 9. Mär 2008 12:58

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
 
FindComponent sucht dir eine Komponente anhand des Namens.
Delphi-Quellcode:
if not Assigned(FindComponent('<Name der ges. Kompo>')) then
überprüft ob es eine Komponente eines bestimmten Namens schon existiert

ShortyHL 9. Mär 2008 13:18

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
 
d.h. bei

Delphi-Quellcode:
var DBE: TDBEdit;

begin


  if not Assigned(Form1.FindComponent('DBE')) then DBE.Destroy;

end;
müsste geprüft werden, ob das Objekt bereits erstellt wurde und wenn ja, wird es gelöscht?

Noobinator 9. Mär 2008 13:24

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);

mkinzler 9. Mär 2008 13:25

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

Apollonius 9. Mär 2008 13:26

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 03:40 Uhr.
Seite 1 von 6  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz