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

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

 Delphi Discussion :

curseur paintbox en ligne


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 211
    Points : 55
    Points
    55
    Par défaut curseur paintbox en ligne
    Bonjour
    sur ma fiche jai un paintbox et je voudrais remplacer le curseur de
    la souris par 2 lignes qui se croisent au curseur
    comme logiciel de dessin autocad
    la solution serait de dessiner une ligne et de l effacer avec
    la methode lineto et Pmxor mais je ne sais pas comment savoir quand je
    rentre dans mon paintbox les coordonnees
    ideal serait d avoir une methode OnEnter et OnExit
    Merci avance pour votre aide

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Salut,

    Il y a la propriété Cursor de ton PaintBox qui peut t'intéresser, si j'ai bien compris ton attente, en particulier le curseur crCross.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 211
    Points : 55
    Points
    55
    Par défaut curseur tpaintbox souris
    Bonjour
    curseur cross je connait
    je voudrais avoir la meme chose avec les deux lignes du curseur
    qui vont dun bord a lautre paintbox
    pour que les lignes passe devant ma regle
    ________________________________________________________________

    Merci

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Ok. Désolé, je ne connais AutoCad que de nom.

    Tu dois pouvoir t'en sortir en traçant/effaçant à la main à partir de l'évènement OnMouseMove qui te donne par la même occasion les coordonnées de ton curseur. Tu peux considérer que tu sors de ta PaintBox quand tu atteints les limites du Composant, et donc effacer à ce moment les lignes.

    Il y a peut-être une autre solution plus propre, mais ça ne me dit rien.

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour,

    je pense qu'il faut te créer ton curseur sous forme Bmp, puis l'intégrer dans ton programme sous forme de ressource dans le fichier .res

    Voici un extrait de l'aide de l'exemple de la propriété "Cursor" :

    Cet exemple illustre la manière d'ajouter des curseurs personnalisés à une application. Il suppose qu'un curseur personnalisé de nom NewCursor a été ajouté au fichier ressource (fichier .RES) de l'application. Vous pouvez ajouter le curseur en utilisant l'éditeur d'image. (Outils | Editeur d'image)
    Le code suivant rend ce curseur disponible dans l'application via la constante crMyCursor, et en fait le curseur global de l'application.

    const

    crMyCursor = 5;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Screen.Cursors[crMyCursor] := LoadCursor(HInstance, 'NewCursor');
    Cursor := crMyCursor;
    end;
    Tu peux donc intégrer le curseur que tu veux à condition de le dessiner ou de le récupérer dans un autre fichier ressource de Windows

    A+

    Charly

  6. #6
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    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 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Je pense plutôt qu'il veut faire quelque chose du genre:

    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
     
         vOldX,vOldY:Integer;
        vFirstCrossDraw:Boolean;
     
    procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
      procedure DrawCross(ax,ay : integer);
      begin
        (Sender as TPaintBox).Canvas.Pen.Color  := clGreen;
        (Sender as TPaintBox).Canvas.Pen.Style  := psSolid;
        (Sender as TPaintBox).Canvas.Pen.Mode   := pmNotXor;
        (Sender as TPaintBox).Canvas.Pen.Width  := 1;
     
        (Sender as TPaintBox).Canvas.MoveTo(ax,(Sender as TPaintBox).ClientRect.Top );
        (Sender as TPaintBox).Canvas.LineTo(ax,(Sender as TPaintBox).ClientRect.Bottom);
     
        (Sender as TPaintBox).Canvas.MoveTo((Sender as TPaintBox).ClientRect.Left ,ay);
        (Sender as TPaintBox).Canvas.LineTo((Sender as TPaintBox).ClientRect.Right,ay);
      end;
    begin;
      if Application.Active then
      begin
        if PtInRect((Sender as TPaintBox).ClientRect, Point(X,Y)) then
        begin
          if not((vOldX=0) and (vOldY=0)) then
          begin
            if vFirstCrossDraw then
              vFirstCrossDraw := False
            else
              DrawCross(vOldX,vOldY);
            DrawCross(x,y);
          end
          else
            vFirstCrossDraw:=True;
          vOldX:=x;
          vOldY:=y;
        end
        else
        begin
          if (vOldX <>0) and (vOldY <>0) then
          begin
            DrawCross(vOldX,vOldY);
              vOldX := 0;
              vOldY := 0;
     
          end;
        end;
      end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      vOldX := 0;
      vOldY := 0;
    end;
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  7. #7
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Effectivement,

    mea culpa

    je n'avais pas bien lu la question

    il faut dessiner les lignes à la croisée du hot spot du curseur ...

    Charly

  8. #8
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    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 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Mais l'idée du curseur personnalisé est aussi adaptée. Il faut utiliser les deux techniques pour le résultat qu'il veut
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  9. #9
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    oui pour les curseurs persos : AWicons (super!)
    et Res_HiA pour la création du fichier ressource.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 211
    Points : 55
    Points
    55
    Par défaut curseur
    Bonjour
    et merci de vos reponses
    cetait bien 2 lignes qui se croise au niveau du curseur que
    je voulais
    sa marche bien quand il a rien de dessiner dans le paintbox
    mais moi jai une procedure qui affiche un bitmap sur le fond
    et quand je resize ma forme et que je reviens dans paintbox il
    ne mefface pas la derniere croix
    que faire ?
    Merci

  11. #11
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    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 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Lorsque tu resizes ta form, la paintbox changes donc de dimension ou est cachée, si j'ai bien compris.

    Si la paintbox change de dimension, mettre vFirstCrossDraw à True dans le resize peut fonctionner.

    Par contre dans le cas où une partie de la paintbox est cachée, c'est plus compliqué, il faut faire un xor uniquement sur l'ancienne croix,c'est à dire celle affichée, pas celle calculée: en effet la partie non affichée de la paintbox n'est pas peinte, et pour ça je n'ai pas de solution.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  12. #12
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Avec copymode. tu dessine tes lignes dans un premier bitmap, tu le copies à chaque fois dans une version vierge de ton bitmap de fond et tu fais un draw dans ton paintbox.

  13. #13
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    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 288
    Points : 1 936
    Points
    1 936
    Par défaut
    C'est méthode est bien meilleure que la mienne (qui était appliquée à un TChart, à la base)!!
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 211
    Points : 55
    Points
    55
    Par défaut paintbox curseur
    Bonjour
    merci de vos reponses
    sa va deja mieux a part des fois ou les lignes
    sont encore presentent mais des que je clique sa
    disparait
    verrai plus tard pour affiner
    par contre je penser creer une methode Onenter et Onexit
    Peut ton surcharger ces methode au Paintbox et comment
    Merci

Discussions similaires

  1. Réponses: 21
    Dernier message: 24/06/2014, 12h28
  2. [WD-2003] Connaitre en VBA la position du curseur sur une ligne
    Par electrosat03 dans le forum VBA Word
    Réponses: 1
    Dernier message: 20/04/2010, 11h08
  3. Réponses: 2
    Dernier message: 14/09/2007, 13h19
  4. [win32][D5] - position curseur dans paintbox
    Par bregolhen dans le forum Composants VCL
    Réponses: 3
    Dernier message: 05/11/2005, 23h45
  5. Réponses: 4
    Dernier message: 21/05/2004, 09h13

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