XE2 - Application.Title [Résolu]

sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 18 avril 2012 à 11:09 - Dernière réponse : sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention
- 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
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 18 avril 2012 à 12:26
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]

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 76 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 18 avril 2012 à 22:28
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]

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 76 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 20 avril 2012 à 16:57
3
Merci
Salut,

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

Composants Cindy pour Delphi
Faites une donation.

A+

Merci cs_MAURICIO 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 76 internautes ce mois-ci

Commenter la réponse de cs_MAURICIO
Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 22 avril 2012 à 00:16
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]

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 76 internautes ce mois-ci

Commenter la réponse de Cirec
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 18 avril 2012 à 14:16
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
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 19 avril 2012 à 09:15
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
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 23 avril 2012 à 09:53
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
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 23 avril 2012 à 10:06
0
Merci
Oui,

regarde le fichier install instructions.rtf

A+


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 23 avril 2012 à 11:32
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.