![]() |
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
[Fehler] Unit1.pas(108): Inkompatible Typen: 'TDBEdit' und 'TComponent' in der Zeile:
Delphi-Quellcode:
DBE := Form1.FindComponent('DBEdit_' + IntToStr(y));
|
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
Delphi-Quellcode:
var DBE: TComponent;
var y: Integer; begin Save_NumFields := NumFields; // NumFields wird mit der Funktion übergeben und ist eben die Anzahl der Felder, die erstellt werden sollen // if not Assigned(DBE) then begin for y := 1 to Save_NumFields do begin DBE := Form1.FindComponent('DBEdit_' + IntToStr(y)); if (DBE is TDBEdit) then FreeAndNil(DBE); end; // end; end; |
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
Das wird den Fehler aber nicht beheben, da die betroffene Zeile
Delphi-Quellcode:
ist
DBE := Form1.FindComponent('DBEdit_' + IntToStr(y));
|
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
DBE ist jetzt aber TComponent.
|
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
und genau das verursacht ja den Fehler..
|
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
Zitat:
|
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
Oh, hatte die Variablendeklaration übersehen.. Ok, klappt nun, allerdings spuckt meine weitere Funktion nun Fehler aus, weil sämtliche Methoden nicht mehr verfügbar sind...
|
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
Wenn Du die Zeile
Delphi-Quellcode:
drinlässt, kannst Du doch anschließend explizit auf TDBEdit casten.
if (DBE is TDBEdit) then
|
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
Hm, ich glaub, ich kann nicht ganz nachvollziehen, was du meinst. Hab versucht, es so umzusetzen, wie du meintest, aber bin zu keine positiven Ergebnis gekommen.
|
Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
Das ist zu kompliziert für Dich, denke ich mal.
Du willst also dynamische Controls erstellen und musst vorher einen eindeutigen Namen zuweisen? Entweder ich pflege eine Zählvariable für alle Controlklassen, oder für jede Klasse einen eignen, oder ich spare mir das und verwende zufällige Zeichenfolgen und drücke die Daumen, das ich keine Kollision habe. Oder ich erzeuge so lange einen Namen (Klassenname+Zähler), bis ich einen gefunden habe, der noch nicht vergeben ist.
Delphi-Quellcode:
Dieser (ziemlich dämlliche aber funktionierende Code) liefert einen 20-stelligen Namen, den man einem Control zuweisen kann.
Function TForm1.CreateUniqueControlName : String;
Const sAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; Var i : Integer; Begin setLength (Result,20); Repeat For i=1 to Length (Result) Do Result[i] := sAlphabet[Random(Length (sAlphabet) + 1]; Until Not Assigned (FindComponent (Result)); End; So kann man es auch machen, aber das ist schon etwas langsam:
Delphi-Quellcode:
Diese Funktion liefert einen etwas hübscheren Namen (Klassenname + fortlaufende Nummer).
Function TForm1.CreateUniqueControlName (aClassName : String = 'Ctl') : String;
Var Cnt : Integer; Begin Cnt := 0; Repeat Inc (Cnt); Result := aClassName+IntToStr(Cnt); Until Not Assigned (FindComponent (Result)); End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 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-2025 by Thomas Breitkreuz