2017-05-14 5 views
0

J'ai créé un style comme celui-ci:delphi Comment changer lors de l'exécution d'un sous-propriété style texte utilisateur FireMonkey

enter image description here

Puis-je créer un TLayout composant reçus en héritage nommé TLieu

Mon but est de l'instancier au moment de l'exécution et changer: Propriété Image, Propriété Title.Text, Propriété Informations.Text, Map, Infos, Boutons de lien

mon code est ceci, mais ça ne fonctionne pas (Delphi XE 10.1):

Procedure TF_Main.Button1Click(Sender: TObject); 
var 
    Lieu : TLieu; 
begin 
    Lieu := TLieu.Create(VSB_Place); 
    Lieu.Name := 'Test'; 
    Lieu.StyleName := 'Lieu'; 
    Lieu.StylesData['Title.Text'] := 'My Title'; 
    // TLayout(Lieu).StylesData['Title.Text'] := 'My Title'; // this doesn't work either 
end; 

Comment puis-je modifier les propriétés secondaires d'un composant personnalisé personnalisé lors de l'exécution?

Thx

+0

S'il vous plaît être précis sur la version Delphi. 'Delphi XE 10.1' n'existe pas! Peut-être que vous voulez dire 'Delphi 10.1 Berlin'. Mais alors la balise 'delphi-xe' est fausse. En outre, affichez la déclaration de classe pour 'TLieu'. –

+0

j'ai essayé de créer la balise Delphi-xe10 mais je n'ai pas assez de points pour créer une nouvelle balise ... donc j'ai utilisé le plus commun j'ai fondé – ffert2907

+0

Vous n'avez pas besoin de créer une nouvelle balise, et surtout pas une mauvaise un. Il y a déjà un tag pour Delphi 10.1 Berlin, car je viens d'éditer votre q pour vous. –

Répondre

1
  1. TLieu doit être héritée de TStyledControl
  2. Utilisation Lieu.StyleLookup au lieu de Lieu.StyleName
  3. Avant changement StyleData appeler ApplyStyleLookup
+0

Comment associer l'événement "OnClick" à mes boutons de style: cela ne fonctionne pas: Lieu.StylesData ['Link.Onclick']: = Button1Click; – ffert2907

+0

Lieu.StylesData ['Link.Onclick']: = TValue.From (Button1Click); –

0

Voici un exemple que je fais avec ListBox Article

vItem.StylesData['descript'] := 'Description'; 
vItem.StylesData['details'] := 'Details text'; 
vItem.ImageIndex := 3; 

Dans mon cas "descript" et "details" sont TText. vous pouvez changer les noms dans la propriété StyleName (dans les styles).

Pour modifier l'image en spécifiant simplement un index d'image pour l'élément ListBox (vItem.ImageIndex) dans mon exemple, l'image TGlyph en style doit avoir le nom 'glyphstyle'.

// comment accéder au composant dans le style:

vItem.NeedStyleLookup; 
vItem.ApplyStyleLookup; // without this, FindStyleResource will return nil 

vSwitch := vItem.FindStyleResource('switch') as TSwitch; 
Assert(vSwitch <> nil); 
vSwitch.IsChecked := vCampaign.Enable; 
vSwitch.OnClick := DoOnClickSwitch;