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

Lazarus Pascal Discussion :

Questions sur débogueur + messages Windows [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut Questions sur débogueur + messages Windows
    Bonjour à tous,

    Après de longues années de programmation en Delphi, je pense me décider à passer sous Lazarus (version 1.0.14). Mais ce n'est pas sans soucis...

    Concernant le débogueur :
    1) comment désactiver la suspension du programme (avec fenêtre "Pause", "continuer") lors d'une erreur dans un bloc try...except ? (sous Delphi, il suffit de décocher la case "Arrêt sur exceptions Delphi)
    exemple : try i:= StrToInt(Edit1.Text); except i:= 0; end;
    2) en assignant, p.ex, un événement OnMouseDown à un composant, comment ne pas voir dans les messages du débogueur : "Parameters X, Y, Shift not used" ? Ce message est utile lorsqu'une variable déclarée n'est pas utilisée, mais dans les paramètres d'une procedure, cela n'a aucun sens.

    Concernant les messages et constantes Windows :
    voici, p.ex, ce que j'utilise en Delphi pour déplacer et redimensionner un composant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure WMNCHitTest(var msg: TWMNCHitTest); message WM_NCHITTEST;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure MyCompo.WMNCHitTest(var msg: TWMNCHittest);
    var
      Pt: TPoint;
    begin
      inherited;
      Pt:= ScreenToClient(Point(msg.XPos, msg.YPos));
      {if PtInRect(Rect(0, 0, ClientWidth-4, 20), pt) then
        msg.Result:= HTCAPTION  // déplacement}
      if PtInRect(Rect(ClientWidth-4, 4, ClientWidth, ClientHeight-4), Pt) then
        msg.Result:= HTRIGHT    // redimensionnement droit
      else if PtInRect(Rect(ClientWidth-4, ClientHeight -4, ClientWidth, ClientHeight), Pt) then
        msg.Result:= HTBOTTOMRIGHT    // redimensionnement par droit-bas
      else if PtInRect(Rect(4, ClientHeight -4, ClientWidth - 4, ClientHeight), Pt) then
        msg.Result:= HTBOTTOM;    // redimensionnement par le bas
    end;
    J'ai modifié de la sorte :
    procedure WMNCHitTest(var msg: TLMNCHITTEST); message LM_NCHITTEST;

    Cela marche pour HTCAPTION, mais les 3 autres constantes ne sont pas reconnues par Lazarus !??? Oubli de déclaration ?

    J'ai remarqué également que la procedure ReleaseCapture n'est pas reconnue.

    Je vous remercie, par avance, pour vos réponses.

    Thierry

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 104
    Points
    15 104
    Par défaut
    Yep !
    Citation Envoyé par ThWilliam Voir le message
    Bonjour à tous,

    Après de longues années de programmation en Delphi, je pense me décider à passer sous Lazarus (version 1.0.14). Mais ce n'est pas sans soucis...
    Bienvenue au club !
    Tu vas voir (et souffrir), l'aide c'est une misère . J'espère que tu as une bonne connexion Internet, car t'as pas fini de googler
    Si tu demandes de l'aide sur une fonction inconnue de toi et dont la classe n'est pas dans les Uses, en Delphi l'aide t'indique le Uses à utiliser.
    Sous Lazarus c'est mort tant que tu n'as pas rajouté la classe qui va bien... Le serpent qui se mord la queue...

    Citation Envoyé par ThWilliam Voir le message
    Concernant le débogueur :
    1) comment désactiver la suspension du programme (avec fenêtre "Pause", "continuer") lors d'une erreur dans un bloc try...except ? (sous Delphi, il suffit de décocher la case "Arrêt sur exceptions Delphi)
    exemple : try i:= StrToInt(Edit1.Text); except i:= 0; end;
    Je ne sais pas, je n'ai pas encore trouvé. Cependant, comme sous Delphi (j'ai bien connu D7 perso), ce genre d'erreur n'apparaît que lorsque tu exécutes ton prog dans l'IDE.
    Essaye de lancer le binaire, ça devrait aller.
    Et mieux encore, essaye de corriger en amont : je t'aurais bien suggéré TryStrToInt mais je viens d'essayer vite fait dans un projet ouvert, et l'aide m'envoie bouler... Voir point précédent.

    Citation Envoyé par ThWilliam Voir le message
    2) en assignant, p.ex, un événement OnMouseDown à un composant, comment ne pas voir dans les messages du débogueur : "Parameters X, Y, Shift not used" ? Ce message est utile lorsqu'une variable déclarée n'est pas utilisée, mais dans les paramètres d'une procedure, cela n'a aucun sens.
    Pas grave, c'est juste un warning.
    Il y a plein d'options dans Projet / Options du projet / Compilateur / Messages, mais je n'ai pas trouvé celui dont tu parles.

    Citation Envoyé par ThWilliam Voir le message
    Concernant les messages et constantes Windows :
    (...)
    Cela marche pour HTCAPTION, mais les 3 autres constantes ne sont pas reconnues par Lazarus !??? Oubli de déclaration ?

    J'ai remarqué également que la procedure ReleaseCapture n'est pas reconnue.
    Oubli de déclaration ? Sûrement, oui : il faut parfois plusieurs unités...
    Fais voir les Uses de ton code.

    Et bon courage
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Yep !

    Bienvenue au club !
    Tu vas voir (et souffrir), l'aide c'est une misère . J'espère que tu as une bonne connexion Internet, car t'as pas fini de googler
    Si tu demandes de l'aide sur une fonction inconnue de toi et dont la classe n'est pas dans les Uses, en Delphi l'aide t'indique le Uses à utiliser.
    Sous Lazarus c'est mort tant que tu n'as pas rajouté la classe qui va bien... Le serpent qui se mord la queue...


    Je ne sais pas, je n'ai pas encore trouvé. Cependant, comme sous Delphi (j'ai bien connu D7 perso), ce genre d'erreur n'apparaît que lorsque tu exécutes ton prog dans l'IDE.
    Essaye de lancer le binaire, ça devrait aller.
    Et mieux encore, essaye de corriger en amont : je t'aurais bien suggéré TryStrToInt mais je viens d'essayer vite fait dans un projet ouvert, et l'aide m'envoie bouler... Voir point précédent.


    Pas grave, c'est juste un warning.
    Il y a plein d'options dans Projet / Options du projet / Compilateur / Messages, mais je n'ai pas trouvé celui dont tu parles.


    Oubli de déclaration ? Sûrement, oui : il faut parfois plusieurs unités...
    Fais voir les Uses de ton code.

    Et bon courage
    -------------------
    Bonsoir Jipété et merci pour tes réponses.

    Tu as raison, je n'arrête pas de chercher sur Google, ou alors je fais une recherche de mots dans tous les fichiers sources de lazarus ! Pour le moment, je rapatrie mes composants écrits en Delphi, et malgré la conversion des unités, j'ai des tonnes de messages d'erreurs, la plupart à cause des Uses.
    Pour le try...except : en exécution hors IDE, ça marche (Heureusement !).
    J'aimerais vraiment réussir à supprimer les warning pour les paramètres non utilisés, pcq, imagine un gros programme...
    Pour les constantes Windows non déclarées, pas bien grave, j'utiliserai leur valeur. Mais j'espère qu'il n'y a pas d'oublis plus importants, notamment les déclarations de messages et les types de messages.

    Cordialement
    Thierry

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 854
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 854
    Points : 11 287
    Points
    11 287
    Billets dans le blog
    6
    Par défaut
    StrToIntDef ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 372
    Points : 9 706
    Points
    9 706
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    ou alors je fais une recherche de mots dans tous les fichiers sources de lazarus !
    D'abord, bienvenue dans Lazarus, et, comme l'a dit Jipété, bon courage.

    Je fais très souvent comme toi, des recherches de mots dans les unités Lazarus.
    Je ne sais pas comment tu fais, pour ma part j'utilise "Agent Ransack", c'est MON OUTILS de base

    A+
    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  6. #6
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour,

    Mais ça fonctionne très bien, et exactement comme Delphi !

    A l'affichage de la première exception, il y a une case qu'il suffit de cocher pour ne plus avoir le message.
    On peut ensuite aller dans Options, Débogueur, Exceptions du langage et décocher l'exception si on veut qu'elle soit signalée à nouveau (et aussi la cocher ou l'ajouter si besoin).

    Il faut quand même mieux, si c'est possible, éviter d'ignorer des exceptions, cela évite des méchantes surprises par la suite.
    Dans l'exemple, il faut écrire, toujours à l'identique de Delphi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if not TryStrToInt ( Edit1.Text, I ) then
         i := 0 ;
    Ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    I := StrToIntDef ( Edit1.Text, 0 );
    Pour les warnings, il faut aller dans les options du projet, messages et décocher la 14 ème coche qui doit être "Paramètres non utilisés" (je l'ai en anglais).
    C'est vrai, que cela devrait être inactif par défaut.
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  7. #7
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour et merci à vous pour votre intervention.

    Concernant le try...except : Lazarus m'a effectivement ajouté "EConvertError" dans les exceptions de langue.
    Dans l'exemple que j'ai donné, je vais dorénavant utiliser la fonction TryStrToInt. Elle fait appel au bon vieux "VAL" que j'utilisais dans mes débuts en Pascal. Cela date !!!
    Implémentation dans le fichier sysstr.inc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function TryStrToInt(const s: string; out i : integer) : boolean;
    var Error : word;
    begin
      Val(s, i, Error);
      TryStrToInt:=Error=0
    end;
    Pour les warning concernant les paramètres de procédures non utilisés, dans ma version française, j'ai décoché "Afficher les conseils". C'est parfait, je retrouve les mêmes messages que dans Delphi. (Autre solution trouvée: compiler avec directive {$HINTS OFF}. Mais la première solution est beaucoup plus simple.

    Bonne journée et A+
    Cordialement.

    Thierry

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

Discussions similaires

  1. [Windows Live Messenger]question sur les messages hors connexion
    Par jmclej dans le forum Messagerie instantanée
    Réponses: 9
    Dernier message: 21/06/2006, 13h34
  2. question sur les messages
    Par ienien dans le forum MFC
    Réponses: 2
    Dernier message: 03/03/2006, 16h47
  3. Question sur les services windows
    Par bilb0t dans le forum Windows
    Réponses: 8
    Dernier message: 09/11/2005, 15h31
  4. Réponses: 15
    Dernier message: 18/01/2005, 23h18
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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