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 :
Pour tester, une "nouvelle application" avec juste une case à cocher sur la fiche et l'événement OnClick activé avec le code ci-dessus.
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;
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) :
Grand merci par avance,
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;
Partager