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 :

Conversion Delphi vers Lazarus - Error: Ordinal expression expected [Lazarus]


Sujet :

Lazarus Pascal

  1. #41
    Membre Expert
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par naute Voir le message
    Daccord mais pourquoi? Quelle différence cela fait-il?
    Je ne saurais pas t'expliquer le pourquoi du comment, mais ceci est dû à l'ordre dont les choses sont initialisées. L'évènement OnShow ou OnActivate sont préférables dans bon nombre de cas.
    Sinon le pourquoi, ben sinon ça ne fonctionne pas tout simplement

    Citation Envoyé par naute Voir le message
    Pas de problème mais est-ce que les valeurs ne sont pas déjà clBlack et psSolid par défaut?
    Par expérience et Jipete pourra te le confirmer la gestion et l'utilisation des images avec TBitmap sous Lazarus c'est une vraie cata. Il faut coller des rustines pratiquement tout le temps. (Bientôt je posterai une solution de remplacement a TBitmap et à BGRABitmap )

    Citation Envoyé par naute Voir le message
    Dans ce cas précis, je suis d'accord que FillRect() fait aussi bien le travail, mais indépendamment de ça, FloodFill() devrait fonctionner aussi. En tout cas, il fonctionne parfaitement avec le code que j'ai donné sous Windows/Delphi 2006. De plus, mon utilisation de fsBorder est conforme avec le fait que la couleur que je donne est bien celle de la limite du remplissage. Si j'utilise fsSurface, ce qui est également possible, il faut que je donne la couleur de remplissage actuelle.
    Ca fonctionne, mais pas avec fsBorder

    Citation Envoyé par naute Voir le message
    Si tu veux, ce qui m'embête le plus, c'est que ça fonctionne dans un environnement et pas dans l'autre. Je viens de faire plusieurs tests en changeant les couleurs de fond, de ligne et de remplissage, et rien à faire.
    Je suis retourné voir le mode d'emploi de FloodFill() dans Delphi 2006 (parce que dans Lazarus, les modes d'emploi ), et je n'ai rien trouvé d'aberrant dans mon utilisation.
    Idem que plus haut. Les TBitmap c'est l'enfer. Et je le redis encore FPC/LAZARUS ce n'est pas DELPHI même si de gros efforts sont fait pour que les Delphinautes se sentent le moins perdu lors de leur migration sous Lazarus. des différences existent. De plus Lazarus étant multi-plateforme et qui en plus utilise plusieurs environnements différents pour l'affichage (Windows, GTK2/3, Carbon, Cocoa). C'est compliqué d'obtenir partout la même chose et à maintenir. Il ne faut pas oublier que Lazarus est OpenSource.

    La documentation de Delphi était bien jusqu'a Delphi 7. Après elle s'est franchement dégradée. Tu peux t'y baser. mais par pour tout, et justement pour ce que je viens de dire ci-dessus.

    Citation Envoyé par naute Voir le message
    Tes exemples de code fonctionnent parfaitement .
    Je suis allé voir dans ma config et tout semble OK .
    Cool
    • "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

  2. #42
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Je ne saurais pas t'expliquer le pourquoi du comment, mais ceci est dû à l'ordre dont les choses sont initialisées. L'évènement OnShow ou OnActivate sont préférables dans bon nombre de cas.
    Sinon le pourquoi, ben sinon ça ne fonctionne pas tout simplement
    Je suis non violent . La violence découle de l'incapacité à régler ses propres problèmes. Voilà la meilleure solution .

    Citation Envoyé par BeanzMaster Voir le message
    Bientôt je posterai une solution de remplacement a TBitmap et à BGRABitmap
    J'attends avec impatience .

    Citation Envoyé par BeanzMaster Voir le message
    Ca fonctionne, mais pas avec fsBorder
    Ça ne fonctionne pas non plus avec fsSurface, ou alors je l'utilise mal.

    Citation Envoyé par BeanzMaster Voir le message
    Idem que plus haut. Les TBitmap c'est l'enfer. Et je le redis encore FPC/LAZARUS ce n'est pas DELPHI même si de gros efforts sont fait pour que les Delphinautes se sentent le moins perdu lors de leur migration sous Lazarus. des différences existent. De plus Lazarus étant multi-plateforme et qui en plus utilise plusieurs environnements différents pour l'affichage (Windows, GTK2/3, Carbon, Cocoa). C'est compliqué d'obtenir partout la même chose et à maintenir. Il ne faut pas oublier que Lazarus est OpenSource.
    Loin de moi la volonté de dénigrer le travail des développeurs de Lazarus. J'ai d'ailleurs eu l'occasion, sur ce forum, de défendre Lazarus contre des attaques que j'estimais mal venues. Il n'en reste pas moins que Lazarus doit son existence à la volonté de certains de faire un clone de Delphi libre, et que cette optique de départ semble, à certains moments, ne plus être d'actualité. J'ai l'impression qu'on se dirige vers un système de développement VisualPascal ne reprenant de Delphi que l'esthétique de son IDE.

    J'ai d'ailleurs lu quelque part sur ce forum, que certains trouvaient que les développeurs de Lazarus travaillaient plus sur ce qui les intéressait que sur ce qui était utile, voire nécessaire, aux utilisateurs, et tenait finalement assez peu compte des remarques formulées.

    Citation Envoyé par BeanzMaster Voir le message
    La documentation de Delphi était bien jusqu'a Delphi 7. Après elle s'est franchement dégradée. Tu peux t'y baser. mais par pour tout, et justement pour ce que je viens de dire ci-dessus.
    Aaahhh! Delphi 1 .

    Amicalement,
    naute.

  3. #43
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Revenons à nos moutons .

    Code Pascal : 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
     
    unit base;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
     Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
     
    type
     
     { TFBase }
     
      TFBase = class(TForm)
      Image: TImage;
     
      procedure FormShow(Sender: TObject);
     
      private
     
      public
     
      end;
     
    var
      FBase: TFBase;
     
    implementation
     
    {$R *.lfm}
     
    { TFBase }
     
    procedure TFBase.FormShow(Sender: TObject);
    begin
      FBase.ClientWidth:=300;
      FBase.ClientHeight:=300;
     
      Image.Left:=50;
      Image.Top:=50;
      Image.Width:=200;
      Image.Height:=200;
    end;
     
    end.
    on ne peut pas faire plus simple, donne :

    Nom : timage_1.png
