unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Contnrs; type TCustomControl=class(TControl); TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Memo1: TMemo; Button1: TButton; CheckBox1: TCheckBox; ScrollBar1: TScrollBar; procedure Button1Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var listeobjet: TObjectList; Index:Integer; begin try listeobjet := TObjectList.Create(False); listeobjet.Add(Label1); listeobjet.Add(Edit1); For Index:=0 To ListeObjet.Count-1 Do TCustomControl(listeobjet.Items[index]).Font.Style := [fsBold]; finally FreeAndNil(listeobjet); end; end; end.
for i := 0 to Pred(listeobjet.Count) do begin if (listeobjet.Items[i] is TLabel) then ;// TLabel(listeobjet.Items[i]).Faire quelquechose if (listeobjet.Items[i] is TEdit) then ;// TEdit(listeobjet.Items[i]).Faire quelquechose // Ainsi de suite pour les autres end;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionIn [TEdit,TLabel,TBlabla]
procedure TForm1.Highlight(TagNb: Integer); var i : Integer; begin for i := 0 to Self.ComponentCount -1 do begin if Self.Components[i].Tag = TagNb then begin Case TagNb of 1: (Self.Components[i] as TEdit). Font.Style := [fsBold]; 2: (Self.Components[i] as TButton).Font.Style := [fsBold]; end; end; end; end; procedure TForm1.SwitchOff(TagNb: Integer); var i : Integer; begin for i := 0 to Self.ComponentCount -1 do begin if Self.Components[i].Tag = TagNb then begin Case TagNb of 1: (Self.Components[i] as TEdit). Font.Style := []; 2: (Self.Components[i] as TButton).Font.Style := []; end; end; end; end;
TControl(listeobjet.Items[i]).Font.Style := [fsBold];
@caribensila : merci beaucoup grâce à toi je viens d'apprendre le coup du "as" ! Si j'ai bien compris, TEdit(Self.Components[i]) équivaut à (Self.Components[i] as TEdit) ? Concernant mon problème précis ta solution me semble plus complexe à utiliser telle quelle. Cependant je vais essayer de m'en inspirer pour améliorer mon code alors un grand merci.
L'opérateur as effectue des transtypages avec vérification. L'expression :
objet as classe
renvoie une référence au même objet que objet mais avec le type spécifié par classe. A l'exécution, objet doit être une instance de la classe désignée par classe ou de l'un de ses descendants ou avoir la valeur nil ; sinon une exception est déclenchée. Si le type déclaré objet n'a pas de lien avec classe (c'est-à-dire si les types sont distincts ou si l'un n'est pas l'ancêtre de l'autre), il y a erreur de compilation. Par exemple :
with Sender as TButton do
begin
Caption := '&Ok';
OnClick := OkClick;
end;
Les règles de priorité des opérateurs obligent souvent à placer entre parenthèses un transtypage as. Par exemple :
(Sender as TButton).Caption := '&Ok';
Tu m'arrêteras si je me trompe mais si j'ai bien compris, pour utiliser une propriété protégée d'une classe, il suffit de créer une nouvelle classe dérivée de la classe qui contient la propriété protégée et de transtyper la propriété désirée avec la classe dérivée.
for i := 0 to Pred(listeobjet.Count) do...
for i := 0 to listeobjet.Count-1 do...
for i := 0 to high(listeobjet) do...
« il est important de sortir des sentiers battus (Par exemple toujours utiliser des If Then ou des Case Of) »
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type Decimal = 0..10; TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} Function IsOdd(Const Nb : Decimal) : Boolean; Begin Result:=True; {Methode 1 : Newbie} // If (Nb=0) Or (Nb=2) Or (Nb=4) Or (Nb=6) Or (Nb=8) Or (Nb=10) Then Result:=False; {Methode 2 : Cari} Case Nb Of 0,2,4,6,8,10 : Result:=False; End; {Methode 3 : f0xi} If Nb In [0,2,4,6,8,10] Then Result:=False; End; procedure TForm1.Button1Click(Sender: TObject); begin If IsOdd(4) Then Showmessage('Impaire') Else Showmessage('Paire'); end; end.
Result := (Nb mod 2) <> 0;
begin if Odd(5)then Canvas.TextOut(10,10,'5 est impair.') else Canvas.TextOut(10,10,'Il y a un problème quelque part!'); end;