FAQ DelphiConsultez toutes les FAQ

Nombre d'auteurs : 123, nombre de questions : 920, dernière mise à jour : 8 novembre 2019  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).

Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.

L'équipe Delphi de Developpez.com.

Commentez


SommaireFiremonkey - FMX (6)
précédent sommaire suivant
 

Sous FMX un menu popup prend la main comme une fenêtre modale.
La forme appelante n'a donc pas d'accès direct pour fermer ce menu (en VCL on utilisait ClosePopup).

Pour fermer les popups d'une forme FMXForm1, on utilisera l'objet Screen (variable globale) et les instructions suivantes :

Code : Sélectionner tout
1
2
Screen.PrepareClosePopups(FMXForm1); 
Screen.ClosePopupForms;
L'objet Screen nous permet d'obtenir :
  • Les formes et modules de données créés par l'application.
  • La forme active et le contrôle actif au sein de cette dernière.
  • Le nombre de formes de cette application.
  • Une liste des écrans sur lesquels les formes de l'application peuvent apparaitre ainsi que leurs coordonnées et dimensions.

Mis à jour le 29 juin 2015 SergioMaster

Le style clearingeditstyle d'un TEdit permet d'ajouter un bouton contenant une croix dans la zone de saisie ; ce bouton permet à l'utilisateur d'effacer le texte en cliquant dessus.

