Tform et fenêtre multiple pour un Tchat

steff25 Messages postés 6 Date d'inscription dimanche 30 mars 2003 Statut Membre Dernière intervention 23 mai 2003 - 22 mai 2003 à 18:18
steff25 Messages postés 6 Date d'inscription dimanche 30 mars 2003 Statut Membre Dernière intervention 23 mai 2003 - 24 mai 2003 à 00:15
Bonjour à tous,
Je vous expose mon problème don je cherche un soluce (naturellement) depuis 3 jours.
J'utilise Delphi 6 (version gratuite)
Voilà je développe un programme de Tchat, jusque là pas de problème.
Sur ce Tchat existe une salle public ou tout le monde se retrouve connecté quand il arrive. A partir de la liste de connecté, en double-cliquant sur un pseudo, cela ouvre un nouvelle fenêtre de conversation (Tchat privée).
Donc j'ai une Fenêtre de création pour le chat public avec tout ces composants (label, listbox etc..) et un autre pour le chat Privée avec aussi tout ces composants)
Au début j'ai cherché à éviter de créer un tableau de plusieurs fenêtres de chat privée en mémoire, en passant par la récupération du handle du nom de la fenêtre. J'ai pu récupérer le handle de la fenêtre, mais je n'ai pas réussi à partir de ce handle à en faire un TForm, donc à caster le Handle pour récupérer la fenêtre si rapportant (ma fonction renvois un TForm. Si quelqu'un c'est comment faire merci.
Donc ne trouvant de soluce à mon premier problème, je suis passé à la solution 2 qui est de créer un tableau contenant plusieur feuille de chat privée. Là tout fonctionne bien.
La question est comment faire, pour que quand je réduis l'application principale, les fenêtre du chat privée ne se ferme pas non plus. j'ai essayé nomdelaforme.create(Application) et autre, rien ni faits. Soit cela n'existe pas, soi il existe une astuce que je n'ai pas trouvé sur le net (voir j'ai surrement mal cherché).
Voilà donc si quelqu'un avait une idée, un source expliquant. Enfin quelque chose cela m'aiderai beaucoup.
Merci à tou de m'avoir lu jusqu'ici.
A voir également:

2 réponses

steff25 Messages postés 6 Date d'inscription dimanche 30 mars 2003 Statut Membre Dernière intervention 23 mai 2003
23 mai 2003 à 19:09
Bonjour,
pour ceux que cela peut intéresser, voilà un bout de code qui permet de retrouver une fenêtre créé dynamiquement par l'application (une partie de ce que je cherchais) je n'y avais pas pensé avant :

function TForm1.FindForm(NomFenetre: String): TForm;
var
i: Integer;
Temp: TComponent;
begin
if NomFenetre= '' then
begin
Result:=nil;
exit;
end;
//
// Recherche de l'existance d'une fenêtre au sein de
// l'application
//
for i:=0 to Application.ComponentCount-1 do
begin
Temp := Application.Components[I];
if (Temp is TForm) then
begin
Result := (Temp as TForm);
if TForm2(Result).Caption=NomFenetre then
with Form2(Result) do
begin
Show;
exit;
end;
end;
end;
//
// Rien n'est trouvé
// Création de la fenêtre au sein de l'application
//
Result:= TForm2.Create(Application);
with TForm2(Result) do
begin
Caption := NomFenetre;
Visible:=True;
Show;
end;
end;

Voilà la fonction, en espérant qu'elle serve à d'autre, car j'ai cherché un peti moment.
Par contre mon problème reste le même quand je veux minimiser l'application, toutes les fenêtres créées par FindForm se minimisent aussi. Si quelqu'un avait une soluce pour éviter cela merci.
0
steff25 Messages postés 6 Date d'inscription dimanche 30 mars 2003 Statut Membre Dernière intervention 23 mai 2003
24 mai 2003 à 00:15
Bonsoir,
Mon calvaire arrive à sa fin, j'ai trouvé la soluce dans un forum sur un site. La soluce existait aussi ici :
"il faut déclarer tes fenêtres principales comme étant enfant du bureau Windows.
Pour cela il faut ajouter 2 choses dans tes fiches secondaires :

dans les déclarations de ta fiche :
Type
...
private
{ Déclarations privées }
procedure CreateParams(var Params: TCreateParams); override;
public
{ Déclarations publiques }
end;

puis ajoute la procédure suivante

procedure Tform1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent:= GetDesktopWindow; // Devient une fille du bureau
end;
"

Il fallais juste chercher avec les bon mots.
Dommage que les personnes qui avaient la soluce ne l'ai pas dit, mais bon....

ps: Reste plus qu'à savoir si cette exmple fonctionnera sous Kylix ou s'il me faudra encore parcourir le Web pour la trouver...

Amicalement
Stéphane
0
Rejoignez-nous