Delphi-PRAXiS

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 SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Test') (https://www.delphipraxis.net/123991-setstrprop-findcomponent-status_1-text-hallo-test.html)

cramer 12. Nov 2008 18:49


SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Test')
 
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'.
Delphi-Quellcode:
 SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Test');
Statt 'Hallo Test' gibt aber nur eine AV Exception.

Uwe Raabe 12. Nov 2008 19:06

Re: SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Tes
 
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;

cramer 13. Nov 2008 07:15

Re: SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Tes
 
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

Uwe Raabe 13. Nov 2008 07:24

Re: SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Tes
 
FindComponent muss im Owner der gesuchten Komponente aufgerufen werden. So wie die Komponente erzeugt wird

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

Delphi-Quellcode:
formular.FindComponent('STATUS_1');
wiederfinden.

Hawkeye219 13. Nov 2008 07:34

Re: SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Tes
 
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

cramer 13. Nov 2008 08:12

Re: SetStrProp(FindComponent('STATUS_1'), 'TEXT', 'Hallo Tes
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 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