Salut
Je ne sais pas pourquoi ce code ne fonctionne pas !!
Code:
1
2
3
4
5
6
7 For H := 1 to 45 do begin if (Form8.Components[H] is TQRLabel) then begin TQRLabel(Form8.Components[H]).Caption := ''; end; end;
Version imprimable
Salut
Je ne sais pas pourquoi ce code ne fonctionne pas !!
Code:
1
2
3
4
5
6
7 For H := 1 to 45 do begin if (Form8.Components[H] is TQRLabel) then begin TQRLabel(Form8.Components[H]).Caption := ''; end; end;
En quoi ne fonctionne-t-il pas ?
1) Il ne trouve pas tous les QRLabels ? S'il y en a 45 et d'autres composants sur la fiche, il faudrait qu'ils aient les indices 1 à 45 pour que ça fonctionne.
2) En mettant le Caption à vide, ils ne sauraient être numérotés.
Il vaudrait mieux parcourir tous les composants de la fiche de 0 à ComponentCount-1, tester s'il s'agit d'un TQRLabel, puis lui affecter quelque chose. L'inconvénient est qu'on risque de ne pas les avoir dans l'ordre, si c'est nécessaire.
S'il s'agit d'adresser tous les TQRlabels nommés de QRLabel1 à QRLabel45 (et seulement eux), utiliser la méthode précédente en testant le nom, ou utiliser la méthode FindComponent de la fiche avec le nom voulu.
Pour autre chose, la question était par trop vague, mais il est temps de la préciser.
Bonjour,
le TQRLabel me met la puce à l'oreille, il doit s'agir de Quickreport et, à ma souvenance ces composants ont un TQuickreport comme parent et non une forme
Tu as besoin d'une procedure récursive. En voici un exemple que tu peux adapter à ton besoin
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 function Enumere(stNom: string; c1: TComponent): string; var i1: Integer; begin result := ''; if c1.Name <> '' then result := c1.Name + ':' + c1.ClassName; for i1 := 0 to c1.ComponentCount - 1 do Enumere(stNom, c1.Components[i1]); if result <> '' then sl1.Add(stNom + '.' + result); result := ''; end; procedure ParcoureForm(stNom: string; c1: TComponent); begin repeat if assigned(c1) then st1 := Enumere(stNom, c1) else showMessage(stNom); until st1 = ''; end; ... ParcoureForm('Form8', Form8);
La solution d'ALWEBER est certainement la bonne, il faut que tu notes au passage 2 informations très importantes :
- Les boucles commencent à 0
- 45, 465 ... tu va être hors des limites, il y a ComponentCount pour ça
Code:For H := 0 to Form8.ComponentCount-1 do
Bonjour,
je n'ai pu que vérifier avec version D3
une forme simple avec un bouton, un memo, un Quickreport contenant un QRLabel avec valeur (caption) de départ de départ QRLabel1
résultat, contrairement à mes souvenirs, le QRLabel appartient bien à la formeCode:
1
2
3
4
5
6
7
8
9
10
11
12 procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin Memo1.clear; for i:=0 to componentcount-1 do begin memo1.lines.Add(Components[i].Name); if Components[i] is TQRLabel then TQRLabel(Components[i]).Caption:='Changed'; end; Quickrep1.Preview; end;
Pièce jointe 435872
Mais, attention, la version de Delphi, comme celle de quickreport peut totalement changer la donne