AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Komponenten Property ändern ála 'TLabel'(Comp.).'Caption'
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten Property ändern ála 'TLabel'(Comp.).'Caption'

Ein Thema von moelski · begonnen am 19. Mär 2009 · letzter Beitrag vom 19. Mär 2009
Antwort Antwort
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

Komponenten Property ändern ála 'TLabel'(Comp.).'Caption'

  Alt 19. Mär 2009, 10:54
Moin !

Ich muss für ein kleines Tool eine einfaches Multilang Interface mittels XML schreiben.
Ich habe da auch schon grundlegend Ideen zu, aber noch ne Frage zur Ausführung...

Also, ich würde in der XML Struktur den Wert ablegen. Bei mir geht es vornehmlich um Captions / Text - also eigentlich nur Strings.
So jetzt würde ich das gerne so in der XML ablegen:
XML-Code:
<Label1 Class="TLabel" Property="Caption" Form="FormXY">
  <German>Hallo Welt</German>
  <English>Hello World</English>
</Label1>
Soweit so gut ...
Nun möchte ich natürlich beim Programm Start die Sprache einstellen.

Datz müsste ich erstmal das Label1 finden. Das sollte ja mit...
Delphi-Quellcode:
var
  C: TComponent;
begin
  C := FindComponentEx('Label1');
machbar sein.

Jetzt muss ich ja als nächstes den Wert setzen. Das würde ja so gehen:
TLabel(C).Caption := 'Hello';

Aber wie kriege ich es nun hin, das er die Property und die Klasse aus meiner XML verwendet? Letztlich sind das ja nur zwei Strings die ich aber an der Stelle nicht so verwenden kann.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Komponenten Property ändern ála 'TLabel'(Comp.).'Caption

  Alt 19. Mär 2009, 15:58
Moin !

So ich habe mal ne Demo erstellt wo ich das etwas "händisch" durchgehe.
Ich will damit nur mal andeuten was ich eigentlich realisieren möchte.

Der wichtige Teil ist das hier:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  C: TComponent;
  ClassName, CompName, PropertyName : String;
  Value : String;
begin
  ClassName := 'TCheckBox'; // die werte kämen aus der XML Struktur ...
  CompName := 'CheckBox1';
  PropertyName := 'Caption';
  Value := 'Hallo Welt';

  C := FindComponentEx('Form1.CheckBox1');
  if C.ClassName = ClassName then begin
    if ClassName = 'TCheckBoxthen
                                                  // 0 // 1 // 2 // 3
      case AnsiIndexText(LowerCase(PropertyName), ['caption', 'text', 'lines', 'height']) of
        0 : TCheckBox(C).Caption := Value;
        3 : TCheckBox(C).Height := StrToInt(Value);
      end;

    if ClassName = 'TEditthen
      case AnsiIndexText(LowerCase(ClassName), ['caption', 'text', 'lines', 'height']) of
        1: TEdit(C).Text := Value;
      end;
  end;
end;
Nun wäre es aber müssig die ganzen verfügbaren Komponenten zu Fuss so durchzugehen.
In meinem Fall würde das sicher gehen, da ich nicht so viel an Komponenten verwende und meist eh nur Caption oder Text anpassen muss. Aber generell würde ich das schon gerne vereinfache.
Geht das evtl. mit RTTI Mitteln? Und wenn ja ... Hat da jemand ein Beispiel zu ?
Angehängte Dateien
Dateityp: zip translating_143.zip (11,5 KB, 3x aufgerufen)
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Komponenten Property ändern ála 'TLabel'(Comp.).'Caption

  Alt 19. Mär 2009, 16:04
Schau dir mal die Unit "TypeInfo.pas" an sowie die fertige Lösung GNU GetText für Delphi
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Komponenten Property ändern ála 'TLabel'(Comp.).'Caption

  Alt 19. Mär 2009, 16:10
Moin Bernhard,

danke für den Hinweis. Ich habe mich eben entsonnen das ich irgenwann schon mal was ähnliches brauchte und habe mit dem Suchbegriff RTTI meine Codes durchgesucht. Und siehe da ... Hab was wiedergefunden.
Und dann bin ich auch auf die Unit "TypInfo" gekommen

Und nach ein bisserl Suche entsprang mir dieser Code:
Delphi-Quellcode:
  C := FindComponentEx('Form1.' + CompName);
  if IsPublishedProp(C, PropertyName) then
    SetStrProp(C, 'Caption', Value);
Da brauche ich nichtmal den Klassennamen bei

Das ist eigentlich schon alles was ich gesucht habe.

Danke nochmal an Bernhard für den Tip und evtl. kanns ja jemand anders mal brauchen.

Zitat:
GNU GetText für Delphi
Ist mir bekannt. Ich würde das gerne mal selber versuchen 8)
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  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:42 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