Affichages : 873
Taille : 4,0 Ko

    Rien. Le TImage n'est pas affiché. On a la fiche vide standard.

    Code Pascal : 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
     
    unit base;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
     Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
     
    type
     
     { TFBase }
     
      TFBase = class(TForm)
      Image: TImage;
     
      procedure FormShow(Sender: TObject);
     
      private
     
      public
     
      end;
     
    var
      FBase: TFBase;
     
    implementation
     
    {$R *.lfm}
     
    { TFBase }
     
    procedure TFBase.FormShow(Sender: TObject);
    begin
      FBase.ClientWidth:=300;
      FBase.ClientHeight:=300;
     
      Image.Left:=50;
      Image.Top:=50;
      Image.Width:=200;
      Image.Height:=200;
     
      Image.Canvas.Pen.Color:=clRed;
     
    end;
     
     
    end.
    donne

    Nom : timage_2.png
Affichages : 859
Taille : 4,4 Ko

    Le TImage est affiché. Je n'ai fait que rajouter :
    Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Image.Canvas.Pen.Color:=clRed;
    et là, mon TImage s'affiche. C'est absurde. Et ce n'est pas du dénigrement .

    J'ai essayé également
    Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Image.Color:=clRed;
    mais ça ne donne rien non plus.

    Moi aussi, je peux faire des composants avec des tas de fonctions, mais si rien n'est implémenté, ce n'est pas vraiment utile, et c'est un euphémisme. J'espère que le problème n'est pas à ce niveau là. (J'attends jipété )

    J'ajoute
    Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Canvas.MoveTo(50, 50);
        Canvas.LineTo(50, 150);
        Canvas.LineTo(150, 150);
        Canvas.LineTo(150, 50);
        Canvas.LineTo(50, 50);
    ce qui me donne
    Nom : timage_3.png
Affichages : 860
Taille : 4,0 Ko
    j'ajoute enfin
    Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Canvas.FloodFill(5, 5, clGreen, fsSurface);
    ce qui me donne
    Nom : timage_4.png
Affichages : 519
Taille : 4,4 Ko

    Où est l'erreur?

  4. #44
    Membre Expert
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par naute Voir le message
    Revenons à nos moutons .

    Code Pascal : 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
     
    unit base;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
     Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
     
    type
     
     { TFBase }
     
      TFBase = class(TForm)
      Image: TImage;
     
      procedure FormShow(Sender: TObject);
     
      private
     
      public
     
      end;
     
    var
      FBase: TFBase;
     
    implementation
     
    {$R *.lfm}
     
    { TFBase }
     
    procedure TFBase.FormShow(Sender: TObject);
    begin
      FBase.ClientWidth:=300;
      FBase.ClientHeight:=300;
     
      Image.Left:=50;
      Image.Top:=50;
      Image.Width:=200;
      Image.Height:=200;
    end;
     
    end.
    on ne peut pas faire plus simple, donne :

    Nom : timage_1.png
Affichages : 873
Taille : 4,0 Ko

    Rien. Le TImage n'est pas affiché. On a la fiche vide standard.
    Normal jusque là

    Citation Envoyé par naute Voir le message
    Code Pascal : 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
     
    unit base;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
     Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
     
    type
     
     { TFBase }
     
      TFBase = class(TForm)
      Image: TImage;
     
      procedure FormShow(Sender: TObject);
     
      private
     
      public
     
      end;
     
    var
      FBase: TFBase;
     
    implementation
     
    {$R *.lfm}
     
    { TFBase }
     
    procedure TFBase.FormShow(Sender: TObject);
    begin
      FBase.ClientWidth:=300;
      FBase.ClientHeight:=300;
     
      Image.Left:=50;
      Image.Top:=50;
      Image.Width:=200;
      Image.Height:=200;
     
      Image.Canvas.Pen.Color:=clRed;
     
    end;
     
     
    end.
    donne

    Nom : timage_2.png
Affichages : 859
Taille : 4,4 Ko

    Le TImage est affiché. Je n'ai fait que rajouter :
    Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Image.Canvas.Pen.Color:=clRed;
    et là, mon TImage s'affiche. C'est absurde. Et ce n'est pas du dénigrement .
    D'accord avec toi c'est absurde,. Je n'ai pas ce comportement sous Windows. Je testerai sous Linux plus tard.

    Citation Envoyé par naute Voir le message

    J'ai essayé également
    Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Image.Color:=clRed;
    mais ça ne donne rien non plus.
    Ce paramètre ne sert à rien pour les TImage. Tiens en passant hier je n'ai pas fais attention mais au lieux d'utiliser un TImage tu peux utiliser un TPanel vu que tu dessines avec Canvas et que tu ne dessines pas directement dans le bitmap du TImage

    Citation Envoyé par naute Voir le message
    Moi aussi, je peux faire des composants avec des tas de fonctions, mais si rien n'est implémenté, ce n'est pas vraiment utile, et c'est un euphémisme. J'espère que le problème n'est pas à ce niveau là. (J'attends jipété )

    J'ajoute
    Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Canvas.MoveTo(50, 50);
        Canvas.LineTo(50, 150);
        Canvas.LineTo(150, 150);
        Canvas.LineTo(150, 50);
        Canvas.LineTo(50, 50);
    ce qui me donne
    Nom : timage_3.png
Affichages : 860
Taille : 4,0 Ko
    Pas de soucis a ce niveau, mais le truc bizarre c'est que tu dessine sur ta form et que les traits sont bien rouge

    Citation Envoyé par naute Voir le message
    j'ajoute enfin
    Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Canvas.FloodFill(5, 5, clGreen, fsSurface);

    Où est l'erreur?
    Voila le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Image.Canvas.Pen.Color:=clRed;
       Image.Canvas.MoveTo(50, 50);
       Image.Canvas.LineTo(50, 150);
       Image.Canvas.LineTo(150, 150);
       Image.Canvas.LineTo(150, 50);
       Image.Canvas.LineTo(50, 50);
       Image.Canvas.Brush.Color :=  clGreen; // Là c'est la couleur avec laquelle tu veux peindre
       Image.Canvas.FloodFill(5, 5, clDefault, fsSurface); // Ici c'est la couleur que tu veux remplacer. Ici tu peux mettre clBlack également
       // Image.Canvas.Changed;
    Nom : 2018-05-10_175304.jpg
