Mon dernier "problème" de la semaine ...
Je voulais utiliser un TTaskDialog pour proposer plusieurs choix de réponses à une question.
Une solution consiste à l'utiliser avec les RadioButton.
Je voulais essayer une autre façon avec les CommandLinks, de façon à proposer une possibilité de réponse en une seule action au lieu de choisir puis de valider le choix.
Pour créer la boite de dialogue, pas de problème !
Par contre, récupérer le choix fait par l'utilisateur, je n'y arrive pas.
J'ai essayé de lier une pseudo class de façon à la lier à l'évènement OnButtonClicked du TTaskDialog mais dans la procédure d'évènement, je ne n'arrive pas à récupérer l'info voulue.
Voici mon code :
Pour l'utiliser :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 type TClickBouton = class private FReponse: Byte; public constructor Create; procedure OnClick(Sender: TObject; ModalResult: TModalResult; var CanClose: Boolean); procedure OnClick2(Sender: TObject); property Reponse: Byte read FReponse write FReponse; end; ... function ChoixMultiples(Titre, Question: string; Choix: TStringDynArray; out Reponse: Byte): Boolean; var I: Integer; Clk: TClickBouton; Rep: Byte; begin if ThemeServices.ThemesEnabled and (Win32MajorVersion >= 6) then begin Clk := TClickBouton.Create(); with TTaskDialog.Create(nil) do begin try Caption := Application.Title; Title := Titre; Text := Question; CommonButtons := []; MainIcon := tdiInformation; for I := Low(Choix) to High(Choix) do with TTaskDialogButtonItem(Buttons.Add) do begin Caption := Choix[I]; ModalResult := mrNone; Tag := I; end; Flags := [tfUseCommandLinks, tfAllowDialogCancellation]; OnButtonClicked := Clk.OnClick; if Execute then begin Result := True; Reponse := Clk.FReponse; end; finally Clk.Free; Free; end end; end; end; ... procedure TClickBouton.OnClick(Sender: TObject; ModalResult: TModalResult; var CanClose: Boolean); begin FReponse := TTaskDialog(Sender).Button.Index; // <<<<<<<<<< Là, c'est toujours 0. Donc, ce n'est pas la bonne manière end;
Quelqu'un aurait-il une idée ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if UnitMultiReponses.ChoixBouton('Jour', 'Quel jour venez-vous ?', ['Lundi', 'Mardi', 'Mercredi'], Reponse) then ShowMessage(Reponse.ToString);
Je précise que chaque TTaskDialogButtonItem ajouté ne possède d'évènement OnClick mais seulement une procédure Click qui n'est pas modifiable.
Partager