[HELP] Duplication de Composant ou Utilisation de tempaltes
cs_Cyrille2
Messages postés113Date d'inscriptionvendredi 16 août 2002StatutMembreDernière intervention15 mai 2005
-
16 août 2002 à 23:31
cs_Cyrille2
Messages postés113Date d'inscriptionvendredi 16 août 2002StatutMembreDernière intervention15 mai 2005
-
17 août 2002 à 02:19
Bonjour
je dev un chat en Delphi et je me confronte au probleme suivant : Je dois creer dynamiquement mes pvs selon un modele !!!
G essayer :
-de les creer manuellement > stack overflow
-d'avoir une form associée et de copier les composants => erreurs (si vous trouver une solutions...)
-de dupliquer avec le clipboard => register Class ne semble pas bien fonctionner (EClassError > Class XXX not found alors que je viens de faire un RegisterClass)
-enfin de creer un composant "Template" seulement je peux pas le creer ss l'inclure, si je l'inclure dans une autre form mais une fois la aussi, je dois pouvoir les copier sur le bon form...
Voila, ca fait 2-3 jours que je me tape la tete contre le mur %-6 (c juste une image :) ouf) mais bon la j'en ai marre...
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 16 août 2002 à 23:46
Fabbin avait posé le problème il y a quelques jours il me semble... Je me souviens aussi qu'il avait trouvé la solution : il a utiliser le composant TFrame qui permet de contenir des composants et à chaque nouvelle instance d'un TFrame, tous les composants inclus sont aussi copiés.
Tu dis avoir des erreurs quand tu crées des composants dynamiquement, comment fais-tu pour les créer ? Car normalement ceci ne provoque pas d'erreur. Place ici ta procédure si tu le souhaites afin que l'on puisse y voir plus clair.
cs_Cyrille2
Messages postés113Date d'inscriptionvendredi 16 août 2002StatutMembreDernière intervention15 mai 2005 16 août 2002 à 23:57
pour la creation dynamique? c super long, je cree chaque bouton a la main mais si tu veux...
TabPv := TTabSheet.Create(ChatControl1);
with TabPv Do
begin
Name := 'TabPV'+Id2;
Caption := Pseudo;
PageControl := ChatControl1;
PageIndex := Id;
Parent := ChatControl1;
end;
// haut du Pv : Read dialogue
ReadGroup := TGroupBox.CreateParented(TabPv.Handle);
with ReadGroup Do
begin
Name := 'PvReadBox'+Id2;
Caption := 'Un ptit PV avec '+Pseudo+' !';
Parent := TabPv;
OnURLClick := RxRichEditURLClick;
Visible := True;
end;
// Fin Haut du pv
// Bas du pv : Write!
WriteGroup := TGroupBox.CreateParented(TabPv.Handle);
with WriteGroup Do
begin
Name := 'PvWriteBox'+Id2;
Caption := 'On veut parler?';
Parent := TabPv;
with TEdit.Create(Self) Do
begin
Name := 'PvEdit'+Id2;
Parent := WriteGroup;
Text := '';
HideSelection := False;
Anchors := [akLeft,akRight];
Left := 8;
Top := 15;
OnKeyPress := PvEditKeyControl;
Visible := True;
end;
with TSpeedButton.Create(Self) Do
begin
Name := 'PvBoldBtn'+Id2;
Parent := WriteGroup;
Caption := 'B';
AllowAllUp := True;
Font.Style := [fsBold];
Left := 300;
Top := 40;
Width := 25;
Height := 25;
Visible := True;
end;
with TSpeedButton.Create(Self) Do
begin
Name := 'PvItalicBtn'+Id2;
Parent := WriteGroup;
Caption := 'I';
AllowAllUp := True;
Font.Style := [fsItalic];
Left := 330;
Top := 40;
Width := 25;
Height := 25;
Visible := True;
end;
with TSpeedButton.Create(Self) Do
begin
Name := 'PvUnderlineBtn'+Id2;
Parent := WriteGroup;
Caption := 'S';
AllowAllUp := True;
Font.Style := [fsUnderline];
Left := 360;
Top := 40;
Width := 25;
Height := 25;
Visible := True;
end;
with TColorDialog.Create(Self) Do
begin
Name := 'PvColorDialog'+Id2;
Parent := WriteGroup;
end;
with TButton.Create(Self) Do
begin
Name := 'PvColorBtn'+Id2;
Parent := WriteGroup;
Caption := 'Couleur';
OnClick := PvChangeColor;
Visible := True;
end;
with TButtonControl.Create(Self) Do
begin
Name := 'PvByeBtn'+Id2;
Parent := WriteGroup;
Caption := 'Fermer';
OnClick := DelThisPv;
Visible := True;
end;
with TButtonControl.Create(Self) Do
begin
Name := 'PvSendBtn'+Id2;
Parent := WriteGroup;
Caption := 'Envoyer';
OnClick := SendTextInPv;
Visible := True;
end;
// Fin Bas de Pv
>>> Stack Overflow
Bon mais c t pas top de tt taper a la main (dc g changé surtt apres le stackoverflow)
apres y avait par le clipboard soit RegisterClass() ne faisait pas effet soit c t stackoverflow
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 17 août 2002 à 00:12
J'ai deux petites remarques, qui n'explique pas tout mais si tu pouvais essayer :
- Quand tu utilises Create(), passe toujours self quel que soit le composant. Car ceci désigne le propriétaire du composant et non son Parent. Il est préférerable que le propriétaire soit la fiche et non un autre composant. Il faut bien sur ensuite associer correctement le Parent, mais ça tu le fais bien.
- Pourquoi utilises-tu CreateParented ? le Parent que tu défini est bien un controle de la VCL. Il faut donc utiliser Create(Self) dand tous les cas.
--- :sleepy) Nono du Moulin :sleepy) ---
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 17 août 2002 à 00:33
Juste deux petites questions que je puisse essayer :
de quel type est le composant ChatControl1 ? Si je remplace le RxRichEdit par un RichEdit ordinaire pour essayer c'est génant ?
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 17 août 2002 à 00:56
Quand je te disais tout à l'heure, il ya y peut-être une autre solution : les cadres.
Ajoute un Cadre à ton appication ( fichier/nouveau/cadre ). Tu obtient alors un cadre vide de type TFrame1. Place dedant tous les composants que tu veux avec leur disposition courleur etc...
Ensuite tu peux utiliser le cadre de façon dynamique pour ajouter d'un coup tous les composants qu'il contient :
procedure TForm1.Button1Click(Sender: TObject);
Var Frame:TFrame1;
begin
// Création da la nouvelle page
TabPv := TTabSheet.Create(ChatControl1);
with TabPv Do
begin
Name := 'TabPV'+Id2;
Caption := Pseudo;
PageControl := ChatControl1;
PageIndex := Id;
Parent := ChatControl1;
end;
// Création du cadre et des composants intégrés
Frame:=TFRame1.Create(Self);
Frame.Parent:=TabPv;
end;
Si ton cadre est créé avec tous les composants ( RichPv ReadGrooup WriteGroup... ) alors ils seront ajoutés automatiquement. Elle est pas belle la vie ?
cs_Cyrille2
Messages postés113Date d'inscriptionvendredi 16 août 2002StatutMembreDernière intervention15 mai 2005 17 août 2002 à 01:14
WAOOOOOW
t trop fort
merci me reste 2-3bug a corriger (genre il plante qd j'execute une function depuis la Frame dont les composant sont sur la Form> ex : fermeture pv, envoie pv etc...)
Merci !!!!!!!!! 3 jours pour trouver qqun d'aussi fort que toi lol