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
L'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIESL'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIES par odewit
La tendance est aux interfaces naturelles (NUI), et le keynote de Bill Buxton au MIX l'a bien souligné.
La charte graphique et ergonomique de Windows Phone 7 a donc été entièrement repensée en vue d'obtenir un maximum d'efficacité sur ce point. En re...
Cliquez pour lire la suite de l'article par odewit COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson
Forum
QREPORT QREPORT par lounnaci
Cliquez pour lire la suite par lounnaci
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|