
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
SQL SERVER : PHP ET SQL SERVERSQL SERVER : PHP ET SQL SERVER par christian
Juste une petite synthèse sur les possibilités de connecter une application PHP sur un serveur SQL Server. Non pas que je me sois reconverti en développeur PHP, mais je constate qu'actuellement il est très difficile dans un environnement PHP et partic...
Cliquez pour lire la suite de l'article par christian [TECHDAYS 2010] WINDOWS AZURE APPFABRIC (CLO305)[TECHDAYS 2010] WINDOWS AZURE APPFABRIC (CLO305) par NeuroCypher
Les webcasts sont désormais en ligne, je me décide donc à écrire ce post. J'ai encore eu la chance d'animer une session aux TechDays cette année. Le sujet : le même que l'année dernière, ou plutôt son évolution. En effet, l'année dernière la couche de com...
Cliquez pour lire la suite de l'article par NeuroCypher OUTILS D'IMPORT AVEC MISE à JOUR DANS MICROSOFT DYNAMICS CRMOUTILS D'IMPORT AVEC MISE à JOUR DANS MICROSOFT DYNAMICS CRM par bianca
Problématique
Si vous avez besoin d'exporter sous Excel une liste de comptes ou de contacts dans le but de faire des retouches à droite à gauche puis de réinjecter le tout dans CRM, vous ne pouvez pas vous en...
Cliquez pour lire la suite de l'article par bianca SQL SERVER : DéVELOPPER UN ADDON POUR SQL SERVER MANAGEMENT STUDIO (SSMS)SQL SERVER : DéVELOPPER UN ADDON POUR SQL SERVER MANAGEMENT STUDIO (SSMS) par christian
Pour celles et ceux qui aiment SQL Server et on l'âme de développeur (ou sont tout simplement développeur) et veulent étendre les fonctionnalités de SQL Server, voici un article qui devrait pouvoir un intéresser.
Certes ce dernier est écrit sur u...
Cliquez pour lire la suite de l'article par christian EDITEUR XAML DE VISUAL STUDIO: COMMENT ALIGNER LES ATTRIBUTS LES UNS EN DESSOUS DES AUTRES AUTOMATIQUEMENTEDITEUR XAML DE VISUAL STUDIO: COMMENT ALIGNER LES ATTRIBUTS LES UNS EN DESSOUS DES AUTRES AUTOMATIQUEMENT par Miiitch
Lorsque l'on écrit du XAML, les tags XML peuvent vraiment devenir très longs et pas pratique à lire: Il y a une option vraiment pratique dans l'éditeur de Visual Studio qui va nous permettre de réorganiser tout cela en mettant les attributs XAML les uns e...
Cliquez pour lire la suite de l'article par Miiitch
Forum
SVPSVP par aka89
Cliquez pour lire la suite par aka89
Logiciels
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 Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|