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

Langage Delphi Discussion :

Moyen le plus efficace de dessiner un trait


Sujet :

Langage Delphi

  1. #1
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut Moyen le plus efficace de dessiner un trait
    entre un TPoint(x,y) et un second TPoint(x2,y2), d'après votre expérience ?

    Avec un TShape y'a la notion d'angle qui est un peu contraignante, les lignes ne sont pas très "souples" dans leur positionnement (faut faire un MIX entre position / hauteur / largeur du TShape et l'angle...) c'est bien moins simple que coordsDepart -> coordsFin...).

    Un bon vieux line(x,y,x2,y2) comme en basic serait top mais... basic is not good for you, c'est bien connu.

    Merci.

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 291
    Points : 1 942
    Points
    1 942
    Par défaut
    As-tu essayé les méthodes MoveTo et LineTo du Canvas?

  3. #3
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par Linkin Voir le message
    As-tu essayé les méthodes MoveTo et LineTo du Canvas?
    Non, merci du tuyau ! D'ailleurs, je n'ai pas encore intégré la notion de canvas... jamais utilisé. Même en français "canevas" je sais pas ce que c'est

    Je viens de matter "canvas" dans l'aide, ça s'applique à graphicControl entre autre, tu penses que c'est une bonne solution ? Creer dynamique des graphiccontroldans mon code, puis utilise le lineTo du canvas ?

    Merci.

  4. #4
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par Linkin Voir le message
    As-tu essayé les méthodes MoveTo et LineTo du Canvas?
    je viens d'essayer ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TMainForm.FormCreate(Sender: TObject);
    begin
      canvas.Brush.Color:=clBlack;
      canvas.moveTo(100,100);
      canvas.LineTo(150,150);
    end;
    ça donne rien... mais y'a un panel sur ma form... je pense que le canvas est derrière la panel... ennui : panel1.canvas ne marche pas...

  5. #5
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 291
    Points : 1 942
    Points
    1 942
    Par défaut
    J'avoue que ce que tu veux faire est un peu flou.

    Je t'ai juste donné une piste pour tracer une droite. Après si tu as plusieurs droites, si tes objets doivent bouger etc ... je ne sais pas trop.

    Il y a eu une grande discussion avec exemples, je ne la retrouve plus, mais je mets un projet qui doit en être tiré
    Fichiers attachés Fichiers attachés

  6. #6
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 291
    Points : 1 942
    Points
    1 942
    Par défaut
    Oui le TPanel n'a pas de Canvas public, tu peux utiliser un TPaintBox.

  7. #7
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 291
    Points : 1 942
    Points
    1 942
    Par défaut
    voilà j'ai retrouvé le fichier, mais pas la discussion, c'est une amélioration du projet précédent.
    Fichiers attachés Fichiers attachés

  8. #8
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par Linkin Voir le message
    Oui le TPanel n'a pas de Canvas public, tu peux utiliser un TPaintBox.
    Je peux donc créer un objet de la classe TPaintBox qui sera sur le panel et non sur la form ?

    Je vais essayer...

  9. #9
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 291
    Points : 1 942
    Points
    1 942
    Par défaut
    Je regarde les fichiers que j'ai mis en pièces jointes, tu pourras trouver des idées intéressantes.

  10. #10
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par Linkin Voir le message
    Oui le TPanel n'a pas de Canvas public, tu peux utiliser un TPaintBox.
    j'ai essayé ça, ça compile bien mais ça n'affiche rien:

    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
     
     
    // dans les declaration du mainform...
      public
        listeTraitsSites : TObjectList;
    // fin extrait declarations
     
    procedure TMainForm.FormCreate(Sender: TObject);
    begin
     
      // tentative de dessiner des traits facilement...
      listeTraitsSites:=TObjectList.create;
      listeTraitsSites.OwnsObjects:=true;
      listeTraitsSites.add(TPaintBox.Create(mainForm));
      TpaintBox(listeTraitsSites[0]).Parent:=panel1;
      TpaintBox(listeTraitsSites[0]).left:=200;
      TpaintBox(listeTraitsSites[0]).top:=200;
      TpaintBox(listeTraitsSites[0]).canvas.Brush.Color:=clBlack;
      TpaintBox(listeTraitsSites[0]).canvas.moveTo(100,100);
      TpaintBox(listeTraitsSites[0]).canvas.LineTo(150,150);
     
    end;

  11. #11
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par Linkin Voir le message
    Je regarde les fichiers que j'ai mis en pièces jointes, tu pourras trouver des idées intéressantes.
    j'ai vu ton fichier, merci, très interessant d'un point de vue fonctions graphiques, mais ça m'aide pas plus pour le pb d'affichage du canvas sur ma form//mon panel...

    voir avant dernier message avec code tenté...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Points : 646
    Points
    646
    Par défaut
    C'est normal que rien ne s'affiche, tu dois placer tout le code de dessin dans l'évenement OnPaint de ta TPaintBox.

    Le mieux serait de "dessiner" dans un TBitmap et de l'afficher dans le OnPaint de la TPaintBox.

    Un exemple http://www.phidels.com/php/index.php...zip.php3&id=46

  13. #13
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 291
    Points : 1 942
    Points
    1 942
    Par défaut
    Roh, un petit coup de F1 sur LineTo

    C'est la couleur de Pen et pas celle de Brush qui est utilisée

  14. #14
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par Linkin Voir le message
    Roh, un petit coup de F1 sur LineTo

    C'est la couleur de Pen et pas celle de Brush qui est utilisée
    oui, ... j'avais déjà rectifié.

  15. #15
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par exoseven Voir le message
    C'est normal que rien ne s'affiche, tu dois placer tout le code de dessin dans l'évenement OnPaint de ta TPaintBox.

    Le mieux serait de "dessiner" dans un TBitmap et de l'afficher dans le OnPaint de la TPaintBox.

    Un exemple http://www.phidels.com/php/index.php...zip.php3&id=46
    Mais je n'ai pas de composant TPaintBox dans les divers onlglets d'outils pour le coller dans le form... c'est quoi ce binz ?

    add-on: de plus, moi j'ai un tableau de timage dynamique... comment ça peut marcher via un TPaintBox ?

    si je le pouvais, je créerais un TPaintbox dans mon panel, puis au lieu de [ImageCréée].parent:=panel1 je ferais [imageCréée].parent:=lePaintBox... mais bon, je vois pas comment créer un PaintBox dans ma liste d'outils...

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Points : 646
    Points
    646
    Par défaut
    de toute façon tu n'as pas réellement besoin d'une TPaintBox, tu dessines dans le canvas d'un TBitmap que tu affiches dans un TImage

  17. #17
    Membre habitué Avatar de phplive
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 179
    Points : 150
    Points
    150
    Par défaut
    Bjr

    Sous Delphi un canevas est une sorte d'espace ou de page en mémoire sur laquelle tu dessines : selon le périphérique vers lequel il est rattaché un canevas correspondra à l'image sur l'écran, à une page d'une imprimante etc...

    Mais tu ne peux pas dessiner dedans n'importe comment ni n'importe quand !

    Si tu t'intéresses à tout ce qui est graphique tu devrais d'abord apprendre comment fonctionne Windows pour tout ce qui concerne "l'affichage" et plus exactement le message WM_PAINT : bref lire dans la SDK Win32 tout ce qui correspond à Painting & Drawing ...

    Et c'est pas intuitif du tout ! Faut bien comprendre que l'affichage n'est pas prioritaire autrement le PC passerait son temps à gèrer uniquement l'affichage !

    Pour ton histoire deTPaintBox tu dois dessiner dans l'événement OnPaint.
    Autre solution surcharger le méthode Paint en dérivant l'objet TPaintBox ou encore directement le message WM_PAINT (déconseillé)

  18. #18
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par phplive Voir le message
    Bjr

    Sous Delphi un canevas est une sorte d'espace ou de page en mémoire sur laquelle tu dessines : selon le périphérique vers lequel il est rattaché un canevas correspondra à l'image sur l'écran, à une page d'une imprimante etc...

    Mais tu ne peux pas dessiner dedans n'importe comment ni n'importe quand !

    Si tu t'intéresses à tout ce qui est graphique tu devrais d'abord apprendre comment fonctionne Windows pour tout ce qui concerne "l'affichage" et plus exactement le message WM_PAINT : bref lire dans la SDK Win32 tout ce qui correspond à Painting & Drawing ...

    Et c'est pas intuitif du tout ! Faut bien comprendre que l'affichage n'est pas prioritaire autrement le PC passerait son temps à gèrer uniquement l'affichage !

    Pour ton histoire deTPaintBox tu dois dessiner dans l'événement OnPaint.
    Autre solution surcharger le méthode Paint en dérivant l'objet TPaintBox ou encore directement le message WM_PAINT (déconseillé)
    mais je n'ai PAS de TPaintBox !

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Points : 646
    Points
    646
    Par défaut
    mais tu n'en as pas besoin

    cré un bitmap et utilises son canvas pour dessiner, ensuite balance ton bitmap dans un TImage pour l'afficher, TPaintBox se trouve sur l'onglet system dans D7

  20. #20
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par exoseven Voir le message
    mais tu n'en as pas besoin

    cré un bitmap et utilises son canvas pour dessiner, ensuite balance ton bitmap dans un TImage pour l'afficher, TPaintBox se trouve sur l'onglet system dans D7
    bon ben j'ai collé un TImage sur mon panel, puis juste fait ça dans le FormCreate, ça marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      // tentative de dessiner des traits facilement...
      with Image1 do
      begin
        canvas.pen.width := 2;
        canvas.pen.color := clblack;
        canvas.moveTo(0,0);
        canvas.LineTo(20,20);
        visible:=true;
      end;
    pas besoin d'aller trifouiller dans ONPAINT... bizarre non ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Ajouter dans listbox - un moyen plus efficace
    Par AT dans le forum Débuter
    Réponses: 9
    Dernier message: 24/01/2015, 07h04
  2. Réponses: 1
    Dernier message: 27/03/2007, 18h22
  3. Réponses: 1
    Dernier message: 11/05/2006, 16h23
  4. l'indexation la plus efficace
    Par amika dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/02/2006, 16h24
  5. [FLASH MX2004] Dessins de traits en actionscript
    Par l'architecte dans le forum Flash
    Réponses: 2
    Dernier message: 28/07/2004, 13h57

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