sebmime
Messages postés11Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention 8 septembre 2004
-
2 juil. 2004 à 11:28
sebmime
Messages postés11Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention 8 septembre 2004
-
8 sept. 2004 à 09:54
Bonjour,
Mon application permet de créer des petites zones de texte (des TMEMO) qui sont affichées sur une TFORM.
je créé donc mes TMemo avec des "create".
Le problème est que l'application plante lorsque je veux supprimer un TMEMO qui est en dehors de la zone d'affichage de la TFORM.
Pour le supprimer je fais : monMemo.free.
Ceci fonctionne néanmoins lorsque la zone de texte (le TMEMO) est dans la zone d'affichage de la TFORM.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 3 juil. 2004 à 08:32
Le problème ne peut pas provenir du fait que le TMemo soit en dehors de la surface cliente de la fiche.
Cela est surement lié au fait que tu essaies de détruire un objet que tu as déjà détruit avant.
Comment stockes-tu les références des TMemo créés dynamiquement ?
Ou alors, comment procèdes-tu pour détruire ces différents TMemo ?
May Delphi be with you
sebmime
Messages postés11Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention 8 septembre 2004 6 sept. 2004 à 17:27
Nan nan je pense pas que çà vienne de çà puisque le problème existe même quand je ne détruit pas les TMemo.
Je les stocke dans un tableau. Ils sont créés dynamiquement.
Tout fonctionne parfaitement comme je le veux sauf que quand je déplace un TMemo par dessus un autre, celui de dessous est affiché et il n'est pas caché par celui du dessus. C'est une question de priorité d'affichage je pense. Mais je sais pas comment le résoudre.
sebmime
Messages postés11Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention 8 septembre 2004 7 sept. 2004 à 09:51
OK,
J'ai un record qui contient mon TMemo (et d'autres choses mais je simplifie) :
Composant_etape = record
texte_associe : TMemo;
end;
//////////////////////////
La fonction utilisé pour initialiser un Composant_etape est :
function creerEtape : Composant_etape;
var
etape : Composant_etape;
begin
etape.texte_associe := TMemo.create(forme);
result := etape;
end;
//////////////////////////
La fonction utilisé pour afficher un Composant_etape est :
procedure afficherEtape(etape : Composant_etape; form : Form);
begin
etape.texte_associe.Parent := form;
....
end;
//////////////////////////
Je stocke mes Composant_etape dans un tableau :
Etape_array : Array [1..nombreEtapeMax] of Composant_etape;
Ensuite, dans ma TForm, je crée un Composant_etape lorsque je clique sur la TForm :
procedure TmainFRAME_editeur_grafcet.FormMouseDown (Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Etape_array[NbEtapes] := creerEtape;
end;
////////////////////////////
Le Composant_etape est enfin dessiner avec la methode PAINT :
procedure TmainFRAME_editeur_grafcet.FormPaint(Sender: TObject);
var
i : integer;
begin
for i := 1 to NbEtapes do
begin
afficherEtape(Etape_array[i], mainFRAME_editeur_grafcet);
end;
end;
mainFRAME_editeur_grafcet est la TForm.
Voila je crois que j'ai tout mis. J'ai simplifié un peu le code donc c'est normal si des fonctions paraissent inutiles, elles sont simplifiées.
Sinon, j'ai utilisé des Record pour une question de simplification.Idem j'ai simplifié les Composant_etape, ils sont plus complexes que çà. Mais tout ce que j'ai simplifié n'intervient pas pour mon problème.
Voila, donc le problème est que lorsque j'affiche plusieurs Composant_etape et que ceux-ci se superposent, le dernier affiché ne masque pas toujours ceux qui sont dessous. L'ordre d'affichage me semble aléatoire et donc j'ai aucun controle et c'est çà qui me pose problème.
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
sebmime
Messages postés11Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention 8 septembre 2004 8 sept. 2004 à 09:54
C'est çà j'incremente NbEtapes dans la fonction creerEtape.
Mais je rappelle (meme si le choix des record n'est pas le meilleur) que tout fonctionne parfaitement.
Le seul problème est lorsque 2 TMemo se superposent. Je ne sais pas comment masquer celui du dessous par celui du dessus.
Est-ce que tu aurais un exemple de code ou on affiche 2 TMemo sur un canvas en controlant l'ordre d'affichage.