Bonjour,
Cursor n'existe plus dans TScreen sous FMX.
Comment faire pour faire patienter l'utilisateur pendant un traitement un peu long ? (j'ai vu des trucs sur le web, mais qui me paraissent hyper compliqués !!)
Merci, par avance
A+
Charly
Bonjour,
Cursor n'existe plus dans TScreen sous FMX.
Comment faire pour faire patienter l'utilisateur pendant un traitement un peu long ? (j'ai vu des trucs sur le web, mais qui me paraissent hyper compliqués !!)
Merci, par avance
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
Bonjour !
Le code proposé sur cette page n'est pas trop compliqué.
Je précise que je ne l'ai pas testé.
Mon site personnel consacré à MSEide+MSEgui : msegui.net
Bonjour,
à la place tu as le TAniIndicator
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Merci, le sablier fonctionne bien.
pour le TAniIndicator, je n'ai pas encore testé. Je cherche un exemple d'utilisation (l'aide est bien faite, mais par rapport à D7, je trouve qu'elle ne donne pas les propriétés, ni les méthodes et qu'il n'y a pas d'exemples. Dommage !)
A+
Charly
PS : FMX dur dur : pas mal d'unités ont été renommées, certains Controls ont changé d'unité, certaines propriétés n'existent plus (exemple Application.exename) ... Mais il y a surement de bonnes raisons
Mon site : http://lapaille.byethost24.com/index.htm
L'aide par F1 oui, mais si tu passes par le docwiki ...
Comme la portabilité entre OS après tout c'est le principal objectifFMX dur dur : pas mal d'unités ont été renommées, certains Controls ont changé d'unité, certaines propriétés n'existent plus (exemple Application.exename) ... Mais il y a surement de bonnes raisons
et y a pas que certaines propriétés qui n'existent plus , certains composants ont disparus où ne sont plus aux mêmes endroits i.e TPageControl n'existe plus remplacé par TTabControl, il y TLabel mais aussi TText ....
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Merci pour le lien je vais potasser tout cela (et me servir de DocWiki)
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
Bonjour,
sous FMX, en Win64, pourquoi le curseur revient à crDefault à la fin de ce traitement (après le Sleep(2000)) :
Est ce qu'il ne devrait pas rester à CrHourGlass ?
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 procedure TForm3.Button6Click(Sender: TObject); var CS: IFMXCursorService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXCursorService) then begin CS := TPlatformServices.Current.GetPlatformService(IFMXCursorService) as IFMXCursorService; end; if Assigned(CS) then begin Cursor := CS.GetCursor; CS.SetCursor(crHourGlass); end; Sleep(2000); end;
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
@ Charly910, bonjour tu ne devrais pas finir avec je pense :
@+,
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 procedure TForm3.Button6Click(Sender: TObject); var CS: IFMXCursorService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXCursorService) then begin CS := TPlatformServices.Current.GetPlatformService(IFMXCursorService) as IFMXCursorService; end; if Assigned(CS) then begin Cursor := CS.GetCursor; CS.SetCursor(crHourGlass); try Sleep(2000); finally CS.SetCursor(Cursor); //ou (crHourGlass) end; end;
cincap
Bonjour Cincap,
même avec CS.SetCursor(CrHourGlass) à la fin, après Finally, cela ne change rien : le curseur revient à crDefault (la flèche)
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
Et en mettant CS en variable globale ?
Mon site personnel consacré à MSEide+MSEgui : msegui.net
Merci, mais je voudrais l'éviter, car je voudrais mettre ce code dans une fonction qui active le sablier (ou qui le désactive)
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
Parce que cs est un interface libéré après usage.
Si tu suis attentivement la démo de Alistair Christie indiquée par Papy214 cela me semble assez clair car il couvre les différentes possibilités
@cincap cs est détruit, puisque déclaré comme interface donc le finally ne sert pas à grand chose
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
J'ai reregardé la video, mais cela ne répond pas à mon problème. Finalement, je fais tout simplement cela :
Seul petit Pb, le sablier ne s'affiche pas dans les Controls enfants de la fenêtre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Procedure Sablier(Indic:Integer) ; Begin If Indic = 1 Then Screen.ActiveForm.Cursor := crHourGlass Else Screen.ActiveForm.Cursor := crDefault ; End;
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
@ Charly910,
J'avais trouvé ceci on ne sait jamais :
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
70
71
72
73
74
75 unit Unit2; interface uses FMX.Platform, FMX.Types, System.UITypes; type TWinCursorService = class(TInterfacedObject, IFMXCursorService) private class var FPreviousPlatformService: IFMXCursorService; class var FWinCursorService: TWinCursorService; class var FCursorOverride: TCursor; class procedure SetCursorOverride(const Value: TCursor); static; public class property CursorOverride: TCursor read FCursorOverride write SetCursorOverride; class constructor Create; procedure SetCursor(const ACursor: TCursor); function GetCursor: TCursor; end; implementation { TWinCursorService } class constructor TWinCursorService.Create; begin FWinCursorService := TWinCursorService.Create; FPreviousPlatformService := TPlatformServices.Current.GetPlatformservice(IFMXCursorService) as IFMXCursorService; // TODO: if not assigned TPlatformServices.Current.RemovePlatformService(IFMXCursorService); TPlatformServices.Current.AddPlatformService(IFMXCursorService, FWinCursorService); end; function TWinCursorService.GetCursor: TCursor; begin result := FPreviousPlatformService.GetCursor; end; procedure TWinCursorService.SetCursor(const ACursor: TCursor); begin if FCursorOverride = crDefault then begin FPreviousPlatformService.SetCursor(ACursor); end else begin FPreviousPlatformService.SetCursor(FCursorOverride); end; end; class procedure TWinCursorService.SetCursorOverride(const Value: TCursor); begin FCursorOverride := Value; TWinCursorService.FPreviousPlatformService.SetCursor(FCursorOverride); end; end. MainUnit: procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin TWinCursorService.CursorOverride := crHourGlass; try Sleep(2000); finally TWinCursorService.CursorOverride := crDefault; end; end;
Je pensais qu'avec cette version de Delphi, le simple fait de choisir "Curseur" dans les propriétés du composant pouvait remplacer le curseur mais apparemment cette propriété n'existe plus ?
@+,
cincap
La propriété Cursor existe encore pour TScreen et TButton par exemple.
On peut donc faire :
pour activer ou désactiver le sablier sur la fenêtre et ses boutons.
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 Procedure Sablier(Indic:Integer) ; Var i : Integer ; MyControl : TComponent ; Begin If Indic = 1 Then Begin Screen.ActiveForm.Cursor := crHourGlass ; for i := 0 to Screen.ActiveForm.ComponentCount - 1 do begin MyControl := Screen.ActiveForm.Components[i] ; if MyControl is TButton then begin with MyControl as TButton do cursor := CrHourGlass ; end; end; End Else Begin Screen.ActiveForm.Cursor := crDefault ; for i := 0 to Screen.ActiveForm.ComponentCount - 1 do begin MyControl := Screen.ActiveForm.Components[i] ; if MyControl is TButton then begin with MyControl as TButton do cursor := CrDefault ; end; end; End End;
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager