|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre expérimenté
![]() Inscription : janvier 2007 Messages : 997 ![]() |
Bonjour,
après recherche infructueuse, je voudrais savoir s'il est possible de récupérer de façon dynamique (à l'exécution) le nom du fichier source dans lequel "se trouve" le programme ? Par exemple dans un écran codé dans le source toto.pas, dans le formshow, est il possible de faire afficher, à l'exécution "je suis dans toto.pas" ? Mais sans avoir à écrire en dur dans le source le fameux toto.pas ? Le but de ceci serait de pouvoir faire afficher dans tous les écran d'une appli existante qui en compte un paquet, à un endroit ou à un autre, le nom du programme source de l'écran en cours d'affichage. Ceci afin de permettre la maintenance de cette appli, car actuellement aucun moyen d'avoir cette info, il faut aller dans le projet, puis remonter via le code (le menu, puis tel ou tel ou bouton, appellant telle ou telle fonction, etc... pour avoir enfin le nom de l'écran sur lequel on a une modif à apporter ou un bug à corriger...). Je crains que cela soit impossible, car je suppose que dans le ".exe" final (avec dll ou pas, ici il n'y en a pas, juste un gros exe), on ait plus ce genre d'info, l'exe étant du code compilé... à part les notions d'objet courant et de classe parente, on doit plus avoir trace du nom du ".pas" duquel ce bout de code provient à l'origine... J'ai pour le moment comme seule possibilité l'info issue de la commande : TForm(Sender).className, ce qui me donne le nom de la classe parente de la fenêtre, mais pas du fichier source ".pas" (mais bon, c'est déjà pas mal, car cela donne le nom du ".pas" à quelques lettres près, dans la grande majorité des cas, dans cette appli). Ou alors, solution brutallement manuelle et fastidieuse, inscrire en dur dans chaque formshow (par exemple) de chaque écran le nom du fichier source dans le titre, ou dans le "hint", ou autre... y'a du choix quoi. Par ailleurs, chaque écran de l'appli héritant de TForm, savez vous s'il est possible de modifier le source Delphi de la classe TForm, afin de lui créer une nouvelle fonction, qui affecterait par exemple le "hint" avec une valeur (le className par exemple) ? Cela résoudrait d'un coup d'un seul le pb de la modification un à un des nombreux écrans. Merci de m'avoir lu jusqu'au bout. EDIT1 : je viens de tester cette possibilité avec les hotkeys : http://www.developpez.net/forums/d71...trl-p-alt-p-v/ Et c'est plutôt un bon début, il me suffit de placer ce code dans la fenêtre principale, et ça répond depuis n'importe quelle autre sous fenêtre... ![]() EDIT 2 : en fait je bloque... après maintes recherches, je ne trouve pas la solution : j'ai codé ceci dans le main de l'appli, mais arrivé au casting de h, ça plante : Code :
Quand je déclenche le hotkey, j'arrive bien dans cette procédure, et au moment du casting du handle de fenêtre en Tcontrol ou en TObject, ça plante (acces violation...). Quelque soit le casting de h, ça plante... je ne comprends pas pourquoi. Je n'ai pas trouvé de réponse en consultant les sujets du forum relatifs à la fonction GetForegroundWindow, ou alors j'ai mal cherché. Si vous pouvez m'aider, merci. EDIT 3 : PB résolu, mais je suis passé par l'exploitation de la variable Application.Components[]... |
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : septembre 2009 Messages : 980 ![]() |
Tu ne peux pas.
Une application est diffusée sans .PAS ni .DCU ni .DPR etc. donc à moins de coder en dur et de logger ce qui ne vas pas, tu ne peux pas le savoir. exemple idiot : Code :
__________________
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ] Ma messagerie n'est pas la succursale du forum... merci! |
||
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Thierry ZIG Inscription : octobre 2010 Messages : 32 ![]() |
Effectivement, on ne peut pas de base...
Sauf qu'on peut rajouter une constante dans le code source de chaque fichier qui a comme valeur le nom du fichier (en .Pas donc). Par la suite, on peut développer un script ou un programme qui parcourt l'intégralité du projet (donc tous les .Pas) pour y mettre dynamiquement la déclaration de la constante avec la valeur correspondant au nom du fichier... Un dev en plus donc, mais si le nombre de fichiers est si important, ça peut valoir le coup. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Analyste-programmeur Inscription : mai 2002 Messages : 2 140 ![]() |
Question bête : MadExcept sait pas le faire ?
__________________
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ______________________________________________________________________________________________ Delphi 6#2 Entreprise - Delphi 2010 Architecte - Delphi XE2 Entreprise Win XP Pro - OpenGL 2.1 - Oracle 11g - Firebird 2.5.0.2 Écrivez dans un français correct !!
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com