Bonjour,
Je suis sous Delphi 2006 et j'ai créé quelques composants visuels que j'ai mis dans un package. Jusqu'ici tout marche bien.
Je voudrai maintenant modifier mes composants pour qu'ils réagissent mieux quand on utilise un écran tactile.
J'ai ce morceau de code qu'il faut que j'appelle au préalable:
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
| Procedure LoadTouchGestureAPI;
var Handle:THandle; sm:Integer;
begin
Handle := LoadLibrary('user32.dll');
try // dynamicaly load Gesture function addresses, if fns available
CloseTouchInputHandleFn := GetProcAddress(Handle, 'CloseTouchInputHandle');
PhysicalToLogicalPointFn := GetProcAddress(Handle, 'PhysicalToLogicalPoint');
GetTouchInputInfoFn := GetProcAddress(Handle, 'GetTouchInputInfo');
RegisterTouchWindowFn := GetProcAddress(Handle, 'RegisterTouchWindow');
UnregisterTouchWindowFn := GetProcAddress(Handle, 'UnregisterTouchWindow');
GetGestureInfoFn := GetProcAddress(Handle, 'GetGestureInfo');
CloseGestureInfoHandleFn := GetProcAddress(Handle, 'CloseGestureInfoHandle');
SetGestureConfigFn := GetProcAddress(Handle, 'SetGestureConfig');
bTouchGestureAPIPresent := Assigned(GetTouchInputInfoFn);
finally
FreeLibrary(Handle);
end;
// Test for multi - touch hw
bMultiTouchHardware := false;
sm := GetSystemMetrics(SM_DIGITIZER);
if (sm and NID_MULTI_INPUT <> 0) then
bMultiTouchHardware := true; // digitizer is multitouch
end; |
En effet suivant le matériel et l'Os le tactile n'est pas forcément géré et je ne peux pas faire une liaison statique.
Je pense logiquement faire un appel à cette procédure dans une section Initialisation d'une des unité de mon package.
La procédure initialise des variables "globales" de type fonction et les booleans "bTouchGestureAPIPresent" et "bMultiTouchHardware" qui indiquent si le système gère le tactile.
Dans le code de mes composants je regarderai l'état de ces booleans pour savoir si je peux faire appel aux fonctions liées au tactile.
J'ai cru comprendre qu'avec les DLL (et donc aussi les BPL) le code était partagé entre toutes les applications mais par contre chaque application avait sa propre version des variables.
La première application qui va faire appel au package va lui faire exécuter sa procédure d'initialisation qui va initialiser les booleans, ça devrait marcher.
Mais qu'est ce qui va se passer si on lance une deuxième application utilisant le package, le package étant déjà chargé il ne passera pas dans sa procédure d'initialisation (?)
Est ce qu'on peut récupérer l'état des variables initialisées lors chargement initiale de mon package, est ce qu'on peut déclarer des variables qui seraient globales à toutes les instances de mon package ?
Ou alors il faut géré le problème d'une autre façon ? Peut être qu'on peut détecter quand le package est utilisé par une nouvelle application et dans ce cas appeler ma procédure d'initialisation ?
Merci
Partager