Accueil > Forum > > > > Composant : modification graphisme lors de la création
Composant : modification graphisme lors de la création
vendredi 25 avril 2008 à 15:58:07 |
Composant : modification graphisme lors de la création

PtitTrain
|
Bonjour à tous ! Dans mon apprentissage de la conception de composants, l'un de mes premiers composants est très primaire et il fonctionne très bien : dérivé de TGraphicControl, je surcharge paint pour qu'elle me dessine un simple bout de ligne horizontale => canvas.LineTo(Width,Height div 2) avec le PenWidth et le BrushColor que je veux ;
Je voudrais le sophistiquer un peu : lorsque l'utilisateur-programmeur le glisse sur une form, je voudrais, un peu comme les logiciels de dessin vectoriel, qu'il puisse (sur un événement souris p.ex.) continuer la création de son segment en changeant la direction de la suite du segment. Lorsqu'il estimerait que son composant-segment est assez long, un "OnMouseUp" (p.ex.) signifierait à la méthode Paint (et au create) qu'il a fini d'installer son composant "segment à chevron" sur sa form. Je patine là-dessus et n'arrive pas à trouver le truc.. En fait, donc, comment rendre le paint du constructeur sensible à des événements - souris.. Quelqu'un peut-il me venir en aide ? !.. un grand merci d'avance ! JJT
|
|
samedi 26 avril 2008 à 14:21:40 |
Re : Composant : modification graphisme lors de la création

florenth
|
Réponse acceptée !
Salut ! Te revoila avec ta commande de chemins de fer !  J'ai bien compris ta question mais je ne peux pas t'y répondre directement car une de tes phrase me ... comment dire... choque ! "paint du constructeur sensible à des événements - souris" => ça ressemble à du méli-mélo de mots compliqués ! car : - Il n'y a pas de Paint dans le constructeur (Paint est appelé lors du message WM_PAINT)
- Paint() comme son nom l'indique, est une méthode de ... dessin !
- Donc pas d'évènement de souris dessus !
Par contre, ce que tu peux faire c'est : - Surcharger Mousedown, MouseMove et MouseUp qui sont des procédures protégées de TControl
- Dedans, tu gères les déplacements de la souris et tu mémorise les mouvements faits par l'utilisateur
- Après, lorsque le bouton gauche est relaché (appel de MosueUp avec Button = mbLeft) tu déclenche un redessin de ton compo => Invalidate
- Dans ta procédure Paint, tu dessines selon les données que tu auras enregistré dans les procédures MouseXXX.
ça va mieux maintenant ? Allez, je te laisse méditer ... !  A+ Flo Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]
|
|
samedi 26 avril 2008 à 16:32:50 |
Re : Composant : modification graphisme lors de la création

PtitTrain
|
Bonjour et un grand merci préalable pour ta réponse.
Oui, c'est à nouveau moi, avec mon "p'tit train"... tu vois, je suis tenace (en qualité de rouergat, presque plus, je pense, que mes amis auvergnats) !.. (et Delphi me plait de + en +..) et je vois aussi que tu as bonne mémoire !. D'abord mes excuses d'avoir été aussi "rapide" dans mon propos. Ce n'était pas dans mon intention de confondre Paint et le Constructeur car ça, je pense que j'ai pigé depuis le mois dernier. En revanche, j'ai un grand besoin de méditer ce que tu dis de la méthode paint "..donc pas d'évènement de souris dessus !.." . Le reste, (surcharge des événements Mouse et déclenchement du redessin) pas de pb. En revanche aussi, il faut que je médite à l'interaction, dans Paint, données enregistrées <-> procédures Mouse.XX, j'ai besoin de l'approfondir. Je vais y consacrer mon dimanche, et, si tu le veux bien, je te donnerai des nouvelles demain soir ou lundi de mes progrès (j'espère !.). Grazie Mille !... JJT
|
|
samedi 26 avril 2008 à 18:16:41 |
Re : Composant : modification graphisme lors de la création

florenth
|
Réponse acceptée !
Ouf ! Tu me rassures ! Oui, j'ai une bonne mémoire, mais tu sais, des gens qui posent des questions de composants, ça coure pas les rues sur Delphifr. En ce moment, c'est plutôt des questions de débutants et de personnes qui cherchent à faire quelque chose au dessus de leurs moyens. Pour te mettre sur la voie, tu peux commencer par permettre à l'utilisateur à bouger un point du dessin. Petit exemple: TMyCompo = class(...) private [...] FPos2ndPoint: TPoint; // initialisé automatiquement à (0, 0) par le constructeur [...] protected procedure MouseDown(Button: TMousebutton; Shift: TShiftstate; X, Y: Integer); override; procedure Paint; override; [...]
end;
[...]
procedure TMyCompo.MouseDown(Button: TMousebutton; Shift: TShiftstate; X, Y: Integer); begin FPos2ndPoint := Point(X, Y); // stockage ici. Invalidate; inherited; end;
procedure TMyCompo.Paint; begin Canvas.MoveTo(ClientWidth div 2, ClientHeight div 2); Canvas.LineTo(FPos2ndPoint.X, FPos2ndPoint.Y); // et utilisation là. end;
Voila, ça devrait te donner quelques idées. ++ Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]
|
|
dimanche 27 avril 2008 à 11:13:16 |
Re : Composant : modification graphisme lors de la création

