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, et je suis aussi débutant sur ce forum, 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 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é :
Ensuite vient mes déclaration de Type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2uses SysUtils, Classes, Controls, ExtCtrls, Windows, Messages, Forms, Graphics;
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 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 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 ! :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 constructor TGrid.Create(AOwner:TComponent); begin inherited Create(AOwner); Factor:=10; Width:=350; Height:=200; TraceGrid; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 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); //la hauteur et largeur est divisé par le pas de la grille 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 de 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é :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure TGrid.WMSize(var Message:TWMSize); begin Width:=Message.Width; Height:=Message.Height; TraceGrid; end;
Voila comme vous pouvez le voir ce composant est loin d'être compliquer,
sachant qu'il n'est pas finis, alors Merci a vous !
Partager