Bonjour,

pendant des millénaires j'ai utilisé avec satisfaction sous D7 et Win2000 un truc pour avoir la fenêtre principale du programme "toujours visible" (ça peut être utile selon le programme), qui se résume à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.ckbxToujoursVisibleClick(Sender: TObject);
begin
  if ckbxToujoursVisible.Checked
  then
//    ShowMessage('Yes')
//    SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE)
    FormStyle := fsStayOnTop
  else
//    ShowMessage('No');
//    SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
    FormStyle := fsNormal;
end;
Pour tester, une "nouvelle application" avec juste une case à cocher sur la fiche et l'événement OnClick activé avec le code ci-dessus.

Le problème, comme vous pouvez le voir avec les lignes en commentaires (ce qui indique des essais, donc des soucis...), c'est que ça ne fonctionne pas avec Laz 1.6rc1 dans XP sp2.
Et je ne peux pas donner de message d'erreur puisque c'est purement fonctionnel et visuel : juste qu'en cochant la case la fenêtre d'un autre programme (n'importe quoi, le bête Notepad par ex.) peut recouvrir le mien quand même...

Si quelqu'un avait une piste, ça me rendrait un service inappréciable !

Ah, pour faire fonctionner le mode API (SetWindowPos), il faut rajouter LCLIntf, LCLType, dans les uses.

Le code complet, pour tester sous Linux (où ça fonctionne très bien) :
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
procedure TForm1.ckbxToujoursVisibleClick(Sender: TObject);
begin
  {$IFDEF LINUX}
    if (FormStyle = fsNormal) then
      FormStyle := fsStayOnTop
    else
      FormStyle := fsNormal;
  {$ELSE}
  //if ckbxToujoursVisible.Checked
  if (FormStyle = fsNormal)
  then
//    ShowMessage('Yes')
//    SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE)
    FormStyle := fsStayOnTop
  else
//    ShowMessage('No');
//    SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
    FormStyle := fsNormal;
  {$ENDIF}
end;
Grand merci par avance,