AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen
Thema durchsuchen
Ansicht
Themen-Optionen

Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen

Ein Thema von aschne1 · begonnen am 26. Jul 2004 · letzter Beitrag vom 30. Mär 2011
Antwort Antwort
Seite 1 von 2  1 2      
aschne1

Registriert seit: 18. Jul 2004
Ort: Davos
64 Beiträge
 
Delphi 2005 Professional
 
#1

Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen

  Alt 26. Jul 2004, 18:39
Hallo

Ich erzeuge zur Laufzeit einige Komponenten und das funktioniert auch prima. Leider kann ich aber auf den Inhalt nicht zugreifen. Beim Compilieren ist fertig. Die erzeugte Komponenten wird als 'ungültiger Bezeichner' erkannt!
Kann mir jemand weiterhelfen

Besten Dank zum Voraus

Gruss Armin

Delphi-Quellcode:
// Erzeugen der Komponente
procedure TForm1.CreateEdit(name: String; links, oben, breite, hoehe: Integer);
begin
 if TEdit(FindComponent(name)) = nil then // Feld nicht vorhanden
 begin
  edi_feld := TEdit.Create(Self);
  with edi_feld do
  begin
   Parent := Self;
   Name := name;
   AutoSize := False;
   SetBounds(links, oben, breite, hoehe)
  end;
  abstand := links + breite + 3 // Position aktualisieren
 end
end;
...
// Zugriff auf die erzeugte Komponente - Hier meckert der Compiler !
 if TEdit(FindComponent(name)) <> nil then Stringvariable := 'name der komponente'.Text;
Armin
aschne1
  Mit Zitat antworten Zitat
Benutzerbild von mischerr
mischerr

Registriert seit: 6. Feb 2004
Ort: Konz
238 Beiträge
 
Delphi 12 Athens
 
#2

Re: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen

  Alt 26. Jul 2004, 18:45
Das geht so nicht!

Code:
Name := name;
Nenn die übergebene Variable um z.B. AName! Also

Code:
Name := AName;
Grüsse!
  Mit Zitat antworten Zitat
aschne1

Registriert seit: 18. Jul 2004
Ort: Davos
64 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen

  Alt 26. Jul 2004, 19:16
Hallo mischerr

Danke für Deine rasche Hilfe. Ich musste nur noch den Zugriff ändern, dann funktionierte es. Gibt es eine elegantere Variante?

 if TEdit(FindComponent(AName)) <> nil then Stringvariable := TEdit(FindComponent(AName)).Text; mfg Armin
Armin
aschne1
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
295 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen

  Alt 29. Mär 2011, 09:47
Klar! Auf with verzichten. Diese unübersichtliche, tippfaule, nebulöse Programmierung bringt nur Nachteile. Na gut, man spart sich ein paar Tastaturanschläge - legt die beim Debuggen locker mehrfach drauf.
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#5

AW: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen

  Alt 29. Mär 2011, 10:34
stimmt nicht! es ist laut Delphi Hilfe effizienter. Aber dann sparsam und nur in performancekritischen Schleifen einsetzen. Der Debugger mag das nicht D2009). Außerdem wird es mit zunehmender Länge der Blöcke schwer verständlich.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

AW: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen

  Alt 29. Mär 2011, 10:41
stimmt nicht! es ist laut Delphi Hilfe effizienter.
Wo hast Du das gelesen? Abgesehen davon überwiegen die Nachteile derart, dass man wirklich nur von with abraten kann, Beispiele dafür gibt es haufenweise hier im Forum.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#7

AW: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen

  Alt 29. Mär 2011, 11:02
Aus der Delphi 2009 Hilfe: Deklarationen und Anweisungen

Zitat:
with-Anweisungen
Eine with-Anweisung stellt eine einfache und bequeme Möglichkeit dar, die Felder eines Records oder die Felder, Eigenschaften und Methoden eines Objekts zu referenzieren. Die Syntax für eine with-Anweisung lautet

Delphi-Quellcode:
with Objekt do Anweisung, oder
with Objekt1, ..., Objektn do Anweisung
Hierbei ist Objekt ein Ausdruck mit einer Referenz auf einen Record, eine Objektinstanz, eine Klasseninstanz, eine Interface- oder Klassentyp (Metaklassen)-Instanz. Anweisung ist eine einfache oder eine strukturierte Anweisung. Innerhalb von Anweisung brauchen Felder, Eigenschaften und Methoden von Objekt nur über ihren Bezeichner referenziert zu werden. Die Angabe von Qualifizierern ist nicht erforderlich.

Ausgehend von den Deklarationen
Delphi-Quellcode:
type
  TDate = record
    Day: Integer;
    Month: Integer;
    Year: Integer;
  end;

var
  OrderDate: TDate;

with OrderDate do
 if Month = 12 then
   begin
     Month := 1;
     Year := Year + 1;
   end
 else
   Month := Month + 1;
if OrderDate.Month = 12 then
  begin
   OrderDate.Month := 1;
   OrderDate.Year := OrderDate.Year + 1;
  end
else
  OrderDate.Month := OrderDate.Month + 1;
Wenn die Interpretation von Objekt die Indizierung von Arrays oder die Dereferenzierung von Zeigern verlangt, werden diese Aktionen einmal durchgeführt, bevor die Anweisung ausgeführt wird. Dies macht with-Anweisungen sowohl effizient als auch kurz. Außerdem können sich während der aktuellen Ausführung der with-Anweisung Zuweisungen an eine Variable innerhalb von Anweisung nicht auf die Interpretation von Objekt auswirken.

Jede Variablenreferenz und jeder Methodenname in einer with-Anweisung wird, wenn möglich, als Element des angegebenen Objekts bzw. Records interpretiert. Wenn in der with-Anweisung auf eine andere Variable oder Methode mit demselben Namen zugegriffen werden soll, ist ein Qualifizierer erforderlich:

Delphi-Quellcode:
with OrderDate do
  begin
    Year := Unit1.Year;
       ...
  end;
Wenn auf with mehrere Objekte oder Records folgen, wird die gesamte Anweisung als Folge von verschachtelten with-Anweisungen behandelt. Die Anweisung:

with Objekt1, Objekt2, ..., Objektn do Anweisung ist gleichbeudeutend mit

Delphi-Quellcode:
with obj1 do
  with obj2 do
    ...
    with objn do
      // Anweisung
In diesem Fall wird jede Variablenreferenz und jeder Methodenname in Anweisung als Element von Objektn behandelt, wenn dies möglich ist. Andernfalls wird die Referenz bzw. der Name als Element von Objektn1 interpretiert usw. Dieselbe Regel gilt für die Interpretation der Objekte selbst. Ist beispielsweise Objektn sowohl ein Element von Objekt1 als auch von Objekt2, wird es als Objekt2.Objektn interpretiert
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

AW: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen

  Alt 29. Mär 2011, 11:40
Ich lese daraus nicht, dass with effizienter sein soll als der Verzicht darauf.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

AW: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen

  Alt 29. Mär 2011, 12:05
Nun, wir haben es hier mit einer Kollison des Scope zu tun.
Sowohl das dynamisch angelegte TEdit als auch das übergeordnete TForm besitzen teilweise die gleichen Properties (Name, Parent, Autosize, SetBounds).
Durch die Verwendung von With kann der Programmierer nicht mehr zuverlässig unterscheiden, welches Objekt konkret angesprochen wird.

Sobald aber nur die geringste Unsicherheit besteht, sollte man von With die Finger lassen.
Der Gewinn von Zeit im Mikrosekundenbereich ist es einfach nicht wert.
Andreas
  Mit Zitat antworten Zitat
Patito

Registriert seit: 8. Sep 2006
108 Beiträge
 
#10

AW: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen

  Alt 29. Mär 2011, 13:43
Von With-statements sollte man bekanntlich grundsätzlich die Finger lassen.
Von dem Beispiel aus der Delphi 2009 Hilfe kriegt man ja ganz blutige Augen... Aua!

Ausserdem sieht oben im Code die Verwendung von FindComponent() noch ein wenig nach
einer zweiten Sollbruchstelle aus. Normalerweise sollte man Objekte über vernünftige Objekt-Referenzen
verwalten. Zur Laufzeit mit Objekt-Namen herumzuhantieren sieht immer etwas amateurhaft aus.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:51 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