![]() |
Beliebig viele Editfelder anzeigen
Nabend.
Ich möchte auf einem Formular beliebig viele (bis max. 10) Editfelder anzeigen lassen können. Die Anzahl der TEdits soll der Benutzer durch 2 Buttons '+' und '-' einstellen können. Idealerweiße werden die Editfelder untereinander gelistet. Ich dachte dabei an eine TObjectList (aus der Unit Contnrs).
Delphi-Quellcode:
Jetzt dachte ich, ich könnte bei einem InsertEdit folgendes tun:
private
{ Private-Deklarationen } EditList : TObjectList ; ... EditList := TObjectList.Create; ... EditList := TObjectList.Free; // Gibt alle Objekte im Array und das Objekt selbst frei
Delphi-Quellcode:
Aber das funktioniert leider nicht - denn der Compiler weiß ja noch nicht, dass ich im Objekt eine WinControl-Instanz habe. Wie kann ich soetwas lösen?
var i : integer;
begin i := EditList.Add(TEdit.Create(self)); EditList.Items[i].Left := 10; EditList.Items[i].Text := 'bla'; ... end Danke. |
Re: Beliebig viele Editfelder anzeigen
Versuch es doch mal so...
Delphi-Quellcode:
var i : integer;
ItemObject:TObject; Edit:TEdit; begin i := EditList.Add(TEdit.Create(self)); ItemObject:=EditList.Items[i]; if ItemObject is TEdit then begin Edit:=TEdit(ItemObject); Edit.Left := 10; Edit.Text := 'bla'; end; ... end |
Re: Beliebig viele Editfelder anzeigen
Alles klar, danke ;)
//Warum muss ich den Umweg über den ItemObject gehen? |
Re: Beliebig viele Editfelder anzeigen
Ich finde das übersichtlicher, erforderlich ist es nicht.
|
Re: Beliebig viele Editfelder anzeigen
mh, ich kann Eigenschaften so viel ich will dem Editfeld hinzufügen - es wird zwar Speicher dafür angelegt aber es wird nirgends auf dem Form angezeigt.
Was vergesse ich? |
Re: Beliebig viele Editfelder anzeigen
Edit.Parent gesetzt?
|
Re: Beliebig viele Editfelder anzeigen
Perfekt! Das wars! Ich danke dir <3
|
Re: Beliebig viele Editfelder anzeigen
Hallo,
hab beim Stöbern diesen Beitrag entdeckt und deshalb mal die folgende Prozedur entwickelt:
Delphi-Quellcode:
Da ich unter Lazarus die TDbf Komponente verwende, habe ich statt TObjectlist eine normale Stringlste verwendet.
procedure Tdbmain.CreateMask;
var FieldNum: Integer; Field: TStrings; FieldName: String; TopPos,LeftPos: Integer; begin TopPOs := 5; LeftPos := 40; Field := TStrings.Create; dbf.Fields.GetFieldNames(Field); for Fieldnum := 0 to dbf.Fields.Count-1 do begin FEdit := TLabeledEdit.Create(Self); FEdits.AddObject(Field[Fieldnum], FEdit); end; for Fieldnum := 0 to dbf.Fields.Count-1 do begin FieldName := LowerCase(Field[FieldNum]); FieldName[1] := Upcase(FieldName[1]); FCtrl := FEdits.Objects[FieldNum]; FEdit := TLabeledEdit(FCtrl); FEdit.Parent := DBScroll; FEdit.Left := 40; FEdit.Top := TopPos; FEdit.Show; Inc(TopPos, FEdit.Height + 5); end; Field.Free; end; Nun frag ich mal, wie ordnet die IDE bei datensensitiven Komponenten die Felnamen zu. Wenn ich diesen Mechnismus für eine Eingabemaske einer Datenbank verwenden will, muss ja diese Maske, abhängi von der Anzahl der Felder in der Datenbank unterschiedlich viele Eingabefelder haben,. Der Einfachheit halber will ich erst mal nur Editfelder (TDBEdit) verwenden, zusammen mit TDBText wegen dem Eingabeprompt. Wie ordnet TDatasource dem Eingabefeld das richtige Datenbankfeld zu? Inzwischen werde ich weiter experimentieren. Vielleicht genügt es ja, einfach Feldanzahl Editfelder in die Liste einzufügen und nach obiger Prozedur zur Anzeige zu bringen, während TDataSource sich um die richtige Feldzuordnung kümmert. Wenn das klappt, wieso klappt das? Das ich TDbf verwende liegt an der Art meiner Datenbank, die im Umfang klein genug ist, um keine umfangreiche Datenbankmaschine zu benötigen. |
Re: Beliebig viele Editfelder anzeigen
Ja, wie ordnet DataSource das richtige Datenfeld zu. Das interessiert mich auch. Lad Dir mal Turbo Delphi runter. Da sind die Quelltexte sämtlicher Komponenten dabei. Damit sollte sich die Frage beantworten lassen.
|
Re: Beliebig viele Editfelder anzeigen
Hallo,
ich vestehe die Fragestellung nicht @I.A. Es gibt doch neben der Eigenschaft DataSource noch die Eigenschaft DataField, die dem Eingabefeld das richtige Datenbenk-Feld zuweist. Das stht sogar unmittelbar bei der Eigenschaft DataSource. Dort das Datenfeld zuweisen und gut is. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 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