AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Test')
Thema durchsuchen
Ansicht
Themen-Optionen

SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Test')

Ein Thema von cramer · begonnen am 12. Nov 2008 · letzter Beitrag vom 13. Nov 2008
Antwort Antwort
Benutzerbild von cramer
cramer

Registriert seit: 23. Jun 2004
Ort: Velbert (NRW)
108 Beiträge
 
Delphi 2006 Enterprise
 
#1

SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Test')

  Alt 12. Nov 2008, 19:49
Hi,
ich erzeuge zur Laufzeit auf einem Panel unter anderem eine TEdit Componente mit dem Namen STATUS_1 und möchte in einem DataSourceDataChangeEvent einen String zuweisen, hier erstmal zum Test nur 'Hallo Test'.
 SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Test'); Statt 'Hallo Test' gibt aber nur eine AV Exception.
Erfahrung ist etwas, daß man erst bekommt, kurz nachdem man es dringend gebraucht hätte.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

Re: SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Tes

  Alt 12. Nov 2008, 20:06
Kann es sein, daß die Komponente beim DataSourceDataChangeEvent noch gar nicht erzeugt wurde?

Mit diesem Code kannst du das umgehen:

Delphi-Quellcode:
var
  edit: TEdit;
begin
  edit := FindComponent('STATUS_1') as TEdit;
  if edit <> nil then
    edit.Text := 'Hallo Test';
end;
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von cramer
cramer

Registriert seit: 23. Jun 2004
Ort: Velbert (NRW)
108 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Tes

  Alt 13. Nov 2008, 08:15
Hallo Uwe,
ich habe es mal so versucht
Delphi-Quellcode:
var
  edit: TEdit;
begin
  edit := FindComponent('STATUS_1') as TEdit;
  if edit <> nil then begin
    debugStr('status_1 gefunden');
    edit.Text := 'Hallo Test';
  end;
end;
und dabei festgestellt, daß die Komponente nicht gefunden wird.
Da sie aber auf dem Formular ist und auch der Name status_1 ist(a) stellt sich die Frage, in welchem Context FindComponent sucht.
(a) bei der Erstellung wird der Name als Text eingesetzt.
Delphi-Quellcode:
xEdit := TEdit.create(formular);
with xEdit do begin
  parent := formular;
  name := x_q.fields[i].fieldname+'_1';
  text := name;
end;
Gruß Uwe
Erfahrung ist etwas, daß man erst bekommt, kurz nachdem man es dringend gebraucht hätte.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#4

Re: SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Tes

  Alt 13. Nov 2008, 08:24
FindComponent muss im Owner der gesuchten Komponente aufgerufen werden. So wie die Komponente erzeugt wird

xEdit := TEdit.create(formular); müsste man sie mit

formular.FindComponent('STATUS_1'); wiederfinden.
Uwe Raabe
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Tes

  Alt 13. Nov 2008, 08:34
Hallo,

wäre es nicht sinnvoller, beim Erzeugen des Eingabefelds eine (dauerhafte) Referenz darauf in einer Variablen zu speichern anstatt immer wieder das Feld suchen?

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von cramer
cramer

Registriert seit: 23. Jun 2004
Ort: Velbert (NRW)
108 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Tes

  Alt 13. Nov 2008, 09:12
Das war der entscheidende Hinweis, über Formular.findComponent wird sie gefunden.
Zitat:
Ob eine dauerhafte Referenz sinnvoller wäre?
Im Panel befinden sich zur Zeit 10 Komponenten und laut Debugger dauert die Suche auf meinem System 2.0GHz CPU bei einer Datensatzänderung inklusive Debuggerausgabe 0,00342941 Sekunden:
Zitat:
Debugliste
15 10.53641415 [5128] STATUS_1 suchen
16 10.53984356 [5128] STATUS_1 gefunden
Erfahrung ist etwas, daß man erst bekommt, kurz nachdem man es dringend gebraucht hätte.
  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 06:04 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