begin process at 2012 02 09 23:05:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Delphi

 > 

Archives

 > 

J'AI BESOIN D'AIDE !!!! :O

 > 

Composant et Message Windows - Comment ?


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

Composant et Message Windows - Comment ?

mercredi 21 juillet 2004 à 07:57:05 | Composant et Message Windows - Comment ?

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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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 : 1,435 sec (3)