begin process at 2010 02 10 00:05:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Divers

 > 

Débutant(e)

 > 

Composant : modification graphisme lors de la création


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Composant : modification graphisme lors de la création

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

PtitTrain

Membre Club
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

Membre Club
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 :
  1. Il n'y a pas de Paint dans le constructeur (Paint est appelé lors du message WM_PAINT)
  2. Paint() comme son nom l'indique, est une méthode de ... dessin !
  3. Donc pas d'évènement de souris dessus !
Par contre, ce que tu peux faire c'est :
  1. Surcharger Mousedown, MouseMove et MouseUp qui sont des procédures protégées de TControl
  2. Dedans, tu gères les déplacements de la souris et tu mémorise les mouvements faits par l'utilisateur
  3. Après, lorsque le bouton gauche est relaché (appel de MosueUp avec Button = mbLeft) tu déclenche un redessin de ton compo => Invalidate
  4. 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

Membre Club
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

Membre Club
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

Membre Club
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

Membre Club
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

Membre Club
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

Membre Club
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

Membre Club
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

1 2

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


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,390 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales