Détruire une form proprement... [Delphi] [dernière ligne droite] - Programmation
Marsh Posté le 24-01-2002 à 21:38:50
T'as essayé  
ModifierBateau.Free; 
ModifierBateau := nil; 
 
sinon tu fais 
if ModifierBateau <> nil then 
begin 
  ModifierBateau.Free; 
  ModifierBateau := nil; 
end; 
Marsh Posté le 24-01-2002 à 21:45:45
et avec la méthode destroy de l'objet TForm? ça marche, non?
Marsh Posté le 24-01-2002 à 21:45:46
Pareil poire, cher poire  
 
 
Ouip, on a testé, sans succes... Idem avec Sender as Tobject  
 
 
Ce qui est étrange, C que si j'apelle  ModifierBateau.close apres la fonction ci dessus, ca merde. 
 
Si je ne l'apelle pas, et que je clique sur la croix de la fenetre apres la modif, ca marche... 
 
Donc franchement, je sais pas  
 
Marsh Posté le 24-01-2002 à 21:46:48
| rufo a écrit a écrit  : et avec la méthode destroy de l'objet TForm? ça marche, non? | 
 
 
Exactement pareil  
 
Marsh Posté le 24-01-2002 à 21:47:57
| Tetedeiench a écrit a écrit  : Ce qui est étrange, C que si j'apelle ModifierBateau.close apres la fonction ci dessus, ca merde. Si je ne l'apelle pas, et que je clique sur la croix de la fenetre apres la modif, ca marche... Donc franchement, je sais pas   | 
 
Et t'as pas le droit d'appeler ModifierBateau.close si tu a détruit ModifierBateau C pour ça que t'as une erreur mémoire 
Marsh Posté le 24-01-2002 à 21:51:06
nop, parce que la fonction au dessus s'execute avant le close ... 
 
Les lignes freeandnil sont dans le "Onclose" de la Tform ... 
Marsh Posté le 24-01-2002 à 21:51:37
il faut faire d'abord le close puis le free en vérifiant que C pas à nil....
Marsh Posté le 24-01-2002 à 21:52:13
Ce qui est bizarre, C que sur pas mal de forms de mon projet, ca passe ... 
 
Sur d'autres, ca passe pas . 
 
Capte pas  
 
Marsh Posté le 24-01-2002 à 21:52:49
| [SDF]Poire a écrit a écrit  : il faut faire d'abord le close puis le free en vérifiant que C pas à nil.... | 
 
 
Je peux pas faire de close, ca équivaut a diminuer la form (elle est en TformStyle = MDIchild ) 
 
Donc des que l'utilisateur veut la fermer ben je la détruit, tout simplement. 
[edtdd]--Message édité par Tetedeiench--[/edtdd]
Marsh Posté le 24-01-2002 à 21:52:53
procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
  Action := caFree; 
end; 
 
+ de free ou autre et roulez  
 
Marsh Posté le 24-01-2002 à 21:53:33
On a à chaque fois qq secondes de décalage et C relou  
 
Marsh Posté le 24-01-2002 à 21:55:45
MAGNIFIQUE SDF POIRE ! 
 
Décidément, tu es mon dieu  
 
 
Tu peux m'expliquer cependant ? 
Marsh Posté le 24-01-2002 à 21:58:06
c simple : caFree demande a libéré la form à la fermeture au lieu de la cacher.  
G eu le même pb y a pas longtemps  
 
Merci Buitoni   
 
Marsh Posté le 24-01-2002 à 22:05:09
| [SDF]Poire a écrit a écrit  : c simple : caFree demande a libéré la form à la fermeture au lieu de la cacher. G eu le même pb y a pas longtemps   Merci Buitoni   | 
 
Ouh que oui bourdail  
 
 
Plus que 3 jours, et pas mal de choses a faire ( un flux au démarrage pour lire un fichier texte contenant des données "basiques" qu'on doit mémoriser, pas mal de Tform d'ajout, modification et suppression d'enregistrement (chiant) et quelques autres trucs... 
 
MAIS HEUREUX BOURDAIL on a plus d'obstacle a priori... 
 
Meme OLE s'est plié a notre volonté  
 
Marsh Posté le 24-01-2002 à 22:07:48
| Tetedeiench a écrit a écrit  : Plus que 3 jours, et pas mal de choses a faire ( un flux au démarrage pour lire un fichier texte contenant des données "basiques" qu'on doit mémoriser | 
 
Pour ça utilise un TIniFile C trés pratique   
 
Marsh Posté le 24-01-2002 à 22:14:21
Oui mais bon, ca reste un projet ... 
 
Donc on veut montrer qu'on sait en faire des choses  
 
 
Si on y arrive pas pour le flux, on fera via le Tinifile, sois en persuadé ! 
 
On aura pas créé de composant par contre, mais on aura programmé un menu de la maurkitue a gauche  
 
Marsh Posté le 24-01-2002 à 22:24:39
euh... T fada ? utilise TIniFile pour sauver des options... va pas te galéré avec 1 TFileStream
Marsh Posté le 24-01-2002 à 22:48:11
ouaip, tu dois avoir raison  
 
Marsh Posté le 24-01-2002 à 22:49:58
| Tetedeiench a écrit a écrit  : ouaip, tu dois avoir raison   | 
 
Oui oui je te jure  
  
  
 
Marsh Posté le 24-01-2002 à 23:32:57
haaa j'arrive trop tard, c pcq y a un super topic de 8 pages sur un boolay et ses 1 millions de mail sur software & reseau 
 
Release; 
Freeandnil(ModifierBateau); 
 
normal que ca plante 
 
Release -> libère la form quand elle a traité tous ses évenements 
FreeAndNil -> libère la form tt de suite et la met a nil 
 
tu dois faire: 
 
Release; 
ModifierBateau := nil; 
 
la form sera bien libérée par le release (normalement). 
 
 
edit: apparemment la solution de Poire avec le caFree est bonne aussi, ça doit faire la même chose. 
[edtdd]--Message édité par antp--[/edtdd]
Marsh Posté le 24-01-2002 à 23:33:14
Merde, il est ou ce composant ? 
 
je le vois pas  
 
Marsh Posté le 24-01-2002 à 23:37:57
| Tetedeiench a écrit a écrit  : Merde, il est ou ce composant ? je le vois pas   | 
 
 
quel compo ? 
Marsh Posté le 24-01-2002 à 23:49:43
Tinifile  
 
Marsh Posté le 24-01-2002 à 23:54:35
c'est pas un compo visuel. 
ex : 
| Code : 
 | 
 
 
etc... 
[edtdd]--Message édité par antp--[/edtdd]
Marsh Posté le 25-01-2002 à 00:04:17
Ouh ma foi C zouli ... 
 
Je le note  
 
Marsh Posté le 24-01-2002 à 21:23:30
Vous auriez une méthode pour détruire, mais vraiment détruire une form ?
Parce que la, quand je fais ca :
Ca me renvoie un access violation, qui disparait des que j'enleve la dernière ligne...
j'ai essayé de détruire cette form avec freeandnil depuis une autre Tform, mais ca a pas marché
Il y a un moyen d'éviter cette erreur ?
---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !