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

Composants FMX Delphi Discussion :

Refresh d'un TPanel


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Refresh d'un TPanel
    Bonjour,

    j'essaie de dessiner à main levée sur un TPanel :

    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
     
    var
      Form1: TForm1;
      Brush : TStrokeBrush;
      MousePos : TPointF;
      bFlagDraw : Boolean;
    [...]
    procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Single);
    begin
      bFlagDraw := False;
    end;
     
     
    procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Single);
    var
      MouseService: IFMXMouseService;
    begin
      bFlagDraw := False;
      with Canvas do
      begin
        if TPlatformServices.Current.SupportsPlatformService(IFMXMouseService, IInterface(MouseService)) then
        begin
          //On initialise la position de la souris
         MousePos := MouseService.GetMousePos;
         bFlagDraw := True;
        end;
     
      end;
    end;
     
    procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Single);
    var
      MouseService: IFMXMouseService;
    begin
      if ssLeft	in Shift then
      begin
        if bFlagDraw then
        begin
          Brush := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.Black);
          Brush.Thickness:= 2;
          if TPlatformServices.Current.SupportsPlatformService(IFMXMouseService, IInterface(MouseService)) then
          begin
            with Canvas do
            begin
              BeginScene;
              DrawLine(MousePos, MouseService.GetMousePos, 1, Brush);
              EndScene;
              //On réinitialise la position de la souris
              MousePos := MouseService.GetMousePos;
            end;
          end;
        end;
      end
      else
        if bFlagDraw then  bFlagDraw := false;
     end;
    Je vois le dessin apparaître quand le TPanel perd le focus. Je ne vois pas où est le problème. Une suggestion peut-être ?
    Merci. Gilles

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 938
    Billets dans le blog
    6
    Par défaut
    Ce code fonctionne sous D 10.1 Berlin sous W7, à l'exception du décalage des coordonnées du trait par rapport au pointeur de souris... Il dessine bien en direct, mais le décalage semble dû à la position de la fiche sur l'écran.
    Nom : panel.jpg
Affichages : 476
Taille : 16,6 Ko
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    je suis en XE7. Là est peut-être le problème. En tout cas merci pour le test.
    Gilles

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 938
    Billets dans le blog
    6
    Par défaut
    Décalage résolu avec DrawLine(ScreenToClient(MousePos), ScreenToClient(NewMousePos), 1, Brush);
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci.
    testé : impeccable. Merci.
    J'ai trouvé que c'est le transparency de la Tform qui pose un problème avec le repaint du Tpanel. J'essaye des combinaisons notamment l'utilisation de OnPaint pour le régler.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 658
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    je sais que c'est un peu tard, mais je viens de voir un peu par hasard cette vidéo
    qui pourrait peut-être t'intéresser.

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

Discussions similaires

  1. [DLL] Afficher le contenu d'une dll dans un Tpanel
    Par Fabs dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/08/2007, 14h30
  2. Bug du refresh sur un TPanel
    Par JC-LGMS dans le forum Delphi
    Réponses: 14
    Dernier message: 20/06/2006, 13h30
  3. Réponses: 2
    Dernier message: 23/12/2002, 20h34
  4. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38
  5. [c++ builder] creation de surface sur TPanel
    Par JEG dans le forum DirectX
    Réponses: 7
    Dernier message: 23/09/2002, 22h41

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