Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 2013
-
15 nov. 2006 à 12:10
fredelem
Messages postés136Date d'inscriptiondimanche 29 octobre 2006StatutMembreDernière intervention 1 décembre 2022
-
5 mars 2009 à 21:15
bien le bonjour, me revoila pour une question un peu bete mais je ne trouve pas de solution.
j'ai une form qui contient plusieurs panels, qu'on peut assimiler a des tabsheet (onglets). j'ai un composant que je deplace (via la propriete parent) sur le panel visible, pour un sous ensemble de mes panels.
plus clairement, j'ai 5 panels, et si le panel visible est le numero 1, 2 ou 4, alors je deplace mon composant dessus, sinon, je le laisse sur le dernier panel qu'il a eu.
Ensuite, sur ma form, j'ai un keyPreview qui donne le focus au composant.
le probleme, c'est que si le panel visible ne contient pas le composant (panel 0 ou 3 ds mon exemple), alors j'ai le joli message:
Le projet Machin.exe a provoqué une classe d'exception EInvalidOperation avec le message 'Impossible de focaliser une fenêtre désactivée ou invisible'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
j'ai essaye de faire
if (monComposant.visible) then
monComposant.focused := true;
mais la propriete visible est true quand il est sur un panel masqué.
PS: mes panels sont placés sur des KWizardPage, et l'arborescence de ces panels n'est pas la meme en fonction du panel.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 17 nov. 2006 à 18:12
Oui sur ce cas de figure
mais je viens de voir que je n'aurais pas du écourter le code ...
puisque chez moi le code continue et n'a pas le droit de s'executer au delà du Try Finally End; si Data = 0
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 18 nov. 2006 à 14:04
pour l'histoire de la lisibilité, c'est, comme je le disais, surtout pour parcourir les fonctions.
par exemple quand tu regarde rapidement une fonction, et que tu as un break ou un exit en plein mileu, tu ne vois pas forcement sans regarder le code plus en detail.
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 19 nov. 2006 à 02:30
@Guillemouze:
"'un fonction de 200 lignes" hum, ça c'est contre ma religion! Car une fct de plus d'une centaine de ligne, ça devient dure a débogguer et c'est une source de problème/bug.
"pour ne pas utiliser un while" hum, un break peut ce mettre au milieux de la boucle. pas un while.
disons, que c'est souvent pratique de pouvoir gérer des cas limite à l'aide d'un exit, plustot que de faire des if begin-end partout. (j'ai vu des fonction commencant par un "if data<>nil then begin" et le if finisait.... jsute avant le end de la fonction. bref. comme tu dis, pour une grande part, c'est une question de gout personel. n'empeche que c'est bien pratique.
Vous n’avez pas trouvé la réponse que vous recherchez ?
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 19 nov. 2006 à 10:29
Pour ajouter mon petit grain de sel, je trouve qu'il est parfois évident de préférer l'utilisation de Break ou Exit pour des raisons de lisibilité du code, et j'ajouterai qu'un commentaire bien placé trouvera là toute son utilité !
Après, il faudrait vérifier au niveau du code compilé, mais à mon avis un if then suivi d'exit placé au début d'une suite d'instructions doit équivaloir à un if then suivi d'un bloc begin..end.
Surtout que, mine de rien, l'indentation nous amène vite vers des codes plus larges que l'écran, lol
fredelem
Messages postés136Date d'inscriptiondimanche 29 octobre 2006StatutMembreDernière intervention 1 décembre 20222 5 mars 2009 à 21:15
Il y a des fois où on a ce message de façon totalement injustifiée. En pariculier, lorsqu'on passe d'une "form" à une autre.
Quelquefois, on évite le problème en écrivant "ActiveCobtrol=Button1" au lieu de "Button1.SetFocus".
D'autres fois (pas toujours), les choses s'arrengent siŽ, au lieu d'écrire:
Form2.Button1.Setfocus;
on écrit deux lignes:
Form2.Setfocus;
Form2.Button1.Setfocus;
Quelquefois aussi, si on intercale un showmessage, on évite le message d'erreur:
Showmessage('Coucou');
Form2.Button1.Setfocus;
Mais ce remède est aussi mauvais que le mal ! Par quoi remplacer ce showmessage ? Par "Application.ProcessMessages" ? non, ça ne donne rien.