Delphi à l'aide d'interfaces. Les meilleures solutions informatiques pour les entreprises. Redimensionnement correct des éléments de la fenêtre

Un et le plus forces environnements Programmation Delphi est son architecture ouverte, grâce à laquelle Delphi permet une sorte de métaprogrammation, permettant de "programmer l'environnement de programmation". Cette approche amène Delphi à un nouveau niveau qualitatif de systèmes de développement d'applications et vous permet d'intégrer des outils supplémentaires dans ce produit qui prennent en charge presque toutes les étapes de la création de systèmes d'application. Un tel éventail de possibilités s'ouvre grâce au concept d'interfaces dites ouvertes implémentées en Delphi, qui font le lien entre l'IDE (Integrated Development Environment) et les outils externes.

Cet article se concentre sur les interfaces ouvertes de Delphi et donne un aperçu des fonctionnalités qu'elles offrent. Delphi définit six interfaces publiques : interface d'outil, interface de conception, interface experte, interface de fichier, interface d'édition et interface de contrôle de version. Il est peu probable que dans le cadre de cet article nous puissions couvrir en détail et illustrer les possibilités de chacun d'eux. Les textes sources de Delphi vous aideront à mieux comprendre les problèmes à l'étude, puisque les développeurs leur ont fourni des commentaires détaillés. Les déclarations de classe représentant les interfaces publiques sont contenues dans les modules correspondants du répertoire ...\Delphi\Source\ToolsAPI. L'interface de conception (module DsgnIntf.pas) permet de créer des éditeurs de propriétés et des éditeurs de composants.

Les éditeurs de propriétés et de composants sont un sujet digne d'une discussion séparée, nous rappelons donc seulement que l'éditeur de propriétés contrôle le comportement de l'inspecteur d'objets lorsque vous essayez de modifier la valeur de la propriété correspondante, et que l'éditeur de composants est activé lorsque vous double- cliquez avec le bouton gauche de la souris sur l'image du composant placé sur la fiche. L'interface de contrôle de version (module VCSIntf.pas) est conçue pour créer des systèmes de contrôle de version. À partir de la version 2.0, Delphi prend en charge le système de contrôle de version intégré Intersolv PVCS, de sorte que dans la plupart des cas, il n'est pas nécessaire de développer votre propre système. Pour cette raison, nous omettrons également l'examen de l'interface de contrôle de version. L'interface de fichiers (module FileIntf.pas) permet de redéfinir le système de fichiers de travail de l'EDI, ce qui permet de choisir sa propre manière de stocker les fichiers (dans les champs Mémo sur le serveur de base de données, par exemple). L'interface d'édition (module EditIntf.pas) donne accès au tampon de texte source, qui vous permet d'analyser et de générer du code, de déterminer et de modifier la position du curseur dans la fenêtre de l'éditeur de code et de contrôler la coloration syntaxique du texte source.

Les classes spéciales fournissent des interfaces aux composants placés sur le formulaire (définir le type de composant, obtenir des références aux composants parents et enfants, accéder aux propriétés, passer le focus, supprimer, etc.), au formulaire lui-même et au fichier de ressources du projet. L'interface d'édition vous permet également d'identifier les soi-disant notificateurs de module qui déterminent la réaction aux événements tels que changer le code source du module, modifier le formulaire, renommer le composant, enregistrer, renommer ou supprimer le module, changer la ressource du projet fichier, etc. Tool Interface (module ToolIntf. pas) fournit aux développeurs les moyens d'obtenir informations générales sur l'état de l'EDI et effectuer des actions telles que l'ouverture, l'enregistrement et la fermeture de projets et de fichiers individuels, la création d'un module, l'obtention d'informations sur le projet en cours (le nombre de modules et de formulaires, leurs noms, etc.), l'enregistrement système de fichiers, organisation des interfaces vers les modules individuels, etc. En plus des notificateurs de module, l'interface de l'outil définit des notificateurs de complément qui notifient des événements tels que l'ouverture/la fermeture de fichiers et de projets, le chargement et l'enregistrement d'un fichier de bureau de projet, l'ajout/l'exclusion de modules de projet, l'installation/la désinstallation de packages, la compilation d'un projet, et Contrairement aux notificateurs modulaires, les notificateurs complémentaires vous permettent d'annuler l'exécution de certains événements.

De plus, l'interface de l'outil fournit un moyen d'accéder au menu principal de l'IDE Delphi, vous permettant d'y intégrer des éléments supplémentaires. L'interface expert (module ExptIntf.pas) est la base de la création d'experts - des modules logiciels intégrés à l'IDE afin d'étendre ses fonctionnalités. Un exemple d'expert est l'assistant de formulaire de base de données Delphi, qui génère un formulaire pour afficher et modifier le contenu d'une table de base de données. Après avoir défini la classe expert, nous devons nous assurer que Delphi "apprend" à propos de notre expert. Pour ce faire, il doit être enregistré en appelant la procédure RegisterLibraryExpert, en lui passant une instance de la classe experte en paramètre. A titre d'illustration, créons un expert simple dans le style esStandard, qui, lorsque l'élément de menu Delphi correspondant est sélectionné, affiche un message indiquant qu'il est en cours d'exécution. Comme vous pouvez le voir dans le tableau ci-dessus, le style esStandard nécessite que six méthodes soient remplacées :

Pour que l'expert soit "activé", vous devez sélectionner l'élément de menu Composant/Installer le composant ... , sélectionner le module contenant l'expert (dans notre cas exmpl_01.pas) dans la boîte de dialogue Parcourir, cliquer sur OK, et après avoir compilé le package dclusr30.dpk dans le menu principal de Delphi dans la section Aide, l'élément Simple Expert 1 doit apparaître, lorsqu'il est sélectionné, le message d'information "Standard Expert démarré !" apparaît. Pourquoi Delphi met l'élément de menu expert dans la section Aide reste un mystère. Si vous n'aimez pas le fait que l'élément de menu apparaisse n'importe où dans Delphi, et pas où vous le souhaitez, l'option suivante est possible : créez un expert en style de complément, ce qui élimine la création automatique de l'élément de menu, et ajoutez le élément de menu "manuellement" à l'aide de l'interface de l'outil. Cela vous permettra de définir l'emplacement du nouvel élément dans le menu principal de manière arbitraire.

Pour ajouter un élément de menu, la classe TIToolServices est utilisée - la base de l'interface de l'outil - et les classes TIMainMenuIntf, TIMenuItemIntf qui implémentent des interfaces vers le menu principal de l'IDE et ses éléments. L'instance ToolServices de la classe TIToolServices est créée par l'IDE lui-même lors de son initialisation. Notez qu'il est de la responsabilité du développeur de publier les interfaces du menu principal de Delphi et de ses éléments. En cours de route, compliquons légèrement la charge fonctionnelle de l'Expert Advisor : lorsque son élément de menu est activé, il émettra un certificat sur le nom du projet ouvert dans ce moment dans l'environnement : Dans cet exemple, la place centrale est occupée par la fonction AddIDEMenuItem, qui ajoute un élément de menu au menu principal de l'EDI Delphi. Comme paramètres, on lui passe le texte du nouvel élément de menu, son identifiant, l'identifiant de l'élément devant lequel le nouvel élément est inséré, la représentation symbolique de la touche qui, avec la touche Ctrl, permet d'accéder rapidement le nouvel élément et le gestionnaire d'événements correspondant à la sélection du nouvel élément. Nous avons ajouté un nouvel élément de menu à la section Affichage avant l'élément Montres.

