[HELP] Duplication de Composant ou Utilisation de tempaltes

Signaler
Messages postés
113
Date d'inscription
vendredi 16 août 2002
Statut
Modérateur
Dernière intervention
15 mai 2005
-
Messages postés
113
Date d'inscription
vendredi 16 août 2002
Statut
Modérateur
Dernière intervention
15 mai 2005
-
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

Messages postés
113
Date d'inscription
vendredi 16 août 2002
Statut
Modérateur
Dernière intervention
15 mai 2005

-
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
2
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) ---
Messages postés
113
Date d'inscription
vendredi 16 août 2002
Statut
Modérateur
Dernière intervention
15 mai 2005

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
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
2
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) ---
Messages postés
113
Date d'inscription
vendredi 16 août 2002
Statut
Modérateur
Dernière intervention
15 mai 2005

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
Messages postés
113
Date d'inscription
vendredi 16 août 2002
Statut
Modérateur
Dernière intervention
15 mai 2005

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

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!!!!!!!!!!!
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
2
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) ---
Messages postés
113
Date d'inscription
vendredi 16 août 2002
Statut
Modérateur
Dernière intervention
15 mai 2005

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
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
2
Merci pour le compliment...

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

--- :sleepy) Nono du Moulin :sleepy) ---
Messages postés
113
Date d'inscription
vendredi 16 août 2002
Statut
Modérateur
Dernière intervention
15 mai 2005

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 :))))))))))))))))