IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Violation d'accès à l'adresse 00A58C2B dans le module.


Sujet :

Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Technicien, secteur de l'énergie.
    Inscrit en
    Novembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien, secteur de l'énergie.
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 13
    Par défaut Violation d'accès à l'adresse 00A58C2B dans le module.
    Bonjour,

    Avec l'aide et les conseils de quelques uns d'entre vous qui se reconnaitront, j'ai enfin finalisé la réécriture d'un programme avec FMX.
    Tout est opérationnel et j'ai appris plein de choses.. > mission accomplie .

    Sauf que ... C'est la tuile ! Je viens découvrir que mon programme ne se lance QUE sur ma machine. (Win 10 en machine virtuelle).
    Mon windows est une version Windows PRO 10 et je n'ai rien installé d'autre que Delphi. ( pas de DLL rajoutée ou autre extension quelconque )
    Sur les 5 PC ou j'ai pu tenter le lancement j'ai le même message d'erreur :



    Après quelques recherches, dont certaines me mènent sur ce cher forum, je décide d'installer MADEXCEPT pour en savoir un peu plus.
    Je recompile donc le projet et je vire mon fils de sa partie de Fortnite ( çà ne lui fera pas de mal ) puisque c'est le seul PC Windows de la maison.

    Voici un extrait du rapport d'erreur :

    exception number : 1
    exception class : EAccessViolation
    exception message : Violation d'accès à l'adresse 00A58C2B dans le module 'SMTS_FMX.exe'. Lecture de
    l'adresse 0000000C.

    main thread ($1ddc):
    00a58c2b +003 SMTS_FMX.exe FMX.Forms 2414 +1 TFormBorder.GetSupported


    et enfin :

    disassembling:
    00a58c28 public FMX.Forms.TFormBorder.GetSupported: ; function entry point
    00a58c28 2413 push ebx
    00a58c29 mov ebx, eax
    00a58c2b 2414 > cmp byte ptr [ebx+$c], 0
    00a58c2f jz loc_a58c5e
    00a58c31 mov eax, [ebx+8]
    00a58c34 cmp dword ptr [eax+$c8], 0
    00a58c3b jz loc_a58c5e
    00a58c3d mov eax, [ebx+8]
    [...]


    Il semble donc, à moins que je n'ai rien compris ce qui est probable, que le problème se produise lors de la création de la form principale.

    Malheureusement je ne sais pas quoi faire de cette information et encore moins comment la résoudre.
    Je ne comprend pas la différence entre mon OS qui lance sans problème le programme ( que çà soit depuis l'EDI ou depuis le .EXE compilé ) et les autres OS qui n'en veulent pas.

    Pouvez vous me guider dans la recherche du problème ?

    Merci encore.

  2. #2
    Membre averti
    Homme Profil pro
    Technicien, secteur de l'énergie.
    Inscrit en
    Novembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien, secteur de l'énergie.
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 13
    Par défaut
    En fouillant un peu plus loin dans la pile d'erreurs, je suis orienté vers un potentiel problème de STYLE.

    je décide donc de faire plusieurs tests dont le suivant (assez brut) : une fois le programme compilé, je change le nom du dossier qui contient mes sources, et donc mon fichier STYLE.
    Bingo ! j'ai la même erreur sur MA machine.

    Je prend mon fichier STYLE et le copie dans le dossiers de sortie du programme compilé, l'erreur est identique.

    Donc mon problème est que le programme compilé cherche le fichier STYLE.
    C'est donc un problème de configuration.

    Le fichier STYLE est bien associé au STYLEBOOK. Le fichier STYLE est bien présent dans la liste des composants du projet ( explorateur à droite de l'EDI ).
    Pourquoi le style n'est donc pas "embarqué" lors de la compilation ?
    Il doit me manquer des notions élémentaires dans l'utilisation d'un style ...

    david.

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 023
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 023
    Par défaut
    Faut que le Style soit en ressource Etape 3 - Ajouter des ressources de styles en tant que RCDATA sauf si tu fais un TStyleBook.LoadFromFile explicite ou un TStyleManager.SetStyleFromFile...

    Est-ce un projet FMX multiplateforme à terme ?
    C'est à dire Windows, Android voire iOS, les styles sont différents pour les mobiles, c'est même à penser comme un tout autre projet IHM partageant la même couche Business / DataModel, seul la vue change.

    Je ne connais que le style VCL qui sont assez simple, je l'ai ai toujours mis en ressource (en fait dès que l'on les ajoute dans le dossier style, Delphi les détecte on peut le gérer via le Projet)
    SergioMaster doit être celui qui s'y connait le mieux en style FMX pour te répondre.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 575
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Hier soir il était trop tard pour moi de répondre.

    Il m'a d'abord fallu comprendre que c'était un programme FMX et a priori il ne s'agit que de cible Windows (à confirmer) ce qui m'a mis sur la piste
    FMX.Forms 2414 +1 TFormBorder.GetSupported
    En fouillant un peu plus loin dans la pile d'erreurs, je suis orienté vers un potentiel problème de STYLE.
    je décide donc de faire plusieurs tests dont le suivant (assez brut) : une fois le programme compilé, je change le nom du dossier qui contient mes sources, et donc mon fichier STYLE.
    Bingo ! j'ai la même erreur sur MA machine.
    C'est loin d'être clair tout d'abord un style FMX est "chargé" dans le DFM donc, s'il n'y en a qu'un le problème ne se pose pas de cette façon.
    S'il y a plusieurs styles, plusieurs options sont possibles pour changer de style avec des fonctions telles que TrySetStyle, loadfromstyle, loadfromresource , etc... Effectivement dans ce cas, les fichiers styles (attention aux licences) doivent être distribuées. Pour windows (et uniquement pour windows) elles seront en ressources, pour les autres OS, j'ai eu dernièrement une malencontreuse expérience avec Android loadfromresource ne fonctionne pas

    Citation Envoyé par Shailetroll
    Android voire iOS, les styles sont différents pour les mobiles,
    Plus ou moins exact tout dépendant de la version de Delphi utilisée (dans les anciennes versions, ante D10 ou plutôt ante SVG, un style pouvait contenir les divers OS contenu chacun dans la collection).
    Pour moi, désormais, la technique que j'utilise est de créer un datamodule "IHM" (contenant a minima un TStyleBook) par par OS et utiliser des $IFDEF pour le chargement du bon datamodule.

    En conclusion :
    - indiquer la version de Delphi est importante.
    - indiquer comment est chargé le style. (chargement+sauvegarde à la conception ou un load quelconque tels que ceux évoqués par Shailletroll
    - indiquer les propriétés du TSyleBook (usestylemanager = true ou false, filename indiqué ou non etc...)
    - indiquer le style fmx utilisé ne fera pas de mal car tous ne sont pas identiques en fonctionnement (ceux de D10.x s'appuie désormais beaucoup sur le SVG et moins sur les png, en parlant de SVG la distribution de Skia.dll dans le répertoire de l'application est peut-être nécessaire, à vérifier)

    Bref, répondre à ces questions, faire une appli minimum (forme principale avec un StyleBook et au besoin un bouton de chargement de style) et envoyer le .pas et le .dfm pour donner a minima la problématique.

  5. #5
    Membre averti
    Homme Profil pro
    Technicien, secteur de l'énergie.
    Inscrit en
    Novembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien, secteur de l'énergie.
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 13
    Par défaut
    Bonjour et merci

    Sur les bases des informations données par @ShaiLeTroll je me suis tout d'abord orienté vers la mise en ressource de mon style qui n'était pas réalisée correctement.
    Mais le problème persistait.. Je suis passé provisoirement par le chargement direct "TStyleBook.LoadFromFile" mais l'erreur était encore présente !
    Après recherche j'ai compris que je n'utilisais pas non plus correctement les "TstyleBook", puisque j'en avais placé un identique par form pointant sur le fichier style..
    Je reportais donc mon problème autant de fois qu'il y a de Form dans le projet.

    Une fois tout remis en ordre j'ai pu faire fonctionner le programme sans erreur en chargeant mon style comme une ressource.

    Par contre le rendu n'est pas celui attendu sur les machines sous windows11. Les boutons et la "ProgressBar" n'apparaissent pas correctement, bien que ces deux plateformes soient définies dans l'éditeur de style.
    Je suis donc revenu provisoirement au style par défaut sur mes boutons et la progressbar et j'ai conservé mon fichier style pour d'autres éléments qui eux apparaissent correctement indépendamment de la version windows.

    J'ai clairement de grosse lacunes sur l'utilisation des styles. Je vais donc me mettre à bosser ce sujet.

    @SergioMaster
    Merci également pour la réponse qui m'apporte des éléments pour la suite.

    Je suis désolé si mon explication n'était pas assez claire. En effet bien que je me sois lancé dans la réécriture de mon programme avec FMX, il est toujours destiné à être utilisé sous windows.
    Le passage à FMX n'était donc pas un impératif, mais répondait à une envie de découvrir FMX.

    Je suis sous Embarcadero Delphi 12.1 Athens. Je vais le préciser dans ma signature cela sera plus clair la prochaine fois que je viendrai solliciter vos aides

    Pour répondre à tes questions, je pense ( espère ) que mon explication aura été assez claire cette fois et que tu as compris quelles étaient mes erreurs :
    - Style mal défini dans les ressources
    - Multiples Tstylebook sur chaque forms
    - Filename défini dans chaque Tstylebook

    - Le style FMX est juste un style personnel : J'ai rajouté des rectangles aux bords arrondis autour de mes boutons et de la progress bar, et j'ai créé un type de bouton pour lui donner le visuel du schéma électrique d'un redresseur



    - Je vais en effet faire une appli minimum dédiée à bosser l'utilisation des styles.


    Bon dimanche.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 575
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par David_57 Voir le message
    J'ai clairement de grosse lacunes sur l'utilisation des styles.
    Beaucoup sont dans le même cas, car ce n'est pas aussi évident que ça. Je sais que, pour avoir fait des relectures techniques Rémi Gouyon va bientôt publier un tutoriel qui correspondrait peut-être à ce que tu veux faire. Mon projet de livre sur le sujet n'en est toujours qu'au stade d'ébauche , on va dire que c'est une de mes résolutions de début d'année

    Citation Envoyé par David_57 Voir le message
    Le style FMX est juste un style personnel
    Voilà peut-être bien où ça blesse car un style FMX demande un certains nombres de définitions/composants. Pour se faire une idée il faut ouvrir le Concepteur de styles de bitmaps (dans les outils).

    De plus, il peut y avoir de nombreux chemins pour arriver a un résultat.

    Perso, j'aurais certainement mis un style (j'en mets généralement un dans une application finie) mais, sur la base de ton image je serais parti sur un SVG (bon ce lien ne correspond pas à ta demande mais c'est l'idée, un autre lien), un simple TSKSVG sur la forme et c'est tout. Cela étant, il faudra concevoir ton/tes SVG.

    P.S. au cas d'utilisation de SVG, nombreux, l'ensemble de composants EtheaSVG (qui propose la création de collection de SVG) sera plus intéressant.

    Sinon, en jouant sur un style, voici rapidement une première méthode :
    1- poser un tsylebook (dans un tdatamodule si pour plusieurs formes), charger un syle (fichier .style dans C:\Users\Public\Documents\Embarcadero\Studio\xx.0\Styles où xx est la version de Delphi)
    ne pas oublier d'appliquer (bouton éclair) et fermer l'éditeur de style (en répondant oui, ce qui va sauvegarder le style choisi dans le DFM)
    2- (pour l'ide) indiquer que la forme va utiliser
    3- poser un composant, vu ta demande je pars sur un TCornerButton pour l'arrondi des coins.
    4- modifier le style (clic droit sur le cornerbutton posé), cette opération réouvrira l'édieur de style, le choix : modifier un style personnalisé ou modifier un style par défaut est un choix important, selon les versions de Delphi cela ne fera pas tout à fait la même chose) pour D11, en palliant sur un seul style utilisé, "modifier un style personnalisé" devrait être le bon (je n'expliquerai pas ici pourquoi modifier un style personnalisé n'est pas toujours un choix judicieux)
    5-modifier le style cornerbuttonstyle1 qui a été créé par l'option de menu (à l'occasion renommer non pas le layout mais le nom du style)
    Nom : Capture.png
Affichages : 221
Taille : 54,4 Ko
    6- Appliquer + Fermer le concepteur de style (étapes à bien garder en tête)
    et voilà
    Nom : Capture d’écran 2025-01-13 085231.png
Affichages : 216
Taille : 41,4 Ko

    Il faut m'excuser d'un résultat plutôt approximatif, mais c'est fait à l'arrache.

    En théorie, je n'ai jamais vraiment pris le temps de tester, on pourrait, sur la forme :
    - Dessiner un rectangle (TRoundRect)
    - Ajouter un TLauyout contenant un TLabel et les autres dessins (comme avec le concepteur de style)
    - donner un nom (propiété StyleName) au TLayout.
    Mais je ne suis jamais allé plus loin que ça n'ayant jamais compris quelle étape suivante il fallait appliquer
    çi dessous mon ébauche
    Nom : Capture d’écran 2025-01-13 094137.png
Affichages : 216
Taille : 54,6 Ko

  7. #7
    Membre averti
    Homme Profil pro
    Technicien, secteur de l'énergie.
    Inscrit en
    Novembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien, secteur de l'énergie.
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 13
    Par défaut
    Merci beaucoup @SergioMaster,

    Je partirai de ton tutoriel pour construire mon projet de test.

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 575
    Billets dans le blog
    65
    Par défaut
    Ce n'est pas mon tutoriel mais celui de Rémi.

    Pour en revenir au SVG, je me suis piqué au jeu d'en faire un (pas top mais je ne suis pas graphiste) avec InkScape
    Nom : Capture.png
Affichages : 180
Taille : 66,5 Ko
    j'avoue m'être un peu planté dans l'export mais cela correspond à peu près ( sachant que l'on peut ajouter les Tlabels) ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/06/2015, 12h06
  2. Réponses: 2
    Dernier message: 26/09/2010, 19h02
  3. Réponses: 1
    Dernier message: 14/05/2010, 08h00
  4. Réponses: 0
    Dernier message: 16/06/2009, 23h09
  5. Réponses: 2
    Dernier message: 08/01/2009, 11h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo