Comment peut-on gérer le volume sonore à partir d'une application ? (Delphi)
Comment peut-on déclarer et utiliser les API Windows ?
Comment utilise-t-on les pointeurs ? (Delphi, pascal)
Question posée par : annecy.
Langage : Delphi.
Date : 10/03/2000.
Réponse : Il est préférable dans ce cas d'utiliser l'API Windows auxSetVolume dont la description se trouve dans le fichier win32.hlp livré avec delphi. Sinon vous pouvez toujours aller voir dans mes liens de programmation le site VBAPI pour vous faire une idée...
Langage : Visual Basic, Delphi.
Date : 07/05/2000.
Description : Les API Windows sont des fonctions déjà définit qui se trouve dans les DLL de Windows. Ces fonctions permettent de contrôler notement tous les périphériques de Windows.
Visual Basic
- Comment déclarer son API :
Il existe sous VB6 un outil très pratique pour déclarer les API Windows : C'est la visionneuse d'API. Pour y accéder rien de plus simple : elle se trouve dans les outils Microsoft Visual Basic 6 au même endroit que l'assitant d'empaquetage.Une fois le programme ouvert, faites fichier puis charger le fichier texte Win32api.txt. Dans la liste des éléments disponibles apparaissent toutes les API que vous pouvez utiliser. Lorsque vous en sélectionner une sa déclaration apparaît, il vous reste à copier et coller dans votre code la déclaration.
- Exemple de code pour récupérer le de l'utilisateur qui est actuellement connecté à Windows :
'Déclaration de l'API
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
'Dans la procedure
Dim UserName as String * 255
Dim retour as Long
retour = GetUserName(UserName,255)
msgBox "Le nom de l'utilisateur connecté est " + UserName
- Note :
Vous trouverez également l'utilisation des fichiers ini dans le module de classe qui est à télécharger dans la partie programme.
Delphi
- Comment déclarer son API :
En Delphi, il y a dans le menu aide, une aide spécialement destiné à tout ce qui touche Windows, doc des API. Il vous suffit de taper le nom de l'API et vous avez presque la déclaration de l'API.
{voici ce que l'on obtient via l'aide SDK Window}
BOOL SetWindowPos(
nbsp;HWND hWnd, // handle of window
nbsp;HWND hWndInsertAfter, // placement-order handle
nbsp;int X, // horizontal position
nbsp;int Y, // vertical position
nbsp;int cx, // width
nbsp;int cy, // height
nbsp;UINT uFlags // window-positioning flags
nbsp;);
{voici ce qu'il faut saisir}
Function SetWindowPos(hWnd : HWND ;hWndInsertAfter : HWND;X : integer;Y : integer;cx : integer;cy : integer;uFlags : UINT ) : boolean;stdcall;external 'user32.dll';
{Note : il faut obligatoirement ajouter stdcall si vous voulez que votre programme fonctionne. Dans la clause external il faut mettre le nom de la DLL dans laquelle se trouve la fonction utilisée.}
- Exemple de code pour mettre une fenêtre en toujours visible :
Function SetWindowPos(hWnd : HWND ;hWndInsertAfter : HWND;X : integer;Y : integer;cx : integer;cy : integer;uFlags : UINT ) : boolean;stdcall;external 'user32.dll';
procedure TfrmMenu.FormActivate(Sender : TObject);
begin
SetWindowPos(form1.Handle,HWND_TOPMOST,form1.top,form1.left,form1.Width,form1.Height,SWP_SHOWWINDOW);
end;
Langage : Delphi, Pascal.
Date : 08/05/2000.
Les pours ou les contres :
Les pointeurs sont souvent utilisés lorsque l'on veut stocker des données en mémoire et que l'on ne sait pas combien de place cela peut prendre .En effet lorsque l'on utilise un tableau, on doit lui donner une taille et bien pas avec les pointeurs. Les pointeurs sont une suite d'élément du même type en ayant pour seul limite la mémoire. Si il sont très intéressant pour optimisé la mémoire, il le sont moins pour ce qui est de l'accès aux données stockées. Par exemple dans un tableau si l'on veut de 200ième élément du tableau et bien il suffit de lui dire d'accéder à cette élément et bien avec les pointeurs, on est souvent obligé de passer les 199 élément précédent pour avoir le 200ième.
Les différents type d'utilisation :
Il existe plusieurs type de représentation de stockage pour les pointeurs. La liste chaînée et l'arbre (binaire le plus souvent). La liste est une suite de pointeurs (voir schéma 1). L'arbre est d'une structure un peu plus complexe et est optimisé en ce qui concerne la vitesse de stockage d'information en vue de la trier (voir schéma 2).
Déclarer le type pointeur :
Type
{Déclaration d'une Liste Chaînée}
P_Liste = ^Liste;
Liste = record
Numero : Integer;
Suivant : P_Liste; {Pointeur vers le l'élement suivant}
end;
{Déclaration d'un arbre binaire}
P_Arbre = ^Arbre;
Arbre = record
Numero : Integer;
Droit : P_Arbre; {Pointeur vers le fils droit}
Gauche : P_Arbre; {Pointeur vers le fils gauche}
end;
Utiliser les pointeurs :
- Déclarer les pointeurs :
Var Pointeur : P_Liste;
- Allouer de la mémoire à un pointeur :
Pointeur := new(P_Liste);
- Utiliser les pointeurs :
Pour savoir comment utiliser les pointeurs rien de tel qu'un bon exemple, vous pouvez le télécharger ici.
- Désallouer la mémoire d'un pointeur :
dispose(Pointeur);
Note :
Quand on n'a plus besoin des pointeurs que l'on a stocké en mémoire il faut impérativement penser à désallouer cette mémoire sous peine de mauvaise suprise...