Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Beliebig viele Editfelder anzeigen (https://www.delphipraxis.net/129112-beliebig-viele-editfelder-anzeigen.html)

BackOrifice 12. Feb 2009 23:47


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:
  private
    { Private-Deklarationen }
    EditList : TObjectList ;
...
  EditList := TObjectList.Create;
...
  EditList := TObjectList.Free; // Gibt alle Objekte im Array und das Objekt selbst frei
Jetzt dachte ich, ich könnte bei einem InsertEdit folgendes tun:
Delphi-Quellcode:
var i : integer;
begin
  i := EditList.Add(TEdit.Create(self));
  EditList.Items[i].Left := 10;
  EditList.Items[i].Text := 'bla';
...
end
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?

Danke.

omata 13. Feb 2009 00:21

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

BackOrifice 13. Feb 2009 00:27

Re: Beliebig viele Editfelder anzeigen
 
Alles klar, danke ;)

//Warum muss ich den Umweg über den ItemObject gehen?

omata 13. Feb 2009 00:30

Re: Beliebig viele Editfelder anzeigen
 
Ich finde das übersichtlicher, erforderlich ist es nicht.

BackOrifice 13. Feb 2009 01:00

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?

omata 13. Feb 2009 01:05

Re: Beliebig viele Editfelder anzeigen
 
Edit.Parent gesetzt?

BackOrifice 13. Feb 2009 15:24

Re: Beliebig viele Editfelder anzeigen
 
Perfekt! Das wars! Ich danke dir <3

I.A 14. Feb 2009 14:10

Re: Beliebig viele Editfelder anzeigen
 
Hallo,

hab beim Stöbern diesen Beitrag entdeckt und deshalb mal die folgende Prozedur entwickelt:

Delphi-Quellcode:
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;
Da ich unter Lazarus die TDbf Komponente verwende, habe ich statt TObjectlist eine normale Stringlste verwendet.

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.

schöni 14. Feb 2009 19:40

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.

delphifan2004 15. Feb 2009 13:50

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 04:00 Uhr.
Seite 1 von 2  1 2      

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