AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem: DBEdit/Edit Felder per Knopfdruck generieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem: DBEdit/Edit Felder per Knopfdruck generieren

Ein Thema von ShortyHL · begonnen am 7. Mär 2008 · letzter Beitrag vom 11. Mär 2008
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    
ShortyHL

Registriert seit: 27. Feb 2008
Ort: Lübeck
29 Beiträge
 
Delphi 6 Enterprise
 
#1

Problem: DBEdit/Edit Felder per Knopfdruck generieren

  Alt 7. Mär 2008, 17:18
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren

  Alt 7. Mär 2008, 17:20
Versuch es mal mit .FindComponent()
Markus Kinzler
  Mit Zitat antworten Zitat
ShortyHL

Registriert seit: 27. Feb 2008
Ort: Lübeck
29 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren

  Alt 7. Mär 2008, 17:44
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren

  Alt 7. Mär 2008, 18:00
Der Form.
Die Methode liefert dir ein TObject
Markus Kinzler
  Mit Zitat antworten Zitat
ShortyHL

Registriert seit: 27. Feb 2008
Ort: Lübeck
29 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren

  Alt 9. Mär 2008, 12:54
Ich erhalte einen Fehler "inkompatible Typen": String und TDBEDit...

var DBE: TDBEdit;

if Form1.ScrollBox1.FindComponent(DBE) then begin

[...]

end;

so korrekt?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren

  Alt 9. Mär 2008, 13:58
FindComponent sucht dir eine Komponente anhand des Namens.
if not Assigned(FindComponent('<Name der ges. Kompo>')) then überprüft ob es eine Komponente eines bestimmten Namens schon existiert
Markus Kinzler
  Mit Zitat antworten Zitat
ShortyHL

Registriert seit: 27. Feb 2008
Ort: Lübeck
29 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren

  Alt 9. Mär 2008, 14:18
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?
  Mit Zitat antworten Zitat
Noobinator

Registriert seit: 9. Mai 2006
147 Beiträge
 
Delphi 7 Personal
 
#8

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren

  Alt 9. Mär 2008, 14:24
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.

if Assigned(Form1.FindComponent('DBE')) then FreeAndNil(DBE);
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren

  Alt 9. Mär 2008, 14:25
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
Markus Kinzler
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren

  Alt 9. Mär 2008, 14:26
@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;
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:49 Uhr.
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