
glt0732
|
Voila j'ai un gros probléme, et même l'aide de Delphi ne m'a pas donnée la réponse, enfin si, mais ça marche pas ! Alors s'il vous plait Aidez-Moi. Un petit résumé de ce que je voudrais faire : En faite je suis débutant sur Delphi depuis 1 mois a peu prés, enfin le probléme n'est pas là. Mon probléme est que je suis en train d'éssayer de créer mon premier composant, et j'y arrive, mais c'est laborieux. Le gros probléme est que j'ai besoin d'éxécuter un redimensionnement de mon composant, et pour cela je voulais intercepter un message Windows nommé WM_Size, pour savoir quand est-ce que je peut redimensionner mon composant. Cela m'a été conseiller de la par de l'aide de Delphi 7, mais malheureusement ceci ne fonctionne pas. Je dérive du composant TImage, et quand je redimenssionne mon composant sur une TForm celui-ci ce redimensionne mais pas le Canvas et cela est trés gênant, bien entendus le redimensionnement se fait a la conception, et non a l'éxécution. Alors pour vous éclairer je vous laisse tout le code source, qui je doit dire n'est pas énorme. Donc pour commencer voici les unités que j'utilise, Etant donnée qu'il ne les mets pas automatiquement, je les rajoute moi-même, alors j'espére que j'en est pas oublié : | uses SysUtils, Classes, Controls, ExtCtrls, Windows, Messages, Forms, Graphics; | Ensuite vient mes déclaration de Type :type TGrid = class(TImage) private FFactor:Integer; FShowGrid:Boolean; protected procedure WMSize(var Message:TWMSize); message WM_Size; public constructor Create(AOwner:TComponent);override; procedure TraceGrid; published property Factor:Integer read FFactor write FFactor; property ShowGrid:Boolean read FShowGrid write FShowGrid; property Width default 350; property Height default 200; end; | Ici je vous passe les détailles de la procédure Register, pour vous montrer la redéfinition du Constructeur Hérité, avec un appel a la procédure TraceGrid : constructor TGrid.Create(AOwner:TComponent); begin inherited Create(AOwner); Factor:=10; Width:=350; Height:=200; TraceGrid; end; | Ici je m'était dit que ce n'était pas nécéssaire de vous montrer la façon dont je trace la grille, et puis finalement vaut mieux avoir toutes les clé en main, Non ! Alors voici la procédure TraceGrid, et si il y a plus simple dit le moi ! : procedure TGrid.TraceGrid;//Traçage de la grille var DX, AX, DY, AY, i, j, L, H:Integer; begin L:=Width; H:=Height; L:=Round(L/10); H:=Round(H/10); DX:=0; DY:=0; AX:=1; AY:=1; for j:=0 to H do //Boucle de pointillement sur la hauteur begin DX:=0; AX:=1; //Réinitialisation des valeurs au début de la largeur for i:=0 to L do //Boucle de pointillement sur la largeur begin Canvas.MoveTo(DX,DY); Canvas.LineTo(AX,AY); if DX<9 then begin DX:=9; AX:=10; end else begin inc(DX,10); inc(AX,10); end; end; //Fin de Boucle de pointillement sur la largeur if DY<9 then begin DY:=9; AY:=10; end else begin inc(DY,10); inc(AY,10); end; end; //Fin de Boucle dee pointillement sur la hauteur end;
Et maintenant voici le petit bout de code qui me pose probléme, ici je ne fais que remplacer les anciennes valeur de Width et Height, en ré-appelant la procédure TraceGrid a la fin de la procédure, et ça fonctionne pas, alors soit c'est mon message qui déconne, ou c'est la procédure qui n'est pas appelé :
procedure TGrid.WMSize(var Message:TWMSize); begin TraceGrid; end; |
Note : La procédure Register est juste en dessous de l'implementation, et toutes les procédure suives aprés, je ne pense pas que cela est de l'importance, mais je vous le dit quand même.
Voila comme vous pouvez le voir ce composant est loin d'être compliquer, sachant qu'il n'est pas finis, alors Merci a vous !
|
|
mercredi 21 juillet 2004 à 15:08:30 |
Creer un composant TGrid pour le dessin Technique, une Grille !