PtitTrain
|
Merci pour la "courte échelle" qui me permet de mettre bien au clair dans mon esprit la question du traitement des surcharges des procédures protégées de TControl de "Mousedown etc..". J'ai donc repris une nouvelle version de mon composant dans ce sens mais, ce que je "subodorais" se produit : ce traitement est conçu à l'intention de l'utilisateur de l'application, c.a.d. le 3ème intervenant... (de plus, comble de malchance, lorsqu'il fait son LineTo, le Invalidate lui efface son premier MoveTo..).
Mon souhait était que ce 2ème segment ( LineTo (FPos2ndPoint.X, FPos2ndPoint.Y); ) soit dessiné par le 2ème homme selon son souhait (même un 3ème segment si ça lui chante) , celui qui installe le composant sur la form !.. C'est ce que je souhaitais - très maladroitement - te dire en faisant allusion au Create..
Et pour ça, je patine dans la semoule.. (comment faire pour que le n+1 ième segment n'efface pas le nième, surtout lorsque le concepteur du composant ne sait pas à l'avance combien le créateur de la form voudra en mettre à la queue-leu-leu !.). Bon dimanche ! (et encore un grand merci pour l'aide au débutant) JJT Question annexe mais primordiale pour moi, débutant, y-a-t-il une sémantique "autorisée" pour qualifier le 1er homme (concepteur de composant), le 2ème (programmeur de l'application) et le 3ème (utilisateur final) car dans les bouquins, les auteurs mélangent joyeusement tout celà si bien qu'on s'y perd...
|
|
dimanche 27 avril 2008 à 11:34:03 |
Re : Composant : modification graphisme lors de la création

florenth
|
Réponse acceptée !
Pour l'histoire de vocabulaire, rien de très précis mais tu peux toujours dire (et tout le monde comprendra) :
- moi, pour le concepteur du composant (puisque c'est toi et pas ton voisin)
- le développeur, ou programmeur pour celui qui pose le compo sur la fiche (il se peut que ce soit la même personne que "moi")
- l'utilisateur (final)
Pour ton problème, tu voudrais que le développeur dessine lui même les segments ?
Si c'est à cela que tu fais allusion, c'est en effet pas si simple que ça (mais rien d'impossible), il faut tester ceci : "ComponentState = csDesigning"
Sinon, pour dessiner plusieurs segments, c'est simple, il suffit d'en faire un tableau dynamique et de TOUS les redessiner lors de Paint().
J'ai peut être quelque chose pour toi, je regarde ça d'ici peu.
|
|
dimanche 27 avril 2008 à 11:54:57 |
Re : Composant : modification graphisme lors de la création
|
dimanche 27 avril 2008 à 11:55:24 |
Re : Composant : modification graphisme lors de la création

PtitTrain
|
En me reportant à mon vieux bouquin Référence de la bibliothèque des composants visuels (Delphi 1), je vois que la propriété CompoentState est en lecture seule... Je ne l'ai jamais vue employée dans mes bouquins et donc pas d'exemple.. J'attendrai donc ce que tu me dis dans ta dernière ligne avec beaucoup d'espoir !.. Par ailleurs, je vais potasser les tableaux dynamiques que (je l'avoue) je n'ai jamais eu l'opportunité, encore, de regarder (je ne doute pas que ce soit très intéressant puisque nouveau pour moi !..) J'en découvre, en ce moment, des notions nouvelles ! merci de m'y avoir entraîné.. JJT
|
|
dimanche 27 avril 2008 à 13:58:27 |
Re : Composant : modification graphisme lors de la création

florenth
|
Réponse acceptée !
Ah oui, les tableaux dynmaiques !
Très très important !
Profite en pour te prélasser parce qu'après, ça va barder... en effet, je viens de retrouver mon code que je cherchais et ce que tu cherches à faire est affreusement compliqué à mettre en place.
Néanmoins, une fois mis en place, c'est super simple à utiliser.
=> Le malaise du développeur du composant se retrouve bonheur pour l'utilisateur du composant !
CompoentState est bien en lecture seule, c'est Delphi qui se charge de la modifier.
if csDesigning in ComponentState then [...] te permet de faire exécuter du code uniquement dans l'éditeur de Delphi.
En attendant, ton bouquin est sûrement obsolète, la gestion du design-time a été profondément modifiée avec Delphi6.
Voila tout pour aujourd'hui.
Bon dimanche !
|
|
dimanche 27 avril 2008 à 15:54:24 |
Re : Composant : modification graphisme lors de la création

florenth
|
Réponse acceptée !
Finalement, j'ai eu le temps de commenter et de poster.
Voila donc ta courte-échelle : http://www.delphifr.com/codes/PERSONALISATION-COMPOSANT-DESIGN-TIME-GRACE-EVENEMENTS-SOURIS_46485.aspx
|
|
Cette discussion est classée dans : composant, création, modification, paint, segment
Répondre à ce message
Sujets en rapport avec ce message
Création dynamique de composant [ par Amadeus ]
Comment créer dynamique des contrôle TImage ?Je voudrais créer sur une Form autant de TImage que d'image se trouvant dans un répertoire donné. Comment
Création de composant [ par themaste ]
Slt a tous!Voila, j'aimerais créer mon propore composant.En fait, je pense partir du speed button, pour le modifier afin d'obtenir comme fond, une ima
Création d'un composant [ par cedkat ]
bonjour,Je desire faire apparaitre une liste déroulante dans l'inspecteur d'objet de mon composantje suis sous delphi6Mercimailto:
Création de composant [ par Chong ]
Tout d'abord Merci beaucoup pour ceux qui m'ont répondu...je ne les nommerai pas discrétion.Voilà les mecs (frapading!), j'ai un autre soucciDans le b
Création de composant à l'exécution [ par birdyz ]
Bonjour à tousLors de l'exécution de mon prog, je doit créer X composant Tedit sur une forme. Suis je obligé de déclaré X fois Edit1, Edit2, ..., ou p
Création de composant [ par cuicui ]
Bonjour a tous,J'ai un petit pb au nivo création des composants.Alors voila;j'ai crée mon propre composant ControlBar héritant de TControlBar. Je voud
Création composant de classe TCheckListBox [ par yvessimon ]
Je souhaite réaliser un composant du type TCheckListBoxmais avec 5 lignes de texte initialiser et sélectionnées lors de la création.J'arrive à créer
Création dynamique de composant. [ par Filipe35 ]
bonsoir à tous,etait-il possible de créer à la voléé des composants (ClientSocket dans mon cas). ?Exemple,Avec ce code:Création
Création de composant [ par jadsof ]
Bonjour, J'ai crée un composant que je pose sur une fiche. J'aimerais pouvoir lorsque je pose un control sur mon composant, lui affecter comme p
Création Composant [ par kinay ]
Je souhaite créer un composant qui est un ComboBox mais qui affiche un TMonthCalendar lorsque l'on clicque dessus, celui-ci s'affiche dans l'événement
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|