Cherche divers tips et débuggages [Delphi] - Programmation
Marsh Posté le 22-03-2002 à 19:12:48
Ciler a écrit a écrit : World - J'ai vu sur les compos du BUpack qu'il est possible de changer l'apparence des composants non visuels (comme TBUTrayIcon) avec autre chose que la bête icone rond carré triangle. Seulement, je ne trouve pas comment faire dans l'aide. |
On parle de moi? :-D
Changer l'apparence d'un compo non visuel?
C'est comme si tu me disais que tu veux repeindre le ciel en rouge, c'est bien poétique mais ca n'a aucun sens.
Citation : |
En local tu dois toujours tout initialiser oui, si c'est une variable appartenant à une classe, tout est à 0 par défaut, mais faudrait peut être expliquer ce que tu veux faire
Citation : |
Faut foutre les SP sur ton NT, sinon ca marchera jamais... Et même ton Windows 98 faut le tenir à jour sinon ton application Delphi tournera pas terrible.
Citation : |
Houla, ce fut long à lire ton truc ;-)
Utilise pas le high mais un TObjectList, c'est beaucoup plus simple, et surtout beaucoup plus sur ;-)
Tu rajoutes juste tes éléments de cette liste, et quand tu veux tout virer tu fais juste TObjectList.Clear, pas besoin de free ni quoi que ce soit, il fait tout comme un grand.
Reviens nous voir quand tu auras modifié ca ;-)
Sinon essaie de faire un trace pour voir ou ca plante, c'est pas fait pour les chiens un debugger, et c'est vachement utile
Marsh Posté le 22-03-2002 à 19:43:27
Buitoni a écrit a écrit : Utilise pas le high mais un TObjectList, c'est beaucoup plus simple, et surtout beaucoup plus sur ;-) Tu rajoutes juste tes éléments de cette liste, et quand tu veux tout virer tu fais juste TObjectList.Clear, pas besoin de free ni quoi que ce soit, il fait tout comme un grand. |
T'aurais pu me le dire plus tôt que ça existait, moi j'utilisais des TList et je m'amusait à faire les Free etc...
Marsh Posté le 22-03-2002 à 21:01:01
C'est sympa ce truc ;-)
Y en a d'autres dans le genre, faut zieuter dans l'unité
Marsh Posté le 23-03-2002 à 17:39:13
Buitoni a écrit a écrit : En local tu dois toujours tout initialiser oui, si c'est une variable appartenant à une classe, tout est à 0 par défaut, mais faudrait peut être expliquer ce que tu veux faire Faut foutre les SP sur ton NT, sinon ca marchera jamais... Et même ton Windows 98 faut le tenir à jour sinon ton application Delphi tournera pas terrible. Houla, ce fut long à lire ton truc ;-) Utilise pas le high mais un TObjectList, c'est beaucoup plus simple, et surtout beaucoup plus sur ;-) Tu rajoutes juste tes éléments de cette liste, et quand tu veux tout virer tu fais juste TObjectList.Clear, pas besoin de free ni quoi que ce soit, il fait tout comme un grand. Reviens nous voir quand tu auras modifié ca ;-) Sinon essaie de faire un trace pour voir ou ca plante, c'est pas fait pour les chiens un debugger, et c'est vachement utile |
Pour le PChar, rien de spécial en fait, je les ai utilisés sans les intialiser jusqu'au jour ou je me suis rendu compte que c'étatit des pointeurs, et qu'il vallait mieux les initialiser donc.
SP = Servide Pack ? oula, galère, je suis pas admin sous NT moi ...
On va essayer le TObjectList !
Sinon pour le debugger et le pas à pas, merci, je les ai utilisés ! Si je fais un pas à pas, le problème se situe dans la dll avec "valeur inconnue du fait des optimisations du compilateur" mais je rapelle que la dll est OK puisque sans mon pb de supression des boutons, la foncyion marche comme il faut
Merci pour l'aide
Marsh Posté le 23-03-2002 à 17:52:33
Ciler a écrit a écrit : "valeur inconnue du fait des optimisations du compilateur" |
Si jamais tu veux désactiver ces optimisations (qui en cas de debug sont parfois génantes) c'est dans les options du projet, il y a une case "Optimizations".
Marsh Posté le 25-03-2002 à 08:20:17
antp a écrit a écrit : Si jamais tu veux désactiver ces optimisations (qui en cas de debug sont parfois génantes) c'est dans les options du projet, il y a une case "Optimizations". |
J'avais vu oui !
Mais comme je l'ai dit plus haut, les optimisations ne sont pas en cause car :
1 - même bug si je les désactive
2 - pas de bug si je n'essaie pas d'éliminer ces boutons:gun:
Marsh Posté le 25-03-2002 à 09:37:52
Ce sont des boutons que tu as insérés sur la Form ?
Si oui, il faut savoir que lorsque la Form se libère, elle libère tous ses composants !
Et si on libère deux fois la même zone mémoire... ça crashe
Essaie de mettre
Form1.RemoveControl(MonTableaudeBoutons[i]);
MonTableaudeBoutons[i].Free;
Marsh Posté le 25-03-2002 à 10:30:40
antp a écrit a écrit : Form1.RemoveControl(MonTableaudeBoutons[i]); MonTableaudeBoutons[i].Free; |
Les deux ? Je pensais queseuk le 2e était nécessaire...
Marsh Posté le 25-03-2002 à 10:41:57
Le 1er enlève le bouton de la Form
Le 2e libère la mémoire en détruisant le bouton
Si tu ne fais que libérer la mémoire (juste le 2e), le bouton "appartient" encore à la Form. Vu que la Form a la liste des composants qui lui appartiennent, à sa destruction elle détruit chacun des composants.
Quand tu insères le bouton dans la Form, tu fais un InsertControl, je suppose ?
À confirmer, mais j'ai déjà remarqué ça plusieurs fois, donc je pense que je n'ai pas dit trop de bêtises
[jfdsdjhfuetppo]--Message édité par antp--[/jfdsdjhfuetppo]
Marsh Posté le 26-03-2002 à 07:56:09
Non, je fais pas insertControl
Je fais
xxx = TMyButton.Create;
xxx.Parent := Form1;
Bon, ben je vais essayer...
@Buitoni : TObjectList pose un problème, je n'arrive pas àaccéder aux propriétés de chaque contrôle, ce qui m'est nécessaire...
Marsh Posté le 26-03-2002 à 09:34:26
".Parent := " je crois que ça fait exactement pareil que le InsertControl, donc tu dois faire le RemoveControl (ou peut-être mettre le parent à nil ?)
Pour la TObjectList:
TButton(MaListe.Item[0]).Caption := ....
Marsh Posté le 26-03-2002 à 09:51:47
antp a écrit a écrit : Pour la TObjectList: TButton(MaListe.Item[0]).Caption := .... |
Joli ça
Marsh Posté le 26-03-2002 à 11:06:45
mieux si on doit y accéder plusieurs fois dans la même procédure :
with TButton(MaListe.Item[0]) do
begin
Caption := ...;
Left := ...;
end;
Marsh Posté le 26-03-2002 à 11:42:09
antp a écrit a écrit : mieux si on doit y accéder plusieurs fois dans la même procédure : with TButton(MaListe.Item[0]) do begin Caption := ...; Left := ...; end; |
spa con
Marsh Posté le 22-03-2002 à 18:53:34
World
Etant relativement débutant en Delphi, je bloque sur les points suivants, et j'espère que vous pourrez m'aider :
//Questions pipeau pour se mettre en jambe
- J'ai vu sur les compos du BUpack qu'il est possible de changer l'apparence des composants non visuels (comme TBUTrayIcon) avec autre chose que la bête icone rond carré triangle. Seulement, je ne trouve pas comment faire dans l'aide.
- Un PChar, ça s'initialise ?
//Plus dur (enfin je crois)
- Pourquoi mon appli faite sous 98 avec Delphi ne veut pas se lancer sous NT "La bibliothèque de liaison dynamique user32 est introuvable" alors que la dll est bien dans system32 ?
//Là, je sèche carrément :
J'ai une autre appli qui fait appel à une fonction d'une dll. Cette fonction reçoit en paramètre un pointeur vers une structure qu'elle est censée remplir. A partir de cette structure, mon appli crée un certain nombre de boutons sur la fiche à l'exécution.
Dans un menu, j'ai donc mis un code qui nettoie tous les boutons éventuellement existants et l'appel àla procédure de la dll puis la création des boutons. Et c'est là que le merdier commence !
Si j'appelle le menu une fois tout est OK,
Si je rapelle le menu, il efface les anciens boutons et en crée des nouveaux (pas forcement le même nombre)
Là, si je re-rapelle le menu, une exception se produit dans la dll.
Le truc, c'est que si je supprime le code de nettoyage des boutons, tout marche impec autant de fois que je veut
Pour info, mes boutons sont stockés dans
MonTableaudeBoutons: array of TButton et pour les dégager je fais
for i:= 0 to High(MonTableaudeBoutons) do
MonTableaudeBoutons[i].Free;
SetLength(MonTableaudeBoutons,0)
Vous voyez ce qui peut poser problème ?
---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8