AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Komponenten Eigenschaft in gesamter Anwendung ändern
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten Eigenschaft in gesamter Anwendung ändern

Ein Thema von Pichel · begonnen am 21. Mär 2009 · letzter Beitrag vom 22. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#1

Komponenten Eigenschaft in gesamter Anwendung ändern

  Alt 21. Mär 2009, 12:41
Hiho, bin mal wieder am verzweifeln (glaub ich werde alt ^^)

Ich wollte einfach mal schnell nen Funktion basteln um im Form (oder besser gleich gesamten Anwendung) in allen Komponenten eine Eigenschaft zu ändern.

Im konkreten Beispiel wollte ich die Eigenschaft "Charset" von TFont global ändern.
Hab natürlich gesucht und am effektivsten war das:
http://www.delphipraxis.net/internal...t.php?t=114143

Funktioniert auch, sofern die Komponenten die Eigenschaft Font direkt haben. nimmt man nun als Beispiel den VirtualStringTree versteckt sich auch ein Font in Komponente.Header.Font und wer weis wo noch alles.

Mein Ansatz: also müsste ich bei jeder Komponente per GetPropList nach Typ TFont durchsuchen und Eigenschaften die wiederum Unter-Eigenschaften haben ebenfalls durchsuchen nach TFont.

Und genau diesbezüglich sitz ich jetzt schon stundenlang auf der Leitung und hoffe auf Eure Hilfe.
Grüße aus Kassel.

Konfuzius sprach: Etwas lernen und sich immer wieder darin üben - schafft das nicht auch Befriedigung?
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Komponenten Eigenschaft in gesamter Anwendung ändern

  Alt 21. Mär 2009, 13:33
Hi,

wenn alle Komponenten den gleichen Font haben (nehme ich mal jetzt an), dann haben sie ja die Eigenschaft ParentFont auf true gesetzt. Das bedeutet, man muss doch nur die Font Eigenschaft der Form ändern, und "wuppdi".....

oder nicht

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#3

Re: Komponenten Eigenschaft in gesamter Anwendung ändern

  Alt 21. Mär 2009, 13:42
Zitat von thkerkmann:
wenn alle Komponenten den gleichen Font haben (nehme ich mal jetzt an), dann haben sie ja die Eigenschaft ParentFont auf true gesetzt. Das bedeutet, man muss doch nur die Font Eigenschaft der Form ändern, und "wuppdi".....
Leider nicht, sonst wäre ich ja nicht so "kopflos"
Zum einen sind einige Fonts (TFont war nur mein Beispiel und es sollte ja auch für ander Typen funktionieren) nicht auf ParentFont und zum anderen gibt es auch Komponenten die nicht nur die Font-Eigentschaft haben sondern darüber hinaus auch zb Eigenschaften wie "HeaderFont" oder ähnlichem welche aber auch vom Typ TFont sind.

Also müsste ich alles nach dem Type durchsuchen und auf der Leitung sitze ich leider
Grüße aus Kassel.

Konfuzius sprach: Etwas lernen und sich immer wieder darin üben - schafft das nicht auch Befriedigung?
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Komponenten Eigenschaft in gesamter Anwendung ändern

  Alt 21. Mär 2009, 17:09
Achso,

dann werf ich mal die Begriffe RTTI und HasProperty in den Raum. Mit deren Hilfe und der Forumssuche sollte es dir gelingen die richtigen Ansätze zu finden. Eine fertige Lösung hab ich leider nicht für dich.

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Komponenten Eigenschaft in gesamter Anwendung ändern

  Alt 21. Mär 2009, 17:16
Zitat von Pichel:
Im konkreten Beispiel wollte ich die Eigenschaft "Charset" von TFont global ändern.
Und in diesem konkreten Fall sage ich dir das eine auf Charset basierte internationalisierung einer anwendung mist ist und an diesersen Stellen einfach nicht funktioniert. Für diesen Fall empfehle ich dir entweder D2009, ElPack oder TNTWare-Controls.

Für das allgemeine Problem ist eine eigene Basis-Formularklasse hilfreich in der du (in Zusammenarbeit mit der RTTI) im Form-Konstruktor die entsprechenden Properties auf passende Werte setzt. Beim Einsatz des ElPack hättest du auch mit Hilfe eines CSS-Ähnlichen-Systems das auch noch zur Laufzeit dynamisch durch zu führen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#6

Re: Komponenten Eigenschaft in gesamter Anwendung ändern

  Alt 21. Mär 2009, 18:00
Zitat von Bernhard Geyer:
Und in diesem konkreten Fall sage ich dir das eine auf Charset basierte internationalisierung einer anwendung mist ist und an diesersen Stellen einfach nicht funktioniert. Für diesen Fall empfehle ich dir entweder D2009, ElPack oder TNTWare-Controls.
Durchschaut
nun, D2009 ist nicht gerade mal so eben angeschafft vorallem da ich mit D7 Prof. sehr zufrieden bin.
ElPack ist schon günstiger und TNT ist wirklich günstig nur diesbezüglich, was mach ich mit Komponenten welche da nicht vorhanden sind, zB aus Jedi Sammlung oder mein lieb gewonnener VST.

Zitat von Bernhard Geyer:
Für das allgemeine Problem ist eine eigene Basis-Formularklasse hilfreich in der du (in Zusammenarbeit mit der RTTI) im Form-Konstruktor die entsprechenden Properties auf passende Werte setzt
Also wie mein bisheriger Ansatz über die Components und per GetPropList(Components[k], PropList) die Eigenschaften durchlaufen.

Nun muss wohl nen paar Nächte drüber schlafen, denn genau auf der Leitung sitze ich gerade. Oder schuppst mich jemand runter
Grüße aus Kassel.

Konfuzius sprach: Etwas lernen und sich immer wieder darin üben - schafft das nicht auch Befriedigung?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Komponenten Eigenschaft in gesamter Anwendung ändern

  Alt 21. Mär 2009, 18:12
Zitat von Pichel:
ElPack ist schon günstiger und TNT ist wirklich günstig nur diesbezüglich, was mach ich mit Komponenten welche da nicht vorhanden sind, zB aus Jedi Sammlung oder mein lieb gewonnener VST.
Umbauen oder beim VST ist dies ja nicht nötig (auch wenn es bei Elpack ähnlichel Control gibt), da ja VST auch Unicode-Enabled ist.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Komponenten Eigenschaft in gesamter Anwendung ändern

  Alt 21. Mär 2009, 18:45
Schau Dir doch mal die TsiLang-Suite an
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Komponenten Eigenschaft in gesamter Anwendung ändern

  Alt 21. Mär 2009, 18:48
Hi Pichel,

warum soll das mit der PropList nicht gehen. Du iterierst durch die Properties und immer wenn ein Prop vom Typ tkClass ist holst du dir deren Propertys. Das geht rekursiv sehr gut und du findest alle Fonts und alle Charsets.
Delphi-Quellcode:
procedure ChangeCharset(APropObj : TObject; ACharset : TFontCharset);
var PropList : PPropList;
    Counter : Integer;
    PropName : String;
    SubObj: TObject;
begin
  if not Assigned(APropObj) then
    Exit;

  PropCount := GetPropList(APropObj.ClassInfo, PropList);
  for Counter := 0 to PropCount - 1 do begin
    isClass := False;
    PropValue := '';
    SubObj := nil;
    PropName := PropList[Counter]^.Name;
    if PropName = 'Charsetthen
      SetOrdProp(APropObj, ACharset);
    if PropList[Counter]^.PropType^.Kind in [tkClass] then begin
      // neue Unterklasse
      SubObj := GetObjectProp(APropObj, PropName);
      if Assigned(SubObj) then
        AddPropsinTree(SubObj, ACharset);
    end;
  end;
end;
Ich hab das jetzt mal stückweise aus meinem Code rauskopiert und ungeprüft geändert. Also keine Garantie. Das Prinzip sollte aber stimmen. Du hast ja geschrieben, dass du alle Komponenten deiner Anwendung suchst. Jedesmal, wenn du eine gefunden hast übergibst du diese incl. deinem neuen Charset dieser Methode und es sollte alles gesetzt werden.

Gruß oki
42
  Mit Zitat antworten Zitat
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#10

Re: Komponenten Eigenschaft in gesamter Anwendung ändern

  Alt 22. Mär 2009, 13:23
Zitat von Bernhard Geyer:
Und in diesem konkreten Fall sage ich dir das eine auf Charset basierte internationalisierung einer anwendung mist ist...
... habe das jetzt nochmal "sacken" lassen und bin eigentlich der Meinung, daß es doch tragbar ist, wenn es einfach nur darum geht, zB "Spanisch" als Spache zu unterstützen da es dort nur um wenige Sonderzeichen geht und nicht gleich der komplette Unicode Zeichensatz benötigt wird.
Grüße aus Kassel.

Konfuzius sprach: Etwas lernen und sich immer wieder darin üben - schafft das nicht auch Befriedigung?
  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 18:48 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