Styles autre que Windows, comment tester
Bonjour,
Suite à cette discussion
ma tentative maintenant est de pouvoir visualiser des styles non [WINDOWS] comme le fait le FMXStyleViewer.
Seulement je tombe sur un bec ! Comment appliquer un style non chargeable (ou plutôt non applicable) ?
Quelqu'un aurait-il déjà tenté, ou même trouvé les sources de FMXStyleviewer (ce serait le top :mouarf:) ce que je trouve de plus proche dans les démos c'est le programme
C:\Users\Public\Documents\Embarcadero\Studio\21.0\Samples\Object Pascal\Multi-Device Samples\User Interface\Controls\mobilecontrols mais nulle part y est fait mention de chargement de style :weird:
J'ai bien idée que cela pourrait être en créant les composants visuel au runtime mais ..
à moins que, autre piste : en appellant directement FMXStyleViewwer, dans ce cas est-il possible de mettre l'écran d'une application externe dans une fenêtre de l'application ?
En appelant directement FMXStyleViewwer
Bonjour
Citation:
Envoyé par
SergioMaster
Dans ce cas est-il possible de mettre l'écran d'une application externe dans une fenêtre de l'application ?
J'ai fait plusieurs lectures en ce sens ce serait possible mais ou c'est moi (le plus probable) ou c'est FMX je n'y arrive pas !
pour la partie lancement externe pas de souci, quelques unités à déclarer FMX.Platform.Win, WinApi.ShellApi, winapi.windows et le tour est joué.
c'est après que cela se corse (en commentaire rouge ce que j'ai pu trouvé sur le net, sinon mes tentatives )
Code:
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
|
procedure TMainform.Button3Click(Sender: TObject);
var
Rec: TShellExecuteInfo;
Hviewer : Hwnd;
nom : string;
const
AVerb = 'open';
begin
// lance styleviewer
// shell execute simple
//ShellExecute(WindowHandleToPlatform(Handle).Wnd, 'open',
// PChar(styleviewer),pchar(Opendialog.filename),
// '', SW_SHOWNORMAL) ;
// Supprime la barre de titre
//SetWindowLong(aHandle, GWL_STYLE, GetWindowLong(aHandle, GWL_STYLE) And Not WS_CAPTION);
//SetWindowPos(aHandle, 0, 0, 0, 0, 0, SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER);
//
// // Assigne et maximise le prog externe au conteneur (un panel ici)
// Windows.SetParent(aHandle, presentedScrollbox1.Handle);
// SetForeGroundWindow(HandleViewver);
// ShowWindow(HandleViewver, SW_MAXIMIZE);
FillChar(Rec, SizeOf(Rec), #0);
Rec.cbSize := SizeOf(Rec);
Rec.fMask := SEE_MASK_NOCLOSEPROCESS;
Rec.lpVerb := PChar( AVerb );
Rec.lpFile := PChar( Styleviewer );
Rec.lpParameters := PChar( StyleName.Text );
Rec.lpDirectory := PChar('');
Rec.nShow := SW_SHOW;
ShellExecuteEx(@Rec);
WaitForInputIdle(Rec.hProcess, 5000);
// Hviewer := WinApi.Windows.FindWindow(???????, nil );
// WinApi.Windows.SetParent(HViewer,FormToHWindow(Mainform.Handle).wnd);
// Resize;
// ShowWindow(HViewer, SW_SHOW);
end; |
je pense que le plus gros du soucis vient des Handles.
Du coup, je vais faire la même tentative avec un programme VCL mais, si quelqu'un à une idée ... ;)