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 :

[Linux] Deux boutons avec le même code ne fonctionnent pas de la même manière [Lazarus]


Sujet :

Lazarus Pascal

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut [Linux] Deux boutons avec le même code ne fonctionnent pas de la même manière
    Bonjour,

    c'est le cadeau du dimanche, et je sens que ça va vous plaire.

    J'essaye de faire très court et je vais à l'essentiel :

    un bouton se comporte comme attendu,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Button1Click(Sender: TObject);
    var  B1, B2: TBitmap;    P1, P2: PByte;    w1, h1: integer;
    begin
      B1 := Image1.Picture.Bitmap;  B2 := Image2.Picture.Bitmap;
      P2 := B2.ScanLine[0];
      for h1 := 0 to B1.Height -B2.Height -1 do begin
        P1 := B1.ScanLine[h1];
        for w1 := 0 to B1.Width -B2.Width -1 do begin
          if CompareMem(P1, P2, B2.Width *3) then // ok
    et l'autre prend des initiatives douteuses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button2Click(Sender: TObject);
    ... // tout pareil que l'autre
        for w1 := 0 to B1.Width -B2.Width -1 do begin
          if CompareMem(P1, P2, B2.Width *3) then // kc ! ! !
    // il faut impérativement faire 
          if CompareMem(@P1[w1], @P2[0], B2.Width *3) then // ok
    // pour avoir le résultat espéré
    Je précise que j'ai désactivé les optimisations du compilateur, et que les deux boutons sont dans le même programme, pas dans deux séparés.
    Je précise également qu'il s'agit des mêmes fichiers de travail, ceux-ci étant ouverts dans le FormCreate.

    Voilà, c'est à peu près tout, j'imagine que personne n'aura d'idée, c'est pas grave, ça m'aura fait du bien d'en parler ("allongez-vous et racontez-moi", on se croirait chez le psy, ), quand je dis à Gilles que ces machines ont une existence autonome il ne me croit pas, et pourtant…

    Bon dimanche,
    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

  2. #2
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut

    Petite question bête : quel est le déroulement de tes actions au début de ton application ?

    Par exemple :
    1) tu cliques sur button1
    2) tu cliques sur button2

    ou bien tu cliques sur
    1) le button2
    2) le button1

    Dans ce deuxième cas de figure button1 est OK ou KC ?

    À mon avis le problème est que tu assignes les bitmaps avec :=
    Si tu cliques sur button1, lorsque que tu fais P1 := B1.ScanLine[h1]; modifie "Image1.Picture.Bitmap", puis tu cliques sur Button2 le resultat renvoyé sera FAUX (normal vu que le bitmap source a été modifié).
    Et si tu cliques 2x sur Button1, la deuxième fois le résultat devrait aussi être erroné.

    Essaye plutôt de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    B1 := TBitmap.Create;
    B1.Assign(Image1.Picture.Bitmap);
    ...
    FreeAndNil(B1);
    Bon dimanche

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Yep !
    Citation Envoyé par BeanzMaster Voir le message
    Petit question bête quel le déroulement de tes actions au début de ton application ?

    Par exemple :
    1) tu cliques sur button1
    2) tu cliques sur button2

    ou bien tu cliques sur
    1) Le button2
    2) le button1

    Dans ce deuxième cas de figure button1 est OK ou KC ?
    C'est plus tordu que ça et je ne voulais pas en parler, mais puisque tu le mets sur le tapis,
    1) si j'utilise button1 d'abord, button2 ensuite me donnera toujours un résultat faux.
    2) si j'utilise button2 d'abord, button1 ensuite me donnera toujours un résultat faux.

    Et dans tous les cas de figure il faut impérativement que j'utilise ces CompareMem de deux manières différentes.

    Et enfin, oui, comme tu le dis par ailleurs,
    Citation Envoyé par BeanzMaster Voir le message
    Et si tu cliques 2x sur Button1, la deuxième fois le résultat devrait aussi être erroné.
    Exact ! Et ça, c'est valable quel que soit le bouton utilisé.

    Le plus dément c'est qu'au début je n'utilisais que button2 en mode normal je dirais, jusqu'à ce que je sois sûr de mes résultats, et à ce moment j'ai reporté le code dans button1, résultat button2 fait sa jalouse !
    Non mais j'te jure !


    Citation Envoyé par BeanzMaster Voir le message
    Essayes plutôt de faire
    button1 crée des bitmaps et les utilise comme des bitmaps, j'ai fait comme tu as dis et ça ne change strictement rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // origine
    //  B1    := Image1.Picture.Bitmap;
    //  B2    := Image2.Picture.Bitmap;
    // suggestion Jérôme
      B1 := TBitmap.Create; B1.Assign(Image1.Picture.Bitmap);
      B2 := TBitmap.Create; B2.Assign(Image2.Picture.Bitmap);
    mais surtout, ah lol, j'étais tellement sûr que tout était pareil que je n'ai pas vu une petite différence, certains diront "fondamentale" : c'est que l'autre bouton utilisait directement Image1 et Image2, alors j'ai uniformisé et on trouve donc maintenant dans button2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      B1 := TBitmap.Create; B1.Assign(Image1.Picture.Bitmap);
      B2 := TBitmap.Create; B2.Assign(Image2.Picture.Bitmap);
    avec les Free qui vont bien à la fin de chaque procédure de bouton.
    Bien.
    Et le problème est strictement identique.

    Citation Envoyé par BeanzMaster Voir le message
    lorsque que tu fais P1 := B1.ScanLine[h1]; [ça] modifie "Image1.Picture.Bitmap", puis tu cliques sur Button2 le resultat renvoyé sera FAUX (normal vu que le bitmap source a été modifié)
    A été modifié !? Tu peux préciser ? Où as-tu trouvé cette info ? Je me contente de lire, il n'y a aucune raison de modifier quoi que ce soit, bon sang !
    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

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    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 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    Bonsoir, le compilateur génère-t-il le même code ? Il pourrait être intéressant de visualiser les différences pour comprendre.
    Delphi 5 Pro - Delphi 10.4 Rio 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
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Salut salut,
    Citation Envoyé par tourlourou Voir le message
    Bonsoir, le compilateur génère-t-il le même code ? Il pourrait être intéressant de visualiser les différences pour comprendre.
    Tu veux dire, "aller lire de l'hexa" ? Uniquement s'il est écrit en mandarin, sinon j'ai du mal,

    Je pencherais plutôt pour une histoire de verrous stupides car, si le problème existait en Delphi, "ils" s'en seraient rendu compte et les codes publiés (Cirec, Andnotor, Charly) auraient proposé autre chose que ce que j'ai récupéré.
    Une grosse différence entre le Scanline de Delphi et celui de Lazarus, c'est qu'il faut rajouter le couple BeginUpdate / EndUpdate, que je pensais utile juste en cas d'écriture, mais va-t-en savoir !

    Car c'est quand même pas très normal de ne pas pouvoir faire la même recherche plusieurs fois de suite, ou de changer d'image et pareil, avoir un résultat négatif alors qu'arrêter le prog, le relancer, changer d'abord d'image et chercher, ça fonctionne !

    C'est quand même impressionnant : je viens de faire le test avec le code d'Andnotor, que j'ai blindé de Begin / EndUpdate, plus remplacement des Scanline[x] par les RawImage.GetLineStart(x), F9, premier clic --> "Trouvé", deuxième clic --> "pas trouvé'"
    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

  6. #6
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Yep !


    A été modifié !? Tu peux préciser ? Où as-tu trouvé cette info ? Je me contente de lire, il n'y a aucune raison de modifier quoi que ce soit, bon sang !
    Oups je me suis planté je n'ai pas assez bien lu ton code

    Un truc que je ne comprend pas :
    Pourquoi faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     P2 := B2.ScanLine[0];
      for h1 := 0 to B1.Height -B2.Height -1 do begin
        P1 := B1.ScanLine[h1];
        for w1 := 0 to B1.Width -B2.Width -1 do begin
          if CompareMem(P1, P2, B2.Width *3) then // ok
    La deuxième boucle ne sert a rien car tu compare toujours la même ligne et non pas chaque pixel (à moins qu'il manque du code)
    Pourquoi soustraire la hauteur et la largeur du 1er bitmap avec celle du 2eme ?

    De plus tu testes uniquement la 1er ligne du 2eme bitmap avec les autres du 1er bitmap. Que cherches tu a faire exactement ?

    En attendant J'ai fais ça en test et tout fonctionne

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1 : TButton;
        Button2 : TButton;
        Image1 : TImage;
        Image2 : TImage;
        Memo1 : TMemo;
        Memo2 : TMemo;
        procedure Button1Click(Sender : TObject);
        procedure Button2Click(Sender : TObject);
        procedure FormCreate(Sender : TObject);
      private
     
      public
     
      end;
     
    var
      Form1 : TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.FormCreate(Sender : TObject);
    begin
      image1.Picture.LoadFromFile('320x240x24_v3_96.bmp');
      image2.Picture.LoadFromFile('320x240x24_v3_96.bmp'); //('240x180x24_v3_96.bmp');
    end;
     
    procedure TForm1.Button1Click(Sender : TObject);
    var
      B1, B2: TBitmap;
      P1, P2: PByte;
      w1, h1: integer;
    begin
      B1 := Image1.Picture.Bitmap;  B2 := Image2.Picture.Bitmap;
      P2 := B2.ScanLine[0];
      for h1 := 0 to B1.Height-1 do // -B2.Height -1 do
      begin
        P1 := B1.ScanLine[h1];
       // for w1 := 0 to B1.Width -B2.Width -1 do
       // begin
          if CompareMem(P1, P2, B2.Width *3) then
            memo1.Append(Inttostr(h1)+' : OK')
          else
            memo1.Append(Inttostr(h1)+' : KC')
       // end;
      end;
    end;
     
    procedure TForm1.Button2Click(Sender : TObject);
    var
      B1, B2: TBitmap;
      P1, P2: PByte;
      w1, h1: integer;
    begin
      B1 := Image1.Picture.Bitmap;  B2 := Image2.Picture.Bitmap;
      //P2 := B2.ScanLine[0];
      for h1 := 0 to B1.Height-1 do // -B2.Height -1 do
      begin
        P1 := B1.ScanLine[h1];
        P2 := B2.ScanLine[h1];
        //for w1 := 0 to B1.Width -B2.Width -1 do
        //begin
          if CompareMem(P1, P2, B2.Width *3) then
            memo2.Append(Inttostr(h1)+' : OK')
          else
            memo2.Append(Inttostr(h1)+' : KC')
        //end;
      end;
    end;
     
    end.
    Il y a peut-être quelque chose qui ne joue pas dans le code que tu n'as pas mis
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  7. #7
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut salut,


    Une grosse différence entre le Scanline de Delphi et celui de Lazarus, c'est qu'il faut rajouter le couple BeginUpdate / EndUpdate, que je pensais utile juste en cas d'écriture, mais va-t-en savoir !
    Dans l'unit Graphics.pas on peut lire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        property RawImage: TRawImage read GetRawImage; // be carefull with this, modify only within a begin/endupdate
        property ScanLine[Row: Integer]: Pointer read GetScanLine; platform; // Use only when wrpped by a begin/endupdate
    Le begin/endupdate ne semble pas obligatoire sous windows, mais il faut peut-être mieux les utiliser quand même
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    La deuxième boucle ne sert a rien car tu compare toujours la même ligne et non pas chaque pixel (à moins qu'il manque du code)
    Pourquoi soustraire la hauteur et la largeur du 1er bitmap avec celle du 2eme ?
    Oui, je n'ai pas tout mis, je voulais surtout montrer l'enchaînement des choses qui coincent.

    J'ai mis à jour mon post d'avant les tiens, donc j'y réponds à ton interrogation sur le Begin/EndUpdate (et je suis parfaitement au courant du comportement normal de la chose), et je donne un lien vers la discussion avec le code d'Andnotor.

    Juste un truc pour les linuxiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            for h2 := 1 to B2.Height -1 do
            begin
              P21 := B2.RawImage.GetLineStart(h2);
              // OS-dépendant !
    //          Dec(P11, BpS); // ne trouve pas
              Inc(P11, BpS); // trouve
    Je te laisse regarder et on en reparle, là je suis à la bourre sur autre chose.
    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

  9. #9
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    J'ai lu la discussion et à partir de celle-ci j'ai fais cette petite application test : jipetecompbmp.zip

    J'ai dupliqué le bouton qui scanne l'image et pas d'erreur l'image est bien trouvée.

    J'ai laissé quelques bout de code en commentaire (fonctionnel également) donc je ne sais pas si c'est un bug dans la compilation sous linux ?

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Bonsoir,

    Je te remercie infiniment du temps que tu as passé à concocter ce petit projet, et en ce qui me concerne, je me suis pris des petites erreurs insignifiantes à l'ouverture (des histoires de nouvelles propriétés qui n'existent pas encore dans mon vieux Laz), plus une adaptation nécessaire (liée à Linux ? J'espère que ce n'est pas ça qui met sa pagaille) :
    ligne 131
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //          R := TRect.Create(Point(x1, y1),  DimX2 -1,  DimY2 -1);
              R := Rect(x1, y1,  DimX2 -1,  DimY2 -1);
    et 213 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //          R := TRect.Create(Point(x1, y1),  DimX2 -1,  DimY2 -1);
              R := Rect(x1, y1,  DimX2 -1,  DimY2 -1);
    Car, oui, la pagaille est toujours là, scénario :
    je charge la grande image (j'ai pris celle d'origine avec la plage corse),
    je charge la petite image (celle avec le bout de branche de pin),
    je clique sur "scanner la grande image" et ça me répond "trouvé à l'adresse que je commence à connaître par cœur, 222 et 33)", je reclique et paf !, "pas trouvé"
    je clique sur l'autre bouton et "pas trouvé" non plus.
    Je ferme l'appli, je la relance dans les mêmes conditions, je clique sur "Button 1" c'est trouvé, je reclique et c'est "pas trouvé"
    Et si je clique sur l'autre, c'est pas trouvé non plus.

    Si je change de grande image et de petite, ça trouve.
    Si je clique sur "changer la grande" sans la changer (je me contente de valider), ça trouve aussi.
    Si je clique sur "changer la grande" sans la changer (j'annule la boîte de dialogue), ça ne trouve pas.
    Donc c'est une des instructions du Button3 qui remet les pendules à l'heure.

    J'ai modifié comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      If OpenpictureDialog1.Execute Then
      Begin
      //Image1.Picture.LoadFromFile(OpenpictureDialog1.Filename);
        Image1.Picture.Bitmap.LoadFromFile(OpenpictureDialog1.Filename);
    histoire d'être plus en phase avec les deux lignes qui suivent, sans effet.

    C'est épuisant, des choses pareilles.

    Et toi, sous Windows, tu peux cliquer plusieurs fois sur les boutons de recherche et ça trouve à chaque fois ?
    Si oui, il ne te reste plus qu'à tester dans une machine virtuelle Linux,
    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

  11. #11
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut,

    bon ben je viens de tester sous ma distribution Linux (qui n'est pas dans une VM ) le résultat est infligeant
    J'ai testé avec Lazarus 1.8.2 et 2.0.0 j'ai le même comportement que toi au deuxième clique "Pas trouvé".
    Si je recharge la grande image cela re-fonctionne au premier clique, mais après idem (quelque soit le bouton)
    Si je recharge une petite image cela ne fonctionne pas.

    Il est donc évident que le problème vient du TImage de la LCL. Je vais tester avec 2 TBitmap à la place pour voir.

    Je posterai un message sur le forum de nos voisins le cas échéant

    C'est vrai que c'est frustrant car sous Windows tout fonctionne bien

    A+

    [EDIT] Je viens de tester avec 2 TBitmap au lieu de 2 TImage et tout fonctionne. Le problème se situe donc bien dans le code du TImage[/EDIT]
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Coucou !

    Citation Envoyé par BeanzMaster Voir le message
    bon ben je viens de tester sous ma distribution Linux (qui n'est pas dans une VM ) le résultat est infligeant
    Affligeant, surtout,

    Citation Envoyé par BeanzMaster Voir le message
    J'ai testé avec Lazarus 1.8.2 et 2.0.0 j'ai le même comportement que toi au deuxième clique "Pas trouvé".
    […]
    [EDIT] Je viens de tester avec 2 TBitmap au lieu de 2 TImage et tout fonctionne. Le problème se situe donc bien dans le code du TImage[/EDIT]
    J'avais vraiment peur de devenir fou, sur ce coup-là, donc merci de m'avoir rassuré.

    In fine, on va se retrouver avec un grand classique : on travaille avec des bitmaps de… travail, lol ! et on affiche le résultat dans un TImage qui ne sert qu'à ça.

    À se graver au fer rouge à l'envers sur le front, comme ça quand on se coiffe/se rase/se quiche un bouton/se noue la cravate, etc., ça nous fait un refresh,

    Bon, allez,
    Et encore merci
    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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Euh, attends, je repense à un truc, en regardant le code d'Andnotor, qui utilise des TBitmap.

    Alors pourquoi ça foire ?

    Fais donc voir ton code, si c'est pas indiscret, que je compare avec le sien.

    EDIT : laisse tomber j'ai trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    begin
      Found := FALSE;
    //  B1    := Image1.Picture.Bitmap; // code Delphi d'origine
    //  B2    := Image2.Picture.Bitmap;
      B1 := TBitmap.Create; /////B1.Assign(Image1.Picture.Bitmap);// kc
      B2 := TBitmap.Create; /////B2.Assign(Image2.Picture.Bitmap);
      B1.LoadFromFile(application.Location + 'GrandeImage.bmp'); // +10000 !
      B2.LoadFromFile(application.Location + 'PetiteImage.bmp');
    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

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

Discussions similaires

  1. Deux objets avec le même identifiant pour une session
    Par nicolas_isi dans le forum Hibernate
    Réponses: 6
    Dernier message: 16/07/2009, 10h11
  2. Deux boutons avec la meme ID
    Par Katachana dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/09/2008, 18h22
  3. [2.0] Deux requêtes avec les mêmes paramètres
    Par alband85 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 07/07/2008, 20h28
  4. Deux instances avec le même nom.
    Par Denn's dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/03/2008, 10h09
  5. deux bouton submit dans même formulaire
    Par sansouna24 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 29/05/2006, 12h03

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