[HELP] Duplication de Composant ou Utilisation de tempaltes

cs_Cyrille2 Messages postés 113 Date d'inscription vendredi 16 août 2002 Statut Membre Dernière intervention 15 mai 2005 - 16 août 2002 à 23:31
cs_Cyrille2 Messages postés 113 Date d'inscription vendredi 16 août 2002 Statut Membre Dernière intervention 15 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...

Si qqun peut m'aider
Merci d'avance

------------------------------------------
Visitez http://www.visiomaster.net :)

12 réponses

cs_Cyrille2 Messages postés 113 Date d'inscription vendredi 16 août 2002 Statut Membre Dernière intervention 15 mai 2005
16 août 2002 à 23:34
-
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
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.

--- :sleepy) Nono du Moulin :sleepy) ---
0
cs_Cyrille2 Messages postés 113 Date d'inscription vendredi 16 août 2002 Statut Membre Dernière intervention 15 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;

Align := alClient;

Visible := True;
end; ChatControl1.ActivePage := TabPv;

RichPv := TRxRichEdit.CreateParented(ReadGroup.Handle);
with RichPv Do
begin
Name := 'PvRichEdit'+Id2;
Parent := ReadGroup;

Align := alClient;
PlainText := False;
AutoURLDetect := True;
HideSelection := False;
ScrollBars := ssVertical;

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;

Align := alBottom;
Height := 70;
Visible := True;
end;

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
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
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) ---
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Cyrille2 Messages postés 113 Date d'inscription vendredi 16 août 2002 Statut Membre Dernière intervention 15 mai 2005
17 août 2002 à 00:18
j'utilise CreateParented pk sinon ca plante... pour le RiChedit au moins

C ca qui provoque le stack overflow? franchement... je comprend pas le rapport :/

je test
0
cs_Cyrille2 Messages postés 113 Date d'inscription vendredi 16 août 2002 Statut Membre Dernière intervention 15 mai 2005
17 août 2002 à 00:24
c bien ce que je craignais, g qd meme un stack overflow! :(
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
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 ?

--- :sleepy) Nono du Moulin :sleepy) ---
0
cs_Cyrille2 Messages postés 113 Date d'inscription vendredi 16 août 2002 Statut Membre Dernière intervention 15 mai 2005
17 août 2002 à 00:38
je v me tirer une balle
le stack overflow vient du fait qu'une colordialog box ne peux appartenir qu'a un form ...

bon alors g un code de 10 metres de long pour une fonction, y a pas mieux ????

Merci pour ton aide deja!!!!!!!!!!!
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
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 ?

--- :sleepy) Nono du Moulin :sleepy) ---
0
cs_Cyrille2 Messages postés 113 Date d'inscription vendredi 16 août 2002 Statut Membre Dernière intervention 15 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
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
17 août 2002 à 02:01
Merci pour le compliment...

Note que la solution originale est de Fabiin notre adnimistrateur bien-aimé.

--- :sleepy) Nono du Moulin :sleepy) ---
0
cs_Cyrille2 Messages postés 113 Date d'inscription vendredi 16 août 2002 Statut Membre Dernière intervention 15 mai 2005
17 août 2002 à 02:19
Erf
:)

j'en ai qd meme bien c*** ces derniers jours, impossible de trouver sur le net qqch qui soit valable et qui corresponde (a peu pres)!

Merci à vous deux alors :))))))))))))))))
0
Rejoignez-nous