Faisons maintenant connaissance avec les notificateurs. Définissons un notificateur de complément qui suit les moments de fermeture/ouverture des projets et ajuste le champ qui stocke le nom du projet actif en conséquence (nous omettons l'implémentation des méthodes qui n'ont pas changé par rapport à l'exemple précédent par souci de brièveté) : implémenter le notificateur, nous avons défini la classe TAddInNotifier, qui est un descendant de TIAddInNotifier et remplace FileNotification. L'EDI appellera cette méthode chaque fois qu'un événement se produira auquel le notificateur de complément est capable de répondre (chaque événement de ce type est désigné par la constante de type TFileNotification correspondante). Le champ Expert de la classe TAddInNotifier est utilisé pour les commentaires avec un expert (la méthode TAddInNotifier.FileNotification). Dans le destructeur de l'expert, le notifiant n'est pas enregistré et le notifiant est détruit. Illustrons maintenant l'utilisation des notificateurs modulaires. Créons un expert du complément qui génère des messages sur chaque acte d'enregistrement d'un fichier de projet (par souci de brièveté, nous ne fournissons pas l'implémentation des méthodes qui nous sont déjà familières) : dans cet exemple, l'expert du complément surveille les événements correspondant à l'ouverture/clôture des projets.

Chaque fois qu'un projet est ouvert, un notificateur de module correspondant au fichier projet est enregistré. En termes d'implémentation, les notificateurs modulaires sont similaires aux notificateurs de complément : nous définissons une classe TModuleNotifier qui est un descendant de TIModuleNotifier et redéfinissons ses méthodes Notify et ComponentRenamed. L'EDI appelle la méthode Notify lorsque certains événements liés à ce module se produisent ; à l'intérieur de cette méthode, la réaction à un événement particulier est déterminée. La méthode ComponentRenamed est appelée lorsque le nom du composant qui se trouve sur le formulaire de module change. Veuillez noter que nous n'utilisons pas cette méthode, mais nous devons la surcharger, sinon, lorsque le nom du composant change, la méthode abstraite sera appelée. classe de base ce qui entraîne des conséquences imprévisibles.

L'enregistrement d'un notificateur de module est un peu plus compliqué que l'enregistrement d'un complément de notificateur : nous obtenons d'abord l'interface du module (TIModuleInterface), puis nous enregistrons le notificateur à l'aide de l'interface du module. Lorsque le projet est fermé, le notificateur de module est désenregistré (à nouveau en utilisant TIModuleInterface) et le notificateur est détruit. En conclusion, nous montrerons comment déterminer la position du curseur dans la fenêtre de l'éditeur de code. Créons un Expert Advisor qui, lorsque l'élément de menu correspondant est sélectionné, afficherait un message contenant le nom du fichier actif et la position du curseur dans celui-ci (l'implémentation de seulement ceux indispensables pour cet exemple méthodes) : Pour déterminer la position du curseur, nous devons obtenir la séquence d'interfaces suivante : module interface (TIModuleInterface) ; interface d'édition de code (TIEditorInterface); interface d'affichage du module dans la fenêtre de l'éditeur (TIEditView).

Si le fichier actif avec le texte source (*.pas) est actif lors de la sélection de l'élément de menu expert, un message s'affiche contenant le nom du fichier actif et la position actuelle du curseur dans celui-ci. Si le fichier actif n'est pas un fichier pas, aucun message n'est émis. La méthode GetCurrentFile de la classe TIToolServices est utilisée pour obtenir le nom du fichier actif. Ceci conclut notre discussion sur les façons d'utiliser les interfaces publiques. Le CD-ROM contient le code source de tous les exemples donnés. Le CD-ROM contient également un exemple plus complexe et étendu contenant un expert complémentaire qui permet à l'utilisateur de mettre en signet le code source des modules Delphi. Un guide rapide d'installation et d'utilisation de Bookmark Expert est contenu dans le fichier bkmrks97.htm. Ainsi, dans cet article, les interfaces publiques sont abordées en termes généraux et des exemples de leur utilisation sont donnés. Encore une fois, grâce à la disponibilité des codes sources des interfaces ouvertes, vous pouvez facilement comprendre les détails qui vous intéressent. Nous espérons que la variété des possibilités offertes par les interfaces ouvertes vous donnera plus d'une idée audacieuse et utile.

Cet article est basé sur des questions des forums : "Comment renvoyer une chaîne depuis une DLL ?", "Comment passer et renvoyer un tableau d'enregistrements ?", "Comment passer un formulaire à une DLL ?".

Pour que vous ne passiez pas la moitié de votre vie à le découvrir - dans cet article, je vais tout apporter sur un plateau d'argent.

Les sujets de cet article, à des degrés divers, ont déjà été abordés plus d'une fois dans ce blog, mais dans cet article, ils sont rassemblés en tas, des justifications sont données. En bref, un lien vers cet article peut être lancé à ceux qui développent la DLL.

Note importante: l'article doit être lu successivement. Les exemples de code sont fournis uniquement en tant que exemples, à chaque étape (point) de l'article, le code des exemples est ajouté avec de nouveaux détails. Par exemple, au tout début de l'article il n'y a pas de gestion des erreurs, des méthodes "classiques" sont indiquées (comme l'utilisation de GetLastError , les conventions sdtcall, etc.), qui sont remplacées par d'autres plus adéquates au cours de l'article. Ceci est fait pour la raison que les conceptions "nouvelles" ("inhabituelles") ne soulèvent pas de questions. Sinon, avec chaque exemple, il faudrait insérer une note de la forme : "ceci est discuté dans ce paragraphe ci-dessous, mais cela - dans celui-ci ici." Dans tous les cas, à la fin de l'article, il y a un lien vers un code prêt à l'emploi écrit en tenant compte de tout ce qui est dit dans l'article. Vous pouvez simplement le prendre et l'utiliser. Et l'article explique pourquoi et pourquoi. Si vous n'êtes pas intéressé par "pourquoi et pourquoi" - faites défiler jusqu'à la fin jusqu'à la conclusion et un lien pour télécharger l'exemple.

La programmation orientée objet (POO), en plus du concept de classe, fournit également le concept fondamental d'interface.

Qu'est-ce qu'une interface et quelles sont les fonctionnalités de son utilisation dans le langage de programmation Delphi ?

Une interface est une construction sémantique et syntaxique dans le code de programme utilisée pour spécifier les services fournis par une classe ou un composant (Wikipedia).

En fait, une interface définit une liste de propriétés et de méthodes à utiliser lorsque l'on travaille avec une classe qui implémente cette interface, ainsi que leur signature (nom, type de données, paramètres acceptés (pour les procédures et les fonctions), etc.). Ainsi, une classe qui implémente une interface doit nécessairement implémenter tous ses composants. De plus, en stricte conformité avec la façon dont ils y sont décrits.

Très souvent, les interfaces sont comparées à des classes abstraites, mais malgré toutes les similitudes, cette comparaison n'est pas tout à fait correcte. Dans les classes abstraites, au minimum, le contrôle de la visibilité des membres est disponible. Dans le même temps, les étendues ne sont pas définies pour les interfaces.

Les interfaces permettent de rendre l'architecture plus flexible, car elles unifient l'accès à telle ou telle fonctionnalité, et permettent également d'éviter un certain nombre de problèmes liés à l'héritage de classe (les interfaces peuvent également être héritées les unes des autres).

Delphi utilise le mot-clé interface pour déclarer une interface. C'est le même mot-clé qui définit une section de module accessible de l'extérieur (entre mots clés interface et implémentation). Cependant, lors de la déclaration d'une interface, une syntaxe différente est utilisée, similaire à la déclaration de classes.

Delphi/Pascal

IMyNewInterface = procédure d'interface InterfaceProc ; finir;

IMaNouvelleInterface =interface

procédure InterfaceProc ;

finir ;

Ainsi, la syntaxe de déclaration d'interface elle-même n'a pas de différences fondamentales par rapport aux autres langages de programmation (les fonctionnalités de syntaxe basées sur Pascal ne comptent pas). Dans le même temps, la mise en œuvre d'interfaces présente un certain nombre de caractéristiques.

Le fait est que les interfaces Delphi ont été introduites à l'origine pour prendre en charge la technologie COM. Par conséquent, l'interface IInterface, qui dans Delphi est l'ancêtre de toutes les autres interfaces (une sorte d'analogue de TObject), contient déjà trois méthodes de base pour travailler avec cette technologie : QueryInterface, _AddRef, _Release. Par conséquent, si une classe implémente une interface, elle doit également implémenter ces méthodes. Même si cette classe n'est pas conçue pour fonctionner avec COM.

En raison de cette fonctionnalité de l'interface IInterface, dans Delphi, l'utilisation d'interfaces, dans la plupart des cas, conduit à l'ajout de fonctionnalités manifestement inutilisées à la classe.

Il existe une classe de bibliothèque TInterfaceObject, qui contient déjà l'implémentation de ces méthodes et, lorsque vous en héritez, il n'est pas nécessaire de les implémenter vous-même. Mais comme Delphi ne prend pas en charge l'héritage de classes multiples, son utilisation ne fait souvent qu'engendrer une complexité supplémentaire dans la conception et l'implémentation des fonctionnalités déjà requises.

Tout cela a conduit au fait que, malgré toutes les possibilités offertes par les interfaces, leur utilisation pratique dans Delphi n'allait presque pas au-delà de travailler avec COM.

Étant optimisées pour fonctionner principalement avec cette technologie, les interfaces, ou plutôt les fonctionnalités et les restrictions architecturales qu'elles ajoutent sans faute, ne se justifient pas pour résoudre d'autres problèmes.

Par conséquent, de nombreux programmeurs Delphi sont encore, en fait, privés d'un outil puissant et flexible pour développer l'architecture des applications.

juste pour les résultats

respect strict des délais

Transparence

la mise en œuvre du projet

support technique en cadeau

Programmation, améliorations, consultations sur 1C

Comment nous travaillons

1. Nous discutons du problème par téléphone. Si vous avez un accès à distance - affichez sur l'écran de votre ordinateur.

2. Nous évaluons le travail en roubles si le projet est important, sinon - le nombre approximatif d'heures.

3. Nous faisons le travail.

4. Vous acceptez le travail dans votre programme, s'il y a des lacunes, nous les corrigeons.

5. Nous émettons une facture, vous payez.

Coût des travaux

1. Tous les travaux sont répartis en 3 catégories : consultation, mise à jour d'une configuration type, développement ou programmation d'un nouveau rapport, traitement, boutons, etc.

3. Pour les travaux supérieurs à 10 heures, une tâche technique est préparée à l'avance avec une description et le coût des travaux. Les travaux commencent après l'approbation des TdR avec vous.

Soutien technique

1. Si vous trouvez des erreurs dans les travaux précédemment acceptés, dans les 3 mois, nous les corrigeons gratuitement.

2. Pour les clients réguliers Toute lacune dans notre travail est corrigée gratuitement dans un délai d'un an.

Programmes pour la gestion de votre entreprise.

Acheter 1C:Entreprise

Nous sommes le revendeur officiel de 1C, vous pouvez acheter chez nous divers produits logiciels et licences. En plus de l'achat d'une "boîte", nous vous aiderons à mettre en place le programme, consulter et effectuer les réglages de base.

  • Comptabilité
  • Automatisation du magasin
  • De gros
  • L'aide à l'installation et à la configuration initiale est incluse dans le package !
  • Ajustement des configurations aux besoins du client, développement de nouveaux modules en l'absence des fonctions nécessaires dans la configuration standard.
1c comptabilité 1C : Gestion commerciale 1C : Vente au détail 1C : Gestion de la paie et des ressources humaines
À partir de 3300 roubles. À partir de 6700 roubles. À partir de 3300 roubles. À partir de 7400 roubles.

Mise à disposition d'un serveur.

Serveur de configuration instantanée + 1C.

Pas de serveur ? Peu importe, nous sélectionnerons et mettrons rapidement en place un serveur dans le "cloud". Pour une somme modique, vous obtenez une solution très fiable.

  • Disponibilité 24h/24 et 7j/7
  • Pas besoin de garder le vôtre administrateur du système(les économies couvriront le coût de votre serveur).
  • Configuration et installation rapides de 1C sur le serveur, en 3 jours vous aurez déjà un système entièrement fonctionnel.
  • A tout moment, vous pouvez vous déplacer vers serveur local si la solution n'est pas satisfaisante.

SMS de votre 1C

Souhaitez-vous que les clients soient informés à temps des promotions et des remises ? Les clients ne reviennent pas ? Personnaliser envoi de SMS directement du 1C !

Notre société pourra rapidement mettre en place l'envoi de SMS à vos clients directement depuis 1C. Exemples d'événements pouvant être automatisés :

  • Gratitude pour l'achat et l'accumulation de bonus immédiatement après le prochain achat.
  • Accumulation de bonus sur la carte en cadeau pour un anniversaire/un autre jour important ou un jour férié.
  • Avis d'entrepôt.
  • Expiration du bon cadeau.
  • Notification de réception d'acompte et de réservation de marchandises.
  • Adresse avec indications vers le magasin/bureau, numéros de téléphone.
  • Etc.

La mise en 1C peut être effectuée par nos spécialistes ou nos employés. Vous pouvez vous familiariser avec les tarifs sur la page des tarifs SMS.

  • Garantie de livraison des SMS, l'argent n'est retiré que pour les SMS livrés.
  • Facturation séparée pour chaque SMS.
  • Réapprovisionnement du solde de diverses manières.
  • Voir l'historique de tous les SMS envoyés à tout moment.
  • Le nom de l'expéditeur au lieu du numéro numérique sur le téléphone du destinataire.
2022 wisemotors.com. Comment ça fonctionne. Le fer. Exploitation minière. Crypto-monnaie.