Mais jusqu'à la version XE8, si l'on établit la propriété style d'un TEdit à clearingeditstyle (par l'inspecteur d'objets), le bouton apparaît bien dans la zone de saisie mais rien ne se passe lorsque l'utilisateur clique sur ce bouton (le texte n'est pas effacé).

Il y a quand même un moyen pour que cela fonctionne : (sur la fiche en conception) il faut pour cela faire bouton droit sur le TEdit et choisir 'Ajouter un élément' -> TClearEditButton. Cela rajoute le bouton dans la zone de saisie mais cette fois-ci, le clic sur ce bouton fonctionne, le texte est bien effacé.

Mis à jour le 2 juillet 2015 free07

Pour obtenir le nombre de pixels par pouce de l'écran en VCL, nous pouvons utiliser Screen.PixelsPerInch.
Avec FMX, c'est un peu plus complexe, car il faudra utiliser une interface particulière : IFMXDeviceMetricsService.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
function Pixels : integer; 
var D : IFMXDeviceMetricsService; 
    Q : TDeviceDisplayMetrics; 
begin 
result:=96; // valeur par défaut windows 
if TPlatformServices.Current.SupportsPlatformService(IFMXDeviceMetricsService,D) then 
begin 
 Q:=D.GetDisplayMetrics; 
 result:=Q.PixelsPerInch; 
end; 
end;
Il faudra aussi au préalable avoir déclaré dans la liste des uses l'utilisation de l'unité FMX.Platform.

Mis à jour le 18 janvier 2019 SergioMaster

Aller dans l'Inspecteur d'objets, sélectionner la forme principale, puis Propriétés, Position et, dans la liste, choisir OwnerFormCenter. Faire de même pour la forme enfant.

Mis à jour le 22 octobre 2015 Martin Lestas

La version TreeView du framework FMX ne propose pas les mêmes méthodes et propriétés que celui de la VCL.
Il y a trois possibilités pour parcourir l'arbre dépendant de l'objectif souhaité.

Parcourir les éléments de la racine
Pour cela il faut utiliser la propriété Count et la méthode IndexByIndex() du composant
* même les éléments cachés (propriétés visible:=false)
exemple :

Code Delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
  
procedure TForm1.RacinesVisibles; 
var 
  I: Integer; 
begin 
  Memo1.lines.clear; 
  for I := 0 to Arbre.count - 1 do 
  begin 
    // exemple de traitement 
	// if arbre.ItemByIndex(i).Isselected then 
    Memo1.lines.Add(Arbre.ItemByIndex(I).Text); 
  end; 
end;

Parcourir tous les éléments visibles* de l'arbre
Il faudra utiliser la propriété GlobalCount et la méthode ItemByGlobalIndex() du composant.
* Ici visible indique les éléments qui seront en vue (même ceux avec la propriété visible à false)
exemple :
Code Delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
  
procedure TForm1.ElementsVisibles; 
var 
  I: Integer; 
begin 
  Memo1.lines.clear; 
  for I := 0 to Arbre.GlobalCount - 1 do 
  begin 
    // exemple de traitement  
    // if arbre.ItemByGlobalIndex(i).Isselected then  
    Memo1.lines.Add(Arbre.ItemByGlobalIndex(I).Text); 
  end; 
end;

Parcourir tous les éléments de l'arbre
Pas de secret, il faudra passer par la récursivité et par la connaissance des propriétés des éléments d'un TreeView de type TTreeViewItem.

exemple :
Code Delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
  
procedure TForm1.ArbreEntier; 
var 
  I: Integer; 
//  tous, selections, vue, visibles : Integer; 
  
  procedure getChilds(AnItem: TTreeViewItem); 
  var 
    c: Integer; 
  begin 
//    if AnItem.isExpanded then inc(vus, AnItem.count); 
  
    for c := 0 to AnItem.count - 1 do 
    begin 
//    inc(tous); 
//    if AnItem.ItemByIndex(c).Isselected then inc(selections); 
//    if AnItem.ItemByIndex(c).IsVisible then inc(visibles); 
      Memo1.lines.Add(StringOfChar('-', Pred(AnItem.ItemByIndex(c).Level) * 2) +  // ajoute '--' pour chaque niveau  
        ' ' + AnItem.ItemByIndex(c).Text); 
      if AnItem.ItemByIndex(c).count > 0 then // l'élément a des enfants appel à la procedure récursive 
        getChilds(AnItem.ItemByIndex(c)); 
    end; 
  end; 
  
begin 
  Memo1.lines.clear; 
//  tous := 0; 
//  selections := 0; 
//  vue := 0; 
//  visibles :=0; 
  for I := 0 to Arbre.count - 1 do 
  begin 
//    inc(tous); 
//    inc(vue); // racine toujours visible 
//    if Arbre.ItemByIndex(I).IsSelected then inc(selections); 
//    if Arbre.ItemByIndex(I).IsVisible then inc(visibles); 
    Memo1.lines.Add(Arbre.ItemByIndex(I).Text); 
    if Arbre.ItemByIndex(I).count > 0 then // appel procedure récursive 
      getChilds(Arbre.ItemByIndex(I)) 
  end; 
//  Memo1.lines.Add(Format('Total : %d, en vue : %d, sélectionnés : %d, visibles : %d', 
//    [tous, vue, selections, visibles])); 
end;

*Visibles : Attention il faut distinguer deux visibilités
  • le fait que l'élément ne soit pas visible dans l'arbre parce que son parent n'est pas élargi (IsExpanded=false);
    la propriété de l'élément testée par IsVisible (valeur de la propriété visible de l'élément).

Mis à jour le 1er mars 2019 SergioMaster

Le composant TListView n'a pas de propriété MultiSelect qui, désactivée, permettrait de n'avoir qu'un seul élément sélectionné.
Voici une solution pour un TListView* en mode Édition.

* un TListView dont l'ItemEditAppearance se termine par ShowCheck

Utilisez l'événement OnItemClick du composant.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
  
procedure TForm1.ListView1ItemClick(const Sender: TObject; 
  const AItem: TListViewItem); 
var anItem : TListViewItem; 
begin 
ListView1.BeginUpdate; 
for anItem in ListView1.Items do 
   anItem.Checked:=(AnItem=AItem) AND AItem.Checked; 
ListView1.EndUpdate; 
end;

Mis à jour le 14 juin 2019 SergioMaster

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.