Bonjour à toutes et à tous,

J'aimerai afficher sur un Tpanel le préview d'un fichier.scr.

Avec une ancienne unité permettant d'afficher le preview d'un screensaver, je ne vois que 2 fichiers alors qu'il en existe au moins 5 dans le répertoire "System32".

Je pense que l'unité n'est pas prévue pour les fichiers .scr actuels.

"Chemin := 'C:\Windows\System32'"

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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
 
unit SSpreview;
 
interface
uses
  Classes, Windows, Controls, SysUtils, ExtCtrls;
 
type
  TScreenSaverPreview = class(TCustomPanel)
  private
    FFilename: TFilename;
    function GetRunning: boolean;
    procedure SetFilename(const Value: TFilename);
    procedure SetRunning(const Value: boolean);
  protected
    FSSWindow: HWND;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
 
    procedure Configure;
  published
    property Align;
    property Alignment;
    property Anchors;
    property AutoSize;
    property BevelInner;
    property BevelOuter;
    property BevelWidth;
    property BiDiMode;
    property BorderWidth;
    property BorderStyle;
    property Caption;
    property Color;
    property Constraints;
    property Ctl3D;
    property UseDockManager default True;
    property DockSite;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property FullRepaint;
    property Font;
    property Locked;
    property ParentBiDiMode;
    property ParentColor;
    property ParentCtl3D;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property ShowHint;
    property TabOrder;
    property TabStop;
    property Visible;
    property OnCanResize;
    property OnClick;
    property OnConstrainedResize;
    property OnContextPopup;
    property OnDockDrop;
    property OnDockOver;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDock;
    property OnEndDrag;
    property OnEnter;
    property OnExit;
    property OnGetSiteInfo;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnResize;
    property OnStartDock;
    property OnStartDrag;
    property OnUnDock;
 
    property Filename: TFilename read FFilename write SetFilename;
    property Running: boolean read GetRunning write SetRunning;
  end;
 
procedure Register;
 
implementation
uses
  Messages, Forms;
 
procedure Register;
begin
  RegisterComponents('Win32', [TScreenSaverPreview]);
end;
 
function EnumProc(hWindow: HWND; lParam: LPARAM): boolean; stdcall;
begin
  TScreenSaverPreview(lParam).FSSWindow:= hWindow;
  Result := true;
end;
 
{ TScreenSaverPreview }
 
procedure TScreenSaverPreview.Configure;
begin
  WinExec(PChar(FileName + ' /c '), SW_Show);
end;
 
constructor TScreenSaverPreview.Create(AOwner: TComponent);
begin
  inherited;
  FSSWindow:= 0;
  FFIlename:= '';
end;
 
destructor TScreenSaverPreview.Destroy;
begin
  if FSSWindow <> 0 then
    PostMessage(FSSWindow, WM_CLOSE, 0, 0);
  inherited;
end;
 
function TScreenSaverPreview.GetRunning: boolean;
begin
  result:= FSSWindow <> 0;
end;
 
procedure TScreenSaverPreview.SetFilename(const Value: TFilename);
var
  wasRunning: boolean;
begin
  if FFilename <> Value then
  begin
    wasRunning:= Running;
    Running:= false;
    FFilename := Value;
    Running:= wasRunning;
  end;
end;
 
procedure TScreenSaverPreview.SetRunning(const Value: boolean);
var
  res: UINT;
begin
  if Running <> Value then
  begin
    if (FSSWindow = 0) then
    begin
      if Value then
      begin
        res:= WinExec(PChar(FileName + ' /p ' + IntToStr(Handle)), SW_Show);
        if res <= 31 then
          FSSWindow:= 0
        else
          EnumChildWindows(Handle, @EnumProc, Integer(self));
      end;
    end
    else if not Value then
    begin
      PostMessage(FSSWindow, WM_CLOSE, 0, 0);
      FSSWindow:= 0;
    end;
  end;
end;
 
end.
Dans le cas ou un membre avait une suggestion merci d'avance.

@+,

cincap