Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Relative Zuordnung (https://www.delphipraxis.net/420-relative-zuordnung.html)

Guenni_d 18. Jul 2002 14:24


Relative Zuordnung
 
Hallo Forum,

habe ein kleines Problem. Nenne es mal realtive Zuordnung.

Folgendes:

Hab in einem String eine Komponente mit Eigenschaft stehen und will diese ansprechen.
Zum Beispiel:
Code:
teststring:='label1.caption';
Nun will ich diesen String verwenden um der Eigenschaft wirklich was zuweisen. Also wie wenn ich label.caption:='test' machen würde. Nur eben dass die Komponente in nem String drin steht.
Wie kann ich damit umgehen?

Gruss Günter

d3g 18. Jul 2002 14:44

Hallo Guenni_d,

beim Stöbern in der Delphi-Hilfe ist mir dieser Eintrag aufgefallen:

Zitat:

Zitat von Delphi 6-Hilfe
This example shows how to load and save an unpublished property whose value is a component that was created at runtime. It defines two methods, LoadCompProperty and StoreCompProperty that load or save the property value. The also defines an override for the DefineProperties method where these methods are passed to the streaming system. The DefineProperties method checks the filer's Ancestor property to avoid saving a property value in inherited forms.

Code:
procedure TSampleComponent.LoadCompProperty(Reader: TReader);
begin
  if Reader.ReadBoolean then
    MyCompProperty := Reader.ReadComponent(nil);
end;

procedure TSampleComponent.StoreCompProperty(Writer: TWriter);

begin
  Writer.WriteBoolean(MyCompProperty <> nil);
  if MyCompProperty <> nil then
    Writer.WriteComponent(MyCompProperty);
end;

procedure TSampleComponent.DefineProperties(Filer: TFiler);

  function DoWrite: Boolean;
  begin
    if Filer.Ancestor <> nil then { check Ancestor for an inherited value }
    begin
      if TSampleComponent(Filer.Ancestor).MyCompProperty = nil then
        Result := MyCompProperty <> nil
      else if MyCompProperty = nil or
         TSampleComponent(Filer.Ancestor).MyCompProperty.Name <> MyCompProperty.Name then
        Result := True

      else Result := False;
    end
    else { no inherited value -- check for default (nil) value }
      Result := MyCompProperty <> nil;
  end;
begin
  inherited; { allow base classes to define properties }
  Filer.DefineProperty('MyCompProperty', LoadCompProperty, StoreCompProperty, DoWrite);
end;

Wenn du deine Anwendungen auf diese Weise übersetzen wilst (etwas anderes kann ich mir bei deiner Frage schlecht vorstellen), könnte das das richtige für dich sein. Übrigens gibt es für diese Aufgabenstellung Komponenten, wenn du welche benutzen willst, kannst du dich ja mal bei den Links umschauen.

MfG,
d3g

Daniel 18. Jul 2002 14:49

Ich hätte jetzt "FindComponent" genutzt... Wenn wenigstens die zu ändernde Eigenschaft vorher schon bekannt ist, dann reicht es, lediglich den Namen der gesuchten Komponente in einem String zu hinterlegen.

Code:
testString:= 'Label1';
TLabel( Form1.FindComponent(testString) ).Caption:= 'aber hallo';
Grüße,
Daniel


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