Bonjour à tous,
J'aimerais déplacer un TGlyph avec la souris.
Le glyph est un PNG avec des zones transparentes.
J'aimerais déplacer le TGlyph uniquement si il clique dans une zone non transparente.
Votre aide est la bienvenue,
A+
Bonjour à tous,
J'aimerais déplacer un TGlyph avec la souris.
Le glyph est un PNG avec des zones transparentes.
J'aimerais déplacer le TGlyph uniquement si il clique dans une zone non transparente.
Votre aide est la bienvenue,
A+
Et où se situe la difficulté ? Quel point achoppe ? Où bloquent vos tests ? Quelles pistes avez-vous explorées ?
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 !
Salut,
J'utilise un TImageList avec comme fichier une image PNG avec des zones transparentes.
J'utilise également un TGlyph avec dans la propriété "images"le TImageList ci-dessus.
Et un "0" pour la propriété "ImageIndex" du glyph.
Le problème c'est que je ne veux pas que l'évenement OnMouseDown fonctionne si on clique sur une zone transparente (dans un TGlyph).
Merci à vous,
A+
Bonjour,
Déjà, cela veut dire que vous avez réussi à coder évènement onmousedown ou équivalent. Question que vous avez posée ici il serait de bon aloi d'indiquer que celle-ci est résolue (le bouton ) voire ne pas rechigner à mettre un d'encouragement à ma réponse pour signaler que celle-ci vous a aidé.
Et, tant qu'à faire de confirmer que vous utilisez Rio et FMX
Il serait également de bon ton de nous indiquer ce que vous avez déjà codé dans ce fameux évènement
Maintenant, la question que je vous pose est : pourquoi utiliser un TGlyph + un TImageList ?
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 type THackGlyph = Class(TGlyph); TForm5 = class(TForm) .... procedure FormCreate(Sender: TObject); private { Déclarations privées } procedure GlyphOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); ..... var Form5: TForm5; implementation procedure TForm5.FormCreate(Sender: TObject); begin THackGlyph(glyph1).HitTest:=true; glyph1.OnMouseDown:=GlyphOnMouseDown; end; procedure TForm5.GlyphOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); var bdata : TBitmapData; Color : TAlphaColor; begin Glyph1.MakeScreenShot.Map(TMapAccess.maRead,BData); Color:=BData.GetPixel(Trunc(x),Trunc(y)); if Color<>TAlphaColors.Null then Showmessage(Format('x=%3.f y=%3.f Color %x',[x,y,Color])); end;
1 - Vous êtes obligé de passer par un "hacking ou helper" pour accéder à des propriétés privées de TGlyph pour cativer le hittest et mettre en place le(s) évènement(s) nécessaire(s) , alors que TImage n'en a pas besoin.
2 - Vous ajoutez un TImageList alors que TImage est propriétaire d'un TMultirResbitmap qui est un équivalent amélioré
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Bonjour,
ce serait également sympa de dire si les réponses que l'on t'a apportées ici t'ont aidé et si ton problème de texture est résolu.
ça ferait plaisir à ceux qui veulent t'aider !
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
Merci pour vos deux précédants tutoriaux (texture colorée et événement OnClick). Merci à Charly910 pour son programme.
Cependant l'événement OnMouesDown ne doit fonctionner uniquement si on clique dans une zone non transparent de mon Glyph (PNG transparent).
Merci à vous,
A+
Bonjour,
Je pense que Serge a bien compris la demande et y a répondu avec plus qu'un début de piste.
Ce dont j'ai du mal à être sûr, c'est si vous cherchez à coder avec l'aide des autres ou si vous attendez qu'ils codent pour vous ?
En reprenant le code de Serge, au lieu d'afficher un message si le pixel du TGlyph n'est pas transparent, il faut débuter le mouvement en permettant de changer ses coordonnées dans le OnMouseMove, permission qu'on suspendra lors du OnMouseUp. Il y a certainement des discussions en traitant sur le forum pour vous orienter si l'implémentation pose problème, ou bien il sera temps de revenir poser ici une question.
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 !
Bonsoir,
Effectivement j'avais très bien compris la demande mais j'estime que fournir du code tout prêt n'est pas une façon d'apprendre.
Le plus difficile je l'ai, je pense, dégagé*: le message ne s'affiche que si le pixel du glyphe n'est pas transparent, à vous de faire le bloc de déplacement.
ce ne sont pas des tutoriels (en écrire est un processus beaucoup plus long) mais de simples réponses.Merci pour vos deux précédants tutoriaux (texture colorée et événement OnClick).
[Edit 13/01/2019]
En parlant de tutoriels, si vous lisez celui-ci chapitre III-B-1 vous y lirez le moyen précis de faire en sorte que votre glyphe se déplace, vous pourrez même largement le simplifier puisque vous pourrez utiliser l'image du TGlpyh (donc pas besoin d'un bitmap intermédiaire comme dans le code présenté)
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager