Instanciation composant existant (TClientSocket) [Résolu]

Messages postés
8
Date d'inscription
jeudi 17 juillet 2008
Dernière intervention
29 juin 2011
- 27 juin 2011 à 13:53 - Dernière réponse :
Messages postés
8
Date d'inscription
jeudi 17 juillet 2008
Dernière intervention
29 juin 2011
- 29 juin 2011 à 09:33
Mon but est de créer une appli client de tests qui va ouvrir des centaines de Socket vers un serveur.

Je suis en train de lire qq tuto sur le sujet (instanciation dynamique), mais je ne suis pas très familié (pour ne pas dire une grosse quiche ...) avec la POO (Prog. orienté objet). D'où ma préférence pour la sélection de composant sur la palette de l'IDE Delphi 6, qui me simplifie grandement la tâche. Je m'en rends encore plus compte maintenant...

Les docs parlent de création de composant, alors que moi je veux juste appeler un composant existant. Ça devrait être moins compliqué normalement, non?

Bref, je voudrais un petit exemple de code qui "appelle" un composant existant, de la même manière que si on avait ajouté le bloc dans la Form, sans vouloir modifier de propriété, ou ajouter des fonctions... Je veux juste utiliser l'existant, mais pouvoir aussi l'instancier des centaines de fois...

D'avance merci,
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
8
Date d'inscription
jeudi 17 juillet 2008
Dernière intervention
29 juin 2011
- 28 juin 2011 à 11:43
3
Merci
Je te remercie pour l'info, mais je ne veux pas "créer" un composant, mais juste utiliser l'existant. Ca veut peut-être dire la même chose au final, vu le code...
J'ai trouvé mon bonheur avec ces qq lignes, je les mets pour répondre à la question...

var
  ListeSockets: array[1..100] of TClientSocket;

procedure TClientForm.ClickConnexion(Sender: TObject);
var
  idx : cardinal;
begin
  for idx:=1 to 100 do
  begin
    if not Assigned(ListeSockets[idx]) then
    begin
      ListeSockets[idx] := TClientSocket.Create(self);
      ListeSockets[idx].Host := 'localhost';
      ListeSockets[idx].Port := 1024;
      ListeSockets[idx].ClientType := ctNonBlocking;
      ListeSockets[idx].OnRead := OnReadSock1;   // Fonction de lecture des données reçues du serveur
      ListeSockets[idx].Open;
      sleep(200);
    end;
  end;


Pour l'instant, la seconde partie dont tu parles "Form1.Components[i]...", je ne m'en sers pas, mais c'est bon à savoir.
Merci.

Merci figoleparigo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de figoleparigo
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
- 27 juin 2011 à 20:51
0
Merci
Si j'ai bien compris ce que tu voulais faire, c'est une création dynamique de composant:

var NewCompo : TCompo;

for i := 0 to 99 do NewCompo := TCompo.Create(Self);


Ensuite, tu peux faire référence à chaque compo créé en tant que compo indexé du TForm:

for i := 0 to Form1.ComponentCount-1 do if Form1.Components[i] is TCompo then (Form1.Components[i] as TCompo)...




_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
Commenter la réponse de Caribensila
- 28 juin 2011 à 12:02
0
Merci
Salut

Caribensila te propose non pas de créer tes composants en designtime mais en runtime et il a raison parce que si tu dois déposer 100 TClientSocket sur ta form ca va faire lourd .

Sinon fais attention ou tu mets les pieds : Il va y avoir les évènements à gérer derrière .
Commenter la réponse de Utilisateur anonyme
Messages postés
8
Date d'inscription
jeudi 17 juillet 2008
Dernière intervention
29 juin 2011
- 29 juin 2011 à 09:33
0
Merci
Merci pour cette précision, mais j'ai encore du mal avec ces notions de "DesignTime" et "RunTime".
Si j'ai bien compris:
DesignTime : Création d'un composant avec une unité dédiée et un fichier BPL et un nouvel icône sur la palette...
RunTime : 'Création' d'un objet "composant" à l'exécution du programme... Sans ajouter de bloc sur la Form.

Dans mon exemple, j'ai donné le nom de la fonction directement à l'événement:
ListeSockets[idx].OnRead := OnReadSock1;

Pour les centaines de composants créés à la volée, ça fonctionne bien, tous les sockets appellent cette fonction pour les messages reçus du serveur.
De toute façon, c'est un code qui sert juste pour des tests de faisabilité. Seule la partie Serveur servira en prod.
Commenter la réponse de figoleparigo

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.