figoleparigo
Messages postés8Date d'inscriptionjeudi 17 juillet 2008StatutMembreDernière intervention29 juin 2011
-
27 juin 2011 à 13:53
figoleparigo
Messages postés8Date d'inscriptionjeudi 17 juillet 2008StatutMembreDernière intervention29 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...
figoleparigo
Messages postés8Date d'inscriptionjeudi 17 juillet 2008StatutMembreDernière intervention29 juin 2011 28 juin 2011 à 11:43
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.
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 .
figoleparigo
Messages postés8Date d'inscriptionjeudi 17 juillet 2008StatutMembreDernière intervention29 juin 2011 29 juin 2011 à 09:33
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.