
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
Transférer des fichiers... [ par korantin270 ]
Salut à tous,J'ai créé un programme en delphi, qui doit - entre autre - transférer des fichiers.Le problème, c'est que (étant débutant en delphi) malg
aide ; affichage sphere selon coordonnées sphériques! [ par khawarizm ]
Bonsoir !<?xml:namespace prefix = o ns = "urn:schemas-microso
TIBTable et TIBQuery - Récupérer les Displaylabel en une seule procedure [ par simonpelloquin ]
Bonjour A partir du tutoriel de DelphiProg (j'adore ce tutoriel !), j'essaie de modifier le composant TComboBox pour le remplir automatiquement avec l
valider un bouton d'une page web autom [ par nico8888 ]
Je cherche une métode pour valider un bouton d'une page web charger dans un WebBrowser automatiquement. le morceau de code que je vous présente m'à ét
Code pour Composant composite [ par Paounet ]
Je ne sais si cela est possible car cela fait un moment que je cherche et ce sans résultat positif.Quel code écrire dans mon composant composite type
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURSTECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURS par ROMELARD Fabrice
Animé par: Laurent Cotton Le développement dans SharePoint 2010 passe par plusieurs axes qui seront évoqués dans cette session, mais plus particulièrement les développements simples lié au besoin Business Business Connectivity Services Ce BCS es...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante 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
Forum
RE : SAVEDIALOGRE : SAVEDIALOG par JulioDelphi
Cliquez pour lire la suite par JulioDelphi
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
|