glt0732
|
Réponse acceptée !
C'est Cool on ma donnée la réponse sur un autre forum, alors tant qu'a faire profitez en. En faite des le départ j'avais tout faux, et ben oui mon composant dérive de TImage qui lui même dérive de TGraphicControl, en résumé : | TGrid <-- TImage <-- TGraphicControl |
Et Malheureusement la Class TGraphicControl ne peux pas recevoir de Focus, et j'ai aussi apris que celle-ci ne pouvais pas recevoir les Message Windows, vous savez les "WM_Bidule". Enfin bref la solution consiste en faite a dériver directement de TGraphicControl et non pas de TImage, et d'utiliser la Méthode Paint, surcharger bien entendus. (et oublier les message) Alors étant donné que j'aime faire les chose bien, je vous laisse un petit bout de code, éxactement le même qu'au dessus mais celui-ci fonctionne, avis au débutant ! (Comme moi quoi !) Alors pour commencer j'utilise beaucoup moin d'unités comme vous pouvez le voir : unit Grid;
interface
uses SysUtils, Classes, Controls; |
Ensuite j'ai 2 Champs, dont 1 pour le pas de la grille(FFactor), et 1 autre pour afficher ou pas la grille, et surtout la fameuse procedure Paint(Surcharger), suivit de mes propriété : type TGrid = class(TGraphicControl) private FFactor:Integer; FShowGrid:Boolean; protected procedure Paint; override; public constructor Create(AOwner:TComponent);override; procedure TraceGrid; published property Factor:Integer read FFactor write FFactor; property ShowGrid:Boolean read FShowGrid write FShowGrid; property Width default 350; property Height default 200; end; |
Histoire de tout vous donnée, voici la procédure Register : procedure Register;
implementation
procedure Register; begin RegisterComponents('GLTPerso', [TGrid]); end; |
Et maintenant passons aux chose sérieuse, pour commencer le constructeur, pour pouvoir redéfinir nos 2 propriété par défaut, qui sont Width et Height : constructor TGrid.Create(AOwner: TComponent); begin inherited Create(AOwner); Factor:=10; Width:=350; Height:=200; end; |
Et la on surcharge la procédure Paint, pour pouvoir redessiner a notre façon notre composant, sans elle on peut pas, du moins je crois. procedure TGrid.Paint; begin inherited; TraceGrid; end; |
Et maintenant le plus gros du travail, mais le moins chiant a comprendre, le tracé de la grille avec un pas de 10 pixels. procedure TGrid.TraceGrid; var DX, AX, DY, AY, i, j, L, H:Integer; begin L:=Width; H:=Height; L:=Round(L/10); H:=Round(H/10); DX:=0; DY:=0; AX:=1; AY:=1; for j:=0 to H do //Boucle de pointillement jusqu'a H = Height/10 begin DX:=0; AX:=1; //Réinitialisation des valeurs au début de la largeur for i:=0 to L do //Boucle de pointillement jusqu'a L = Width/10 begin Canvas.MoveTo(DX,DY); Canvas.LineTo(AX,AY); if DX<9 then begin DX:=9; AX:=10; end else begin inc(DX,10); inc(AX,10); end; end; //Fin de Boucle de pointillement sur la largeur if DY<9 then begin DY:=9; AY:=10; end else begin inc(DY,10); inc(AY,10); end; end[/b]; //Fin de Boucle de pointillement sur la hauteur end[/b]; |
| Note : les propriété Factor, et ShowGrid, ne sont pas encore implémenté, mais ceci n'empêche pas le composant TGrid de fonctionner. |
Et voila vous vous doutez bien que mon composant est loin d'être finis, maintenant si cela vous interesse, vous n'avez plus qu'a le personnaliser, c'est déja un bon depart pour un débutant. Et je remercie Pierre Castelain sur le Forum de Developpez.com, de m'avoir donner la réponse.
|
|
Cette discussion est classée dans : end, code, composant, begin, blue
Répondre à ce message
Sujets en rapport avec ce message
cacher, hide, process, application, xp [ par Den ]
voici un code trouvé sur le web, il devrait permettre de cacher le processus du gestionnaire des taches de XP, je ne sait pas l'utiliseret j'ai déposé
Y'a t'il un Bug ?! Car c'est vraiment bizarre - (Un Composant) [ par glt0732 ]
Voila j'ai un gros big probléme, j'ai créer un composant qui fonctionne assez bien je doit dire, mais il se passe quelque chose de bizarre, Alors je v
pb de module [ par mathieu57100 ]
bonjour je débute en delphi et j'ai un ptit prob...j'ai dans mon projet un module de données dans lequel j'ai mis un composant TIdSMTP1 et un TIdMessa
pb sur delphi a la compilation need help !!! [ par shark1664 ]
voila mon code c'est une requete qui récupère dans une table une ligne compète quand le code est pareil que ce que l'utilisateur a siasie et au niveau
Creation d'un composant graphique [ par Sat83 ]
Bonjour!Je me suis lancée dans la création de mon premier composant graphique, mais j'ai un petit probleme.En gros, je veut creer un composant de type
RTTI et VMT [ par emge ]
J'ai un héritage de classe, et j'aimerai "simplifier du code". En effet, ma classe TInfoCol peut contenir plusieurs property, et à la longue, celà peu
Comment gérer les exceptions sur un tdbgrid? [ par toutoughou ]
Bonjour; J'ai un TDBGRID lié à un TADOTABLE. Je savoir comment je peux gérer les champs non nuls lors de l'insertion des nouveaux enregistrements.Donc
comment désactiver les raccourcis clavier de TAcroPDF [ par beckerich ]
Bonsoir, un petit problème qui m'embête depuis un moment, malgré pas mal de recherche... Je visualise un document PDF avec le composant TAcroPDF. Acr
Actualiser/Refresh IconCache [ par AgentAmine ]
Salut tt, je cherche un code pour actualiser le IconCache, malheureusement, il n'existe pas un API, mé j'ai trouve un code que me permet de faire ca,
Effacer la dernière image dessinée [ par Jean_Jean ]
Bonjour à tous, Non je ne programme pas sur la plage mais au milieu de mes cartons! Mais si comme je le pense vous avez emmené votre pc sur la plage
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|