Delphi-PRAXiS
Seite 3 von 6     123 45     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 10. Mär 2008 13:57

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

DeddyH 10. Mär 2008 14:02

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;

ShortyHL 10. Mär 2008 14:04

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
 
Das wird den Fehler aber nicht beheben, da die betroffene Zeile
Delphi-Quellcode:
DBE := Form1.FindComponent('DBEdit_' + IntToStr(y));
ist

DeddyH 10. Mär 2008 14:05

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
 
DBE ist jetzt aber TComponent.

ShortyHL 10. Mär 2008 14:22

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
 
und genau das verursacht ja den Fehler..

DeddyH 10. Mär 2008 14:28

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

Zitat von Delphi-Hilfe
function FindComponent(const AName: string): TComponent;

Also muss sich DBE zuweisen lassen, wenn man es als TComponent deklariert.

ShortyHL 10. Mär 2008 14:33

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...

DeddyH 10. Mär 2008 14:37

Re: Problem: DBEdit/Edit Felder per Knopfdruck generieren
 
Wenn Du die Zeile
Delphi-Quellcode:
if (DBE is TDBEdit) then
drinlässt, kannst Du doch anschließend explizit auf TDBEdit casten.

ShortyHL 10. Mär 2008 16:03

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.

alzaimar 10. Mär 2008 16:44

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:
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;
Dieser (ziemlich dämlliche aber funktionierende Code) liefert einen 20-stelligen Namen, den man einem Control zuweisen kann.

So kann man es auch machen, aber das ist schon etwas langsam:
Delphi-Quellcode:
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;
Diese Funktion liefert einen etwas hübscheren Namen (Klassenname + fortlaufende Nummer).


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 Uhr.
Seite 3 von 6     123 45     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