Affichages : 520
Taille : 7,5 Ko
    • "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

  5. #45
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Copier-coller de ton code
    Code Pascal : 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
     
    unit base;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
     Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
     
    type
     
     { TFBase }
     
      TFBase = class(TForm)
      Image: TImage;
     
      procedure FormShow(Sender: TObject);
     
      private
     
      public
     
      end;
     
    var
      FBase: TFBase;
     
    implementation
     
    {$R *.lfm}
     
    { TFBase }
     
    procedure TFBase.FormShow(Sender: TObject);
    begin
      FBase.ClientWidth:=300;
      FBase.ClientHeight:=300;
     
      with Image do
      begin
        Left:=50;
        Top:=50;
        Width:=200;
        Height:=200;
      end;
     
        Image.Canvas.Pen.Color:=clRed;
        Image.Canvas.MoveTo(50, 50);
        Image.Canvas.LineTo(50, 150);
        Image.Canvas.LineTo(150, 150);
        Image.Canvas.LineTo(150, 50);
        Image.Canvas.LineTo(50, 50);
        Image.Canvas.Brush.Color :=  clGreen; // Là c'est la couleur avec laquelle tu veux peindre
        Image.Canvas.FloodFill(5, 5, clDefault, fsSurface); // Ici c'est la couleur que tu veux remplacer. Ici tu peux mettre clBlack également
        // Image.Canvas.Changed;
     
    end;
     
     
    end.

    Résultat :

    Nom : timage_5.png
Affichages : 512
Taille : 4,4 Ko

    Et bien que le résultat soit toujours le même, je mets un point d'honneur à faire à chaque fois une copie d'écran et à ne pas utiliser celle(s) déjà faite(s).

    De plus, il y a un défaut dans ton exemple. C'est l'intérieur du tracé qu'on veut peindre, sauf erreur, pas l'extérieur.

  6. #46
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Et avec le TPanel

    Code Pascal : 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
     
    unit base;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
     Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
     
    type
     
     { TFBase }
     
      TFBase = class(TForm)
      Image: TImage;
      Panneau: TPanel;
     
      procedure FormShow(Sender: TObject);
     
      private
     
      public
     
      end;
     
    var
      FBase: TFBase;
     
    implementation
     
    {$R *.lfm}
     
    { TFBase }
     
    procedure TFBase.FormShow(Sender: TObject);
    begin
      //FBase.ClientWidth:=300;
      //FBase.ClientHeight:=300;
     
      with Image do
      begin
        Left:=50;
        Top:=50;
        Width:=200;
        Height:=200;
      end;
     
        Image.Canvas.Pen.Color:=clRed;
        Image.Canvas.MoveTo(50, 50);
        Image.Canvas.LineTo(50, 150);
        Image.Canvas.LineTo(150, 150);
        Image.Canvas.LineTo(150, 50);
        Image.Canvas.LineTo(50, 50);
        Image.Canvas.Brush.Color :=  clGreen; // Là c'est la couleur avec laquelle tu veux peindre
        Image.Canvas.FloodFill(5, 5, clDefault, fsSurface); // Ici c'est la couleur que tu veux remplacer. Ici tu peux mettre clBlack également
        // Image.Canvas.Changed;
     
        Panneau.Canvas.Pen.Color:=clRed;
        Panneau.Canvas.MoveTo(50, 50);
        Panneau.Canvas.LineTo(50, 150);
        Panneau.Canvas.LineTo(150, 150);
        Panneau.Canvas.LineTo(150, 50);
        Panneau.Canvas.LineTo(50, 50);
        Panneau.Canvas.Brush.Color :=  clGreen; // Là c'est la couleur avec laquelle tu veux peindre
        Panneau.Canvas.FloodFill(5, 5, clDefault, fsSurface); // Ici c'est la couleur que tu veux remplacer. Ici tu peux mettre clBlack également
        // Image.Canvas.Changed;
     
     
    end;
     
     
    end.

    Nom : TImage_6.png
Affichages : 529
Taille : 7,7 Ko

    Désolé

  7. #47
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 139
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 139
    Par défaut
    Citation Envoyé par naute Voir le message
    (J'attends jipété )
    Oh, tu sais, Jipété, des fois il se sent un peu dépassé par la joyeuse pagaille dans le graphisme sous Lazarus...

  8. #48
    Membre Expert
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par naute Voir le message
    Copier-coller de ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Image.Canvas.FloodFill(5, 5, clDefault, fsSurface); // Ici c'est la couleur que tu veux remplacer. Ici tu peux mettre clBlack également
    Résultat :

    Et bien que le résultat soit toujours le même, je mets un point d'honneur à faire à chaque fois une copie d'écran et à ne pas utiliser celle(s) déjà faite(s).

    De plus, il y a un défaut dans ton exemple. C'est l'intérieur du tracé qu'on veut peindre, sauf erreur, pas l'extérieur.
    La position 5,5 n'est pas à l'intérieur du rectangle. La position du rectangle commence à 50,50 . Par contre j'ai toujours pas tester sous Linux du coup le problème est peut-être lié à cette plateforme.

    Citation Envoyé par naute Voir le message
    Et avec le TPanel
    C'est de ma faute j'aurais du te preciser qu'il faut passer par OnPaint
    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
    Procedure TFBase.FormShow(Sender : TObject);
    Begin
      DoubleBuffered:=True;
     
      Image.Left:=50;
      Image.Top:=50;
      Image.Width:=200;
      Image.Height:=200;
     
       Image.Canvas.Pen.Color:=clRed;
       Image.Canvas.MoveTo(50, 50);
       Image.Canvas.LineTo(50, 150);
       Image.Canvas.LineTo(150, 150);
       Image.Canvas.LineTo(150, 50);
       Image.Canvas.LineTo(50, 50);
     
       Image.Canvas.Brush.Color :=  clGreen;
       Image.Canvas.FloodFill(55, 55, clBlack, fsSurface);
    end; 
     
    Procedure TFBase.PanneauPaint(Sender : TObject);
    Begin
     Panneau.Canvas.Brush.Color :=  clBlack;
     Panneau.Canvas.Clear;
     Panneau.Canvas.Pen.Color:=clRed;
     Panneau.Canvas.MoveTo(50, 50);
     Panneau.Canvas.LineTo(50, 150);
     Panneau.Canvas.LineTo(150, 150);
     Panneau.Canvas.LineTo(150, 50);
     Panneau.Canvas.LineTo(50, 50);
     Panneau.Canvas.Brush.Color :=  clGreen; // Là c'est la couleur avec laquelle tu veux peindre
     Panneau.Canvas.FloodFill(55, 55, clBlack, fsSurface); // Ici c'est la couleur que tu veux remplacer. Ici tu peux mettre clBlack également
    end;
    Nom : 2018-05-10_235700.jpg
Affichages : 689
Taille : 12,0 Ko

    Voili voilou
    • "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

  9. #49
    Membre Expert
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    Je viens de tester sous Linux et effectivement FloodFill ne fonctionne pas. Cette fonction n'est pas implémentée dans GTK Nativement (http://forum.lazarus.freepascal.org/...html#msg166439) du coup il faut se faire une fonction perso.
    - https://en.wikipedia.org/wiki/Flood_fill
    - http://www.lazarusforum.de/viewtopic.php?f=25&t=3891 : exemple à modifier pour être utiliser directement par un TCanvas

    Bon du coup ça tombe bien car je n'ai pas encore mis cette fonction dans ma bibliothèque

    Sinon pendant que je lisais sur le forum anglais.. Au lieu d'un TPanel, il y a une meilleur solution, utiliser un TPaintBox (je n'y est pas pensé, je l'utilise jamais ), mais cela ne résoudra pas le "FloodFill"

    Bon en gros c'est ce que je disais l'autre jour, cela serai bien que l'équipe de FPC/Lazarus nous pondent des fonctions et contrôles qui fonctionnent sur tous les environnement quitte à ne pas utiliser les différents Widgets (GTK, Carbon.....) sauf celle de très bas niveau. C'est quand même frustrant qu'une simple routine comme celle là ne soit pas porté pour tous les OS.

    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. #50
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    La position 5,5 n'est pas à l'intérieur du rectangle. La position du rectangle commence à 50,50 .
    Oh la la! C'est dramatique! Faut qu'j'arrête (mais quoi?).

    Citation Envoyé par BeanzMaster Voir le message
    C'est de ma faute j'aurais du te preciser qu'il faut passer par OnPaint
    Ben non. C'est moi qui ne suis pas bon .

    Par contre, le résultat n'est pas le même que chez toi.

    Nom : timage_6.png
Affichages : 509
Taille : 5,4 Ko

    Le FloodFill() ne fonctionne toujours pas. Alors est-ce que ça pourrait venir de son implémentation sous GNU-Linux. Pour info, dans mon environnement, Lazarus utilise Gtk2.

    Citation Envoyé par jipété
    Oh, tu sais, Jipété, des fois il se sent un peu dépassé par la joyeuse pagaille dans le graphisme sous Lazarus...
    D'une certaine manière, ça me rassure, mais c'était pas pour ça:
    Citation Envoyé par naute
    J'espère que le problème n'est pas à ce niveau là. (J'attends jipété )
    C'était juste pour le trait d'union manquant entre niveau et . Mon coté farce. Mouais!.. Bon... J'recommenc'rai plus .

    Amicalement,
    naute.

  11. #51
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Croisement de post .

    Donc, pour le FloodFill(), rien à faire. Quand au TPaintBox, j'y avais déjà songé mais les résultats étant les mêmes, je ne me suis pas attardé.

    Bon en gros c'est ce que je disais l'autre jour, cela serai bien que l'équipe de FPC/Lazarus nous pondent des fonctions et contrôles qui fonctionnent sur tous les environnement quitte à ne pas utiliser les différents Widgets (GTK, Carbon.....) sauf celle de très bas niveau. C'est quand même frustrant qu'une simple routine comme celle là ne soit pas porté pour tous les OS.
    Et oui. C'est quand même du basique.

    Donc, malgré tout, je n'avais pas tout faux. Ça m'embête bien parce que les 3/4 de mon code ont pour rôle de gérer l'affichage graphique interactif du planning, le reste étant très standard.
    Va probablement falloir que je réécrive une grosse partie si je veux que ça tourne sous GNU-Linux.

    Merci beaucoup pour ton aide ,

    amicalement,
    naute

    Edit: J'ai oublié de te remercier pour tes liens. Je vais les consulter, mais déjà qu'en anglais je ne suis pas un cador, en allemand, je ne te raconte pas...

  12. #52
    Membre Expert
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par naute Voir le message
    Croisement de post .

    Donc, pour le FloodFill(), rien à faire. Quand au TPaintBox, j'y avais déjà songé mais les résultats étant les mêmes, je ne me suis pas attardé.



    Et oui. C'est quand même du basique.

    Donc, malgré tout, je n'avais pas tout faux. Ça m'embête bien parce que les 3/4 de mon code ont pour rôle de gérer l'affichage graphique interactif du planning, le reste étant très standard.
    Va probablement falloir que je réécrive une grosse partie si je veux que ça tourne sous GNU-Linux.

    Merci beaucoup pour ton aide ,

    amicalement,
    naute

    Edit: J'ai oublié de te remercier pour tes liens. Je vais les consulter, mais déjà qu'en anglais je ne suis pas un cador, en allemand, je ne te raconte pas...
    Salut

    Tiens voilà une petite unité qui rajoute le floodfill au TCanvas basé sur le code du forum Allemand que je t'ai donné. Elle n'est pas très rapide mais elle à le mérite de fonctionner, elle au moins

    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
    Unit uCanvasHelper;
     
    {$mode objfpc}{$H+}
    {$modeswitch advancedrecords}
    {$modeswitch typehelpers} 
     
    Interface
     
    Uses
      LCLIntf, Classes, SysUtils,  Graphics, FPImage;
     
     Type TCanvasHelper = Class helper for TCanvas
     public
       Procedure FloodFill( x_, y_: Integer; FillColor: TColor); overload;
     end;
     
    implementation
     
    {$R *.lfm}
     
    uses LCLIntf, FPImage;
    { TFBase }
     
    Procedure TCanvasHelper.FloodFill(x_, y_: Integer; FillColor: TColor);// FillStyle: TFillStyle);
    Var
      Stack: Array Of TPoint;
      Stackp: Integer;
      x, y: Integer;
      FillColor2, ReplaceColor: TFPColor;
     
      Procedure PutInStack(X, Y: Integer);
      Begin
        inc(stackp);
        If Stackp > high(stack) Then Begin
          // Blockweise Vor Allokierung
          SetLength(Stack, high(Stack) + 1025);
        End;
        Stack[stackp] := Point(X, Y);
      End;
     
      Procedure GetFromStack(Var X, Y: Integer);
      Begin
        X := Stack[stackp].X;
        Y := Stack[stackp].Y;
        dec(stackp);
      End;
     
      Function ColorInRange(c1, c2: TFPColor): Boolean;
      Begin
        result := (c1.red = c2.red) And (c1.green = c2.green) And (c1.blue = c2.blue);
      End;
     
     
    Begin
      X := X_;
      Y := Y_;
      If (X >= Self.Width) Or (Y >= Self.Height) Or (x < 0) Or (y < 0) Then  Exit;
     
      FillColor2.red := (FillColor And $000000FF) Shl 8;
      FillColor2.green := (FillColor And $0000FF00);
      FillColor2.blue := (FillColor And $00FF0000) Shr 8;
     
      ReplaceColor := Self.Colors[X, Y];
     
      If (ReplaceColor.red = FillColor2.red) And (ReplaceColor.green = FillColor2.green) And  (ReplaceColor.blue = FillColor2.blue) Then Exit;
     
      stackp := -1;
      PutInStack(X, Y);
      While stackp >= 0 Do Begin
        GetFromStack(X, Y);
        While (X > 0) And ColorInRange(Self.Colors[X - 1, Y], ReplaceColor) Do Dec(X);
        While (X < Self.Width) And ColorInRange(Self.Colors[X, Y], ReplaceColor) Do 
        Begin
          If Y > 0 Then
            If ColorInRange(Self.Colors[X, Y - 1], ReplaceColor) Then  PutInStack(X, Y - 1);
          If Y + 1 < Self.Height Then
            If ColorInRange(Self.Colors[X, Y + 1], ReplaceColor) Then PutInStack(X, Y + 1);
          Self.Colors[X, Y] := FillColor2;
          Inc(X);
        End;
      End;
      SetLength(Stack, 0);
    End;      
     
    End.
    Et maintenant dans ton application

    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
    Uses 
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls
      {$IFNDEF WINDOWS},uCanvasHelper{$ENDIF}; // Notes à placé en dernier ou au moins après l'unité Graphics
     
    Procedure TFBase.FormShow(Sender : TObject);
    Begin
       DoubleBuffered:=True;
     
       Image.Left:=50;
       Image.Top:=50;
       Image.Width:=200;
       Image.Height:=200;
     
       Image.Canvas.Pen.Color:=clRed;
       Image.Canvas.MoveTo(50, 50);
       Image.Canvas.LineTo(50, 150);
       Image.Canvas.LineTo(150, 150);
       Image.Canvas.LineTo(150, 50);
       Image.Canvas.LineTo(50, 50);
       {$IFDEF WINDOWS}
         Image.Canvas.Brush.Color :=  clGreen;
         Image.Canvas.FloodFill(55, 55, clBlack, fsSurface); 
       {$ELSE}
         Image.Canvas.FloodFill(55, 55, clGreen);
       {$ENDIF}
     end; 
     
    Procedure TFBase.PanneauPaint(Sender : TObject);
    Begin
      Panneau.Canvas.Brush.Color :=  clBlack;
      Panneau.Canvas.Clear;
      Panneau.Canvas.Pen.Color:=clRed;
      Panneau.Canvas.MoveTo(50, 50);
      Panneau.Canvas.LineTo(50, 150);
      Panneau.Canvas.LineTo(150, 150);
      Panneau.Canvas.LineTo(150, 50);
      Panneau.Canvas.LineTo(50, 50);
      {$IFDEF WINDOWS}
        Panneau.Canvas.Brush.Color :=  clGreen; 
        Panneau.Canvas.FloodFill(55, 55, clBlack, fsSurface); 
      {$ELSE}
        Panneau.Canvas.FloodFill( 55, 55, clGreen);
      {$ENDIF}
    end;
    Resultat sous Linux :

    Nom : Screenshot_20180511_190911.jpeg
Affichages : 511
Taille : 22,7 Ko

    Voila, qui devrait t'aider un peu.

    EDIT : Je n'y ai pas pensé avant, pour accélerer un peu FloodFill au debut rajoutes Self.Lock et à la fin Self.Unlock
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Begin
      Self.Lock;
      X := X_;
    ...
      Self.Unlock;
      SetLength(Stack, 0);
    End;
    • "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

  13. #53
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Bonjour BeanzMaster .

    Désolé pour le retard de ma réponse. Je n'étais pas revenu sur ce fil, le croyant terminé.

    Merci pour avoir intégré ce code dans une unité et m'avoir montré comment l'intégrer à mon code avec les directives de compilation .
    Il y a juste un petit problème de compilation dû aux références à LCLIntf et FPImage à la fois dans l'interface et dans l'implementation :

    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
     
    .../...
     
    Interface
     
    Uses
      LCLIntf, Classes, SysUtils,  Graphics, FPImage;
     
    .../...
     
    implementation
     
    {$R *.lfm}
     
    uses LCLIntf, FPImage;
     
    .../...
    Quelles références est-il préférable de supprimer : Celles de l'interface ou celles de l' l'implementation?

    Citation Envoyé par BeanzMaster
    pour accélerer un peu FloodFill au debut rajoutes Self.Lock et à la fin Self.Unlock
    C'est fait. Pour mon édification personnelle, que font ces procédures (mis à par que l'une semble être le contraire de l'autre )?

    Amicalement,
    naute.

    Edit :
    J'ai opté dans un premier temps pour la suppression dans l'implementation. J'ai cette erreur à la compil:

    Nom : timage_8.png
Affichages : 947
Taille : 65,2 Ko

    De plus, je ne vois pas ce que { TFBase } vient faire dans le code.

  14. #54
    Membre Expert
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par naute Voir le message
    Bonjour BeanzMaster .

    Désolé pour le retard de ma réponse. Je n'étais pas revenu sur ce fil, le croyant terminé.

    Merci pour avoir intégré ce code dans une unité et m'avoir montré comment l'intégrer à mon code avec les directives de compilation .
    Il y a juste un petit problème de compilation dû aux références à LCLIntf et FPImage à la fois dans l'interface et dans l'implementation :

    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
     
    .../...
     
    Interface
     
    Uses
      LCLIntf, Classes, SysUtils,  Graphics, FPImage;
     
    .../...
     
    implementation
     
    {$R *.lfm}
     
    uses LCLIntf, FPImage;
     
    .../...
    Quelles références est-il préférable de supprimer : Celles de l'interface ou celles de l' l'implementation?



    C'est fait. Pour mon édification personnelle, que font ces procédures (mis à par que l'une semble être le contraire de l'autre )?

    Amicalement,
    naute.

    Edit :
    J'ai opté dans un premier temps pour la suppression dans l'implementation. J'ai cette erreur à la compil:

    Nom : timage_8.png
Affichages : 947
Taille : 65,2 Ko

    De plus, je ne vois pas ce que { TFBase } vient faire dans le code.
    Salut
    supprime simplement {$R *.lfm} un oublis de m'a part

    Le commentaire { TFBase } viens juste du copier coller que j'ai fait.
    Pour les uses supprimes ceux de la partie implementation qui sont deja mis en commentaires

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Interface
     
    Uses
      LCLIntf, Classes, SysUtils,  Graphics, FPImage;
     
    Type TCanvasHelper = Class helper for TCanvas
    public
      Procedure FloodFill( x_, y_: Integer; FillColor: TColor); overload;
    end;
     
    implementation
     
     
    Procedure TCanvasHelper.FloodFill(x_, y_: Integer; FillColor: TColor);
    Désolé c'est une erreur ma part, lors du copier-coller entre le code et ici

    Bon dimanche
    • "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

  15. #55
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Ça fonctionne à merveille.
    J'apprends! beaucoup.

    Bon dimanche également,
    naute.

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. [Lazarus] Migration de Delphi vers Lazarus
    Par PhilLU dans le forum Lazarus
    Réponses: 4
    Dernier message: 18/01/2017, 13h00
  2. Réponses: 1
    Dernier message: 28/08/2013, 16h06
  3. [Lazarus] Transfert de composant de Delphi vers Lazarus
    Par Nandjm dans le forum Lazarus
    Réponses: 3
    Dernier message: 20/07/2011, 10h17
  4. [Lazarus] Portage d'un composant graphique Delphi vers Lazarus
    Par thierryc dans le forum Lazarus
    Réponses: 1
    Dernier message: 24/10/2009, 12h05

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