AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: VCL / WinForms / Controls Delphi Komponenten dynamisch erzeugen und darauf zugreifen
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten dynamisch erzeugen und darauf zugreifen

Ein Thema von Nicodius · begonnen am 1. Jun 2004
Antwort Antwort
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#1

Komponenten dynamisch erzeugen und darauf zugreifen

  Alt 1. Jun 2004, 10:16
da immer wieder Fragen bzgl. diesem Thema auftauchen
hier ein kleines(winziges) Tutorial

weil ich noch nie eins gemacht habe kann es sich natürlich mit keinem anderen hier messen

aber ich hoffe einigen Usern zu helfen


Delphi-Quellcode:
unit Unit1;

{BY NICO MÜLLER
für die DP User}

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    Button1: TButton;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Auswahl : Integer = -1; // gewünschtes Feld
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Stringgrid: TStringgrid; // startname : TComponent
  i : Integer; // Zählvariable
begin
  { Wir gehen davon aus das Pagecontrol1(zusätzliches 2 Komponente)
  sich am Form1 befindet und das 3 Tabsheets drauf sind
  (Rechtsklick auf das oageCOntrol1 "neue Seite"}


  for i := 0 to PageControl1.PageCount-1 do // von 1 bis zur Anzahl der Tabheets zählen
  begin
                                          
    Stringgrid:= TStringgrid.Create(self); // neue Komponenten erzeugen
    // dann alles waste brauchst(felder ins stringgrid etc)
    Stringgrid.Parent := PageControl1.Pages[i]; { wo es sich befinden soll, hier ists die jeweilige aktuelle Seite}

    stringgrid.Name := 'St_' + intToStr(i); //neuen namen geben
  end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
  text : String; // der Text der Eingegeben soll
begin
  Auswahl := StrToInt(Inputbox('Index angeben','Bitte den' +
  ' Index der gewünschten Tabelle eingeben(0-2)',
  IntToStr(Auswahl+1))); // Auswahl wird gelsesen
  Text := Inputbox('Text angeben','Bitte ´den Text der eingetragen werden soll eingeben',
  'TEST'); // Text wird eingelesen
    with TStringgrid(FindComponent('St_' + IntToStr(Auswahl))) do
      Cells[1,1] := Text; // die "ST_<Auswahl>" wird bei [1,1](links oben) mit dem text beschriftet
end;

end.
Nachtrag von SirThornberry:
Zitat:
Find Komponent ist nicht gerade die schnellste Variante, deswegen wäre es sinnvoller einmal mit Findkomponent alle Stringgrids zu suchen und in ein Array zu packen. Bzw. wäre es noch sinnvoller sie gleich bei der Erstellung in ein Array zu packen.
Source:
Delphi-Quellcode:
MyStringgrids: Array of TStringGrid;
[...]
var
  Stringgrid: TStringgrid;
  i : Integer;
begin
  for i := 0 to PageControl1.PageCount-1 do // von 1 bis zur Anzahl der Tabheets zählen
  begin
    Stringgrid:= TStringgrid.Create(self);
    Stringgrid.Parent := PageControl1.Pages[i];
    setlength(MyStringgrids, length(Stringgrids)+1);
    MyStringgrids[length(MyStringgrids)-1] := Stringgrid; //somit kann man später per "MyStringgrids[x]" drauf zugreifen

Die Findkomponentvariante sollte man nur verwenden wenn sich die Edits, Stringgrids oder worum es sich auch immer handelt bereits auf dem Form befinden und man diese dann später in einem Array ansprechen will
Source:

Delphi-Quellcode:
MyEdits: Array of TEdit;
[...]
var
  i: Integer;
  LEdit: TEdit;
begin
  setlength(MyEdits, 20);
  for i := 1 to 20 do
  begin
    MyEdits[i-1] := TEdit(FindComponent('Edit' + inttostr(i)));
  end;
end;
Fragen bitte an "s.mueller@inode.at" --> ODER per ICQ an "291515392"

--> ich denke es ist die richtige Sparte


positive Kritik und Hilfen zur Verbesserung sind gerne erwünscht

mfg

Nicodius

[edit=Chakotay1308]Nachtrag von SirThornberry. Mfg, Chakotay1308[/edit]
[edit=Matze]Code formatiert. Mfg, Matze[/edit]
[edit=flomei]Wir "räumen auf", daher Titel geändert... Mfg, flomei[/edit]
Nico Müller
  Mit Zitat antworten Zitat
Antwort Antwort

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 18:16 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