XE2 - Application.Title [Résolu]

Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- - Dernière réponse : sp40
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- 23 avril 2012 à 11:32
Bonjour,

pour info :
J'ai un petit code récupéré sur le net et permettant de contrôler qu'une appli ne sera lancée qu'une seule fois

  Application.Title := 'Start MonApp';
  GetClassName(Application.handle, ClassName, 254); {met dans ClassName le nom de la class de l'application}
  result := FindWindow(ClassName, 'MonApp'); {renvoie le Handle de la première fenêtre de class (type) ClassName
      et de titre TitreApplication (0 s'il n'y en a pas)}
  // Une instance existante trouvée
  if result <> 0 then begin
     ShowWindow(result, SW_RESTORE);
     SetForegroundWindow(result);
     Application.Terminate;
  end
  else begin
       Application.Title := 'MonApp';
       //Application.MainFormOnTaskbar := True;
       Application.CreateForm(TFMain, FMain);
       Application.Run;
  end;


ça évite qu'un utilisateur cliquant impatiemment 25 fois sur l’icône de démarrage lance 25 fois l'application...
Ce code est basé sur le titre de l'application. Or sous XE2, dans le fichier du projet (dpr), delphi nous rajoute un "Application.MainFormOnTaskbar := True" qui a pour effet (indésirable ?) de mettre le Application.Title à ''
Dommage...

Simon
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
42
3
Merci
Salut,

il n'y a pas d'erreurs ... c'est un comportement tout à fait normal.

"MainFormOnTaskbar" signifie que c'est le titre(caption) de la fiche principale qui est utilisé pour l'afficher dans la barre des taches.

MainFormOnTaskbar := True; // affiche le titre de MainForm
MainFormOnTaskbar := False; // affiche Application.Title 

plus d'information sur cette page
[hr]@+Cirec
[hr]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
42
3
Merci
re,

  aHandle := FindWindowEx(GetDeskTopWindow,0,nil,'MonApp');

ce code fonctionne dans tous les cas si Application.Tilte & MainForm.Caption sont identiques peut importe si Application.MainFormOnTaskbar = True ou False.

[list]Si Application.Tilte <> MainForm.Caption
et si Application.MainFormOnTaskbar = True
  aHandle := FindWindowEx(GetDeskTopWindow,0,nil,MainForm.Caption);

si Application.MainFormOnTaskbar = False
  aHandle := FindWindowEx(GetDeskTopWindow,0,nil,Application.Tilte);


/list


[hr]@+Cirec
[hr]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Cirec
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Dernière intervention
15 décembre 2014
5
3
Merci
Salut,

pour limiter à un certains nombre d' instance, tu peux utiliser tcyAppInstances ici:

Composants Cindy pour Delphi
Faites une donation.

A+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_MAURICIO
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
42
3
Merci
[quote=simonpelloquin]mais quand même, c'est contrariant. Je trouve juste dommage que l'application.title ne soit pas conservée. Et je ne comprends pas bien en quoi ça dérange l'affichage de la barre des tâches. Je subodore une fainéantise de développeur... (si application.title = '' alors affiche mainform.caption) /quote
non non non
ce n'est ni un oubli ni une erreur ni même de la fainéantise ...

si je raconte pas de conneries(si j'en dis ... on me corrigera ), c'est une pratique propre à Delphi ... ils ont choisi de créer un objet TApplication qui contient une fiche invisible elle même créée avec le style WS_EX_APPWINDOW, ce qui lui permet d'être affichée dans la barre des tâches et de recevoir et traiter les messages windows ...

et quand on a : Application.MainFormOnTaskbar := True;
cette fiche n'est plus utilisée c'est la fiche principale qui reçoit le style WS_EX_APPWINDOW et de ce fait il n'est plus utile d'affecter le titre(caption) de cette fiche(invisible) comme elle n'est plus utilisée.

voilà, en gros, l'explication de ce comportement.


[hr]@+Cirec
[hr]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Cirec
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
17
0
Merci
Salut Cirec,

Effectivement, j'avais cru comprendre ça. Là où ça me dérange, c'est que le application.title est vide, et que FindWindow ne fonctionne pas. Je veux bien qu'il affiche la caption ou le titre dans la barre des tâches, mais pourquoi il efface le titre ???


Simon
Commenter la réponse de sp40
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
17
0
Merci
D'accord, d'accord. Je vais adapter mon code... mais quand même, c'est contrariant. Je trouve juste dommage que l'application.title ne soit pas conservée. Et je ne comprends pas bien en quoi ça dérange l'affichage de la barre des tâches. Je subodore une fainéantise de développeur... (si application.title = '' alors affiche mainform.caption)

En tous cas, merci pour ton aide et à bientôt.

Simon
Commenter la réponse de sp40
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
17
0
Merci
Merci Mauricio, je vais jeter un oeil à tes composants. Je viens de voir qu'il y a un paquet d'installation pour XE2. Est-ce qu'on peut quand même les installer aussi sur D5 et D7 ?

Et merci Cirec pour ces explications. C'est quand même dommage... Enfin, le tout c'est de le savoir.

Simon
Commenter la réponse de sp40
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Dernière intervention
15 décembre 2014
5
0
Merci
Oui,

regarde le fichier install instructions.rtf

A+


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
17
0
Merci
ok,
Tu n'aurais pas un fichier d'aide ou une documentation (.hlp ou autre) sur les composants en question ?


Simon
Commenter la réponse de sp40

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.