AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Dynamisch Erstellter Button - NAME

Ein Thema von thomasschaf · begonnen am 14. Aug 2011 · letzter Beitrag vom 16. Aug 2011
Antwort Antwort
thomasschaf

Registriert seit: 13. Aug 2011
63 Beiträge
 
FreePascal / Lazarus
 
#1

Dynamisch Erstellter Button - NAME

  Alt 14. Aug 2011, 20:36
Delphi-Version: 5
Hallo,

habe jetzt dank Hilfe hier im Forum, es geschafft einem dynamisch erstellten Button ein On...-Event zuzuweisen.
(http://www.delphipraxis.net/162254-b...vents-wie.html)

Jetzt möchte ich mehrere Buttons erstellen.

Diese sollen jetzt am besten ein "NAME" haben, damit ich sie ansteuern kann.

Wie krieg ich das hin`?
Thomas
Lazarus IDE v0.9.30.4 Beta
FreePascal 2.6.0
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
Ort: Oberreichenbach
16.430 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Dynamisch Erstellter Button - NAME

  Alt 14. Aug 2011, 20:41
Dynamisch erstellt Controls brauchen keinen "Namen". Du kannst Sie entweder mittels lokaler Variable referenzieren oder falls es mehrer gleichgartete Controls sind über ein Array oder Liste. Das Namens-Property ist nur für das DFM-Streaming relevant damit beim einlesen der DFM beim Programmablauf klar ist welche DFM-"Variable" zu welcher realen Formularvariable gemappt werden soll.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Dynamisch Erstellter Button - NAME

  Alt 14. Aug 2011, 22:21
Tja, also wenns viele Buttons werden sollen, dann stimme ich Bernhard zu. Ansonsten kannst du über die Referenzvariable den Namen zuweisen:
Delphi-Quellcode:
var
  MeinButton: TButton;
begin
  MeinButton := TButton.Create(self);
  MeinButton.Name := 'DasIstMeinButton';
end;
So sollte das funktionieren. Bei vielen dynamisch erstellten Buttons solltest du die aber wirklich lieber über ein Array oder eine Liste verwalten.

LG; hans ditter
- SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  Mit Zitat antworten Zitat
thomasschaf

Registriert seit: 13. Aug 2011
63 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Dynamisch Erstellter Button - NAME

  Alt 15. Aug 2011, 17:33
Ok, aber wie würde das mit den Arrays gehen ?

Also ich würde dann so was in der Art machen:


Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  a: TButton;
  i: Integer;
begin
  for i:=1 to 100 do begin

  a    := TButton.Create(self);
  a.Parent := Form1;
  a.Visible := True;
  a.Top := 50*i+10;
  a.Left := 10;
  a.Width := 100;
  a.Height := 45;
  a.Caption := 'Der '+inttostr(i)+'. Button!';

  end;
end;
Aber wie meint ihr das mit dem Array ?

Danke!
Thomas
Lazarus IDE v0.9.30.4 Beta
FreePascal 2.6.0
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Dynamisch Erstellter Button - NAME

  Alt 15. Aug 2011, 17:36
Delphi-Quellcode:
var
  a: TButton;
Variable für eine Komponente ... wie würde man da wohl ein Array reinbauen?
array of ... + SetLength
oder array[1..100] of ... .
oder eine TObjectList
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (15. Aug 2011 um 17:38 Uhr)
  Mit Zitat antworten Zitat
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: Dynamisch Erstellter Button - NAME

  Alt 15. Aug 2011, 22:41
Hey Thomas!
Ich bin mir nicht ganz sicher, aber so wie du das gemacht hast, würde es wohl sowieso nicht funktionieren, da du dann 100 Buttons hast, aber nur einer davon durch die Variable ansprechbar ist.

Mit dem Array würde es dann, wie Himitsu schon sagte, so gehen:
Delphi-Quellcode:
var
  MyButtons: array[1..100] of TButton;
begin
  for i:= 0 to 100 do
  begin
    MyButtons[i] := TButton.Create;
    MyButtons[i].Left := 100;
    {etc. blabla}
  end;
end;
Über TObjectList kannst du dich auch im Netz informieren... einfach mal bei Google 'delphi tobjectlist' eingeben und schon solltest du was finden!
- SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
6.920 Beiträge
 
Delphi XE4 Professional
 
#7

AW: Dynamisch Erstellter Button - NAME

  Alt 16. Aug 2011, 06:29
Hallo,

ich bringe mal FindComponent ins Spiel.
Dann könnte man sich das Array sparen.

Delphi-Quellcode:
procedure TForm1.TuWas;
var
  Btn: TButton;
begin
  Btn:= TButton(FindComponent('MeinButton1'));
  if Assigned(Btn) then
  begin
  end;
end;
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Dynamisch Erstellter Button - NAME

  Alt 16. Aug 2011, 06:58
Jedesmal in einer Liste nach dem Namen zu suchen ist aber etwas "umständlicher", als mal kurz einen Index auf ein(e) Array/Liste anzuwenden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#9

AW: Dynamisch Erstellter Button - NAME

  Alt 16. Aug 2011, 07:04
Hallo,
ich bringe mal FindComponent ins Spiel.
Dann könnte man sich das Array sparen.
Nimm die mal lieber wieder aus dem Spiel. FindComponent ist doch nix. Zu langsam, zu umständlich.
Unterm Strich hätte man doch nichts gespart.

Wenn 100 Buttons (oder wie viele auch immer) dynamisch erzeugt werden sollen, steckt mehr dahinter
=> Eigene Komponente, Frame o.ä.
=> Zugriff dort hin verschieben
=> Zugriff über Array-Property
=> Implementierung egal (FindComponent, Array, TList, TObjectList)

[zu spät]
Das Bild hängt schief.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
6.920 Beiträge
 
Delphi XE4 Professional
 
#10

AW: Dynamisch Erstellter Button - NAME

  Alt 16. Aug 2011, 07:16
Hallo,

Zitat:
Nimm die mal lieber wieder aus dem Spiel. FindComponent ist doch nix. Zu langsam, zu umständlich.
Einspruch !
Was glaubst, was FindComponent macht ?
Die Methode durchläuft eine Array/TList (?) (Components).
OK, das Array/TList ist größer, aber was hat das mit "Zu langsam" zu tun.

100 Buttons werden erzeugt und mit einer Ereignis-Methode verknüpft.
Und danach ?
Ich schätze mal, der Code in der Ereignis-Methode dauert länger als das Suchen.

Zitat:
umständlich.
Eine Form-globale Array-Variable zu erzeugen und zu verwalten ist nicht umständlich ?

So, musste mal gesagt werde und jetzt wird fleissig gearbeitet
mit aufs vorm gepappten Buttons
Heiko
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf