Modifiez des composants existants sans modifier vos fiches existantes (+ didacticiel)

Soyez le premier à donner votre avis sur cette source.

Vue 6 444 fois - Téléchargée 926 fois

Description

Une fois n'est pas coutume : le code que je dépose aujourd'hui ne comporte aucun commentaire. En revanche, vous trouverez toutes les explications dans le document joint (pdf).
Pourquoi ?
Pour deux raisons :
1- les didacticiels ne sont pas assez mis en évidence sur le site, ce qui décourage beaucoup d'entre nous d'en faire (faut bien trouver une excuse :o))
2- un didacticiel sans code source adossé, ça ne reste, trop souvent, que de la théorie pure. Aussi, je me suis dit qu'en joignant les deux dans l'archive, je ferai d'une pierre deux coups (et non pas...)

Trêve de bavardage, ce code (surtout le didacticiel) a pour objectif de vous montrer une démarche :
1- à mi-chemin entre la création d'un nouveau composant et son cortège d'inconvénients
2- plus lègère que celle consistant à déclarer une classe à usage presque unique

Vous trouverez la comparaison des différentes méthodes dans le didacticiel ainsi que leurs points forts et leurs points faibles.

Le code source est suffisamment simple pour être à la portée des débutants.

J'ose espérer, comme il est dit dans la conclusion du didacticiel, que cela mettra fin aux différentes discussions quand un membre publie un code source nécessitant l'utilisation de composants spécifiques qu'on a pas forcément l'envie d'installer dans son environnement de travail.

Conclusion :


Réalisé avec Delphi 7.
Aucune installation de composants additionnels n'est nécessaire. :o]

Seules les remarques constructives sont acceptées.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
41
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
29 août 2012

Bonjour,
C'est remarquable, simple et trés clair.
Merci de nous faire partager cette méthode.
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Je tiens à remercier publiquement Cirec pour son aide dans l' élaboration des nouvelles fonctionnalités de mon compo tcyDBGrid.
Celui-ci étant bientôt finaliser, il est normal de le publier sur CS pour en faire profiter tout le monde.

Merci à Cirec, à DelphiProg, aux Admins (qui ont pas mal de boulot) et longue vie à CS!
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Mais j' appelle la procédure originale dans celle dont j' ai fait dévier le flux des messages!?

if Assigned(FSauvDBGridWndProc)
then FSauvDBGridWndProc(Msg);

Je comprends pas ...
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
38
En fait c'est simple
le windowproc est surchargé depuis la classe TComponent par toutes les classes intermédiaires jusqu'au composant final.
Et dans leurs surcharge respective si un message n'est pas à traiter car non utile, il est renvoyé au DefWindowProc :
"DefWindowProc(Handle, Message.Msg, Message.wParam, Message.lParam);"

Donc si toi en cours de route tu le modifie et tu ne le restitue pas les classes parentes ne pourront plus travailler correctement.

Qu'on me corrige si je dis une connerie ^^
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Salut à tous,

j' ai compris que l' erreur venait de :
procedure TcyDBGrid.cyDBGridWndProc(var Msg: TMessage);
begin
// We have to call this all the time (not just when scrollBar properties handlers changes) :
ShowScrollBar(Handle, SB_HORZ, FHorizontalScrollBar);
ShowScrollBar(Handle, SB_VERT, FVerticalScrollBar);

if Assigned(FSauvDBGridWndProc)
then FSauvDBGridWndProc(Msg);
end;

Alors j' ai corrigé en ajoutant ceci:
procedure TcyDBGrid.BeforeDestruction;
begin
WindowProc := FSauvDBGridWndProc; // Avoid overload component error ...
Inherited;
end;

Voilà, ça marche très bien! Par contre, je comprends pas pourquoi il me donnait l' erreur citée plus haut, si quelqu' un a une idée ...

A+ et merci encore pour ton excelent tuto!
Afficher les 20 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.