Trucs & Astuces

DELPHI 















        Voilà une liste de quelques trucs et astuces pour vous aider à faire des programmes sous Borland Delphi ...
Si vous désirez la compléter, la corriger, n'hésitez pas à m'écrire : Vos remarques sont les bien venues !




Retour à la page principale
Retour à la page d'accueil
Téléchargement
Vos remarques ICI
 
 

1)   Créer la dynamique d'un boutton
2)   Vérifier qu'il y a une disquette dans le lecteur
3)   Autoriser/Interdire le Ctrl+Alt+Suppr et le Alt+tab
4)   Supprimer la barre des tâches pendant le déroulement d'un prog.
5)   Optimisation du code
6)   Récupérer un numéro de série
7)   Supprimer le beep d'un Tedit quand on valide Enter
8)   Récupérer les coordonnées du curseur dans un edit
9)   Lancer un fichier avec son prog. par défaut
10)   Lancer une URL
11)   Envoyer un mail
12)   Connaitre la version de Windows
13)   Envoyer des données sur port série
14)   Connaitre la memoire libre disponible
15)    Connaitre le repertoire temporaire par défaut de Windows
16)   Code des touches
17)   Voir le texte qui est dans le ClipBoard
18)   Mettre le focus sur le composant suivant
19)   Changer la vitesse d'affichage du curseur texte
20)   Positionner le pointeur de la souris
21)   Faire scroller un RichEdit
22)    Lancer l'éconnomiseur d'écran
23)   Cacher un prog. de la barre des tâches
24)   Tester si le Caps Lock est actif
25)   Faire une pause
26)   Lancement de la fenêtre de config. de  l'heure
27)   Lancement de la fenêtre propriétés systeme
28)   Mancement de la fenêtre propriété mot de passe
29)   Changer la résolution de l'écran sans rebooter
30)   Contrôler l'alim. du moniteur
31)   Contrôler le tiroir du lecteur CD ROM
32)   Connaitre la résolution de l'écran
33)   Faire un Copier/Coller vertical dans l'éditeur Delphi
34)   Changer le papier peint Windows
35)   Ecrire en diagonale sur le canevas de la form
36)   Effacer de facon simple un bitmap
37)   Faire un prog. compatible avec le menu "Envoyer vers"
38)   Créer et utiliser un fichier .INI
39)   Ecrire dans la base de registre
40)   Jouer un fichier .WAV
41)   Rebooter/relancer Windows
42)   Déplacer un composant à l'exécution
43)   Spécifier les paramètres régionaux
44)   Connaitre la version du système d'exploitation
45)  Afficher la liste des tâches de Windows
46)   Créer une fenêtre éliptique
47)  Créer une fenêtre transparente
48)  Créer un fond dégradé
49)  Cacher/afficher le menu démarrer
50)  Dessiner sur le bureau
51)  Utiliser un curseur personnalisé
52) Scanner les programmes en cours d'éxécution
53) Connaitre le nombre de sous-répertoires d'un Rep.
54)  Copier un fichier
55) Transformer une couleur en code Hexadécimal
56) Connaitre la taille du bureau
57) Bouger les composants pendant l'execution
58) Avoir une icone comme curseur
59) Formater un disque
60) Utiliser le CPU a 100% pour son prog.
61) Remplacer le bureau Windows par votre application
62) Eviter les messages d'erreur critique Windows
63) Mettre le PC en veille
64) Connaitre le runtime de Windows
65) Connaitre la langue de Windows
66) Enregistrer un fichier *.wav
67) Crypter un Password
68)
69)
70)
71)



Retour au haut de la page
Retour à la page principale



1.Création dynamique d'un bouton

     procedure creerbouton;
     Var
       MonBouton  :  TButton;
     BEGIN
       MonBouton := TButton.Create(Form1);
       with MonBouton do begin
       Parent := MyForm;
       height := 20;
       width := 2000;
       caption := 'nouveau bouton';
       left := 20;
       top := 20;
       end;
     END;


2.Vérifier qu'il y a une disquette dans le lecteur

   function Diskpret: Boolean;
     var
       mode  : Word;
     begin
       result := false;
       mode := SetErrorMode(SEM_FAILCRITICALERRORS);
       if DiskSize(1)<>-1 then result := true;
       SetErrorMode(mode);
     end;


   3.Autoriser ou interdire le alt+tab et ctrl+alt+suppr

     // interdire
     procedure TForm1.Button1Click(Sender: TObject);
     var
       oldVal : LongInt;
     begin
       SystemParametersInfo (97, Word (True), @OldVal, 0);
     end;

     // autoriser
     procedure TForm1.Button2Click(Sender: TObject);
     var
     OldVal : LongInt;
     begin
       SystemParametersInfo (97, Word (False), @OldVal, 0);
     end;


   4.supprimer la barre de tache pendant le déroulement d'un
     programme

     definir barretache : HWND; dans les declarations de variable
     de la forme et rajouter les deux evenements suivant dans la
     forme :

     procedure TForm1.FormCreate(Sender: TObject);
     begin
       barretache := FindWindow('Shell_TrayWnd', nil);
       ShowWindow(barretache, SW_HIDE);
     end;

     procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
     begin
       ShowWindow(barretache, SW_SHOW);
     end;
 


   5.optimisation du code

     on peut ecrire plus simplement le code suivant :

       Label1.Caption := Chaine[1];
       Label2.Caption := Chaine[2];
       Label3.Caption := Chaine[3];
       Label4.Caption := Chaine[4];
       Label5.Caption := Chaine[5];

     il suffit d'écrire :

   for i:=1 to 5 do  (FindComponent('Label'+IntToStr(i)) as TLabel).Caption:=Chaine[i];
 
 

   6.Récuperer le numero de série d'une disquette

   function litnumser:string;
     var
       NumSerie  : DWORD;
       MaxComp, SySflags : integer;
     begin
       GetVolumeInformation('A:', nil, 0,@NumSerie,MaxComp, SysFlags,nil, 0);
       result:=NumSerie;
     end;
 


      7.Supprimer le beep dans un Tedit quand on appuie sur enter

     procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
     begin
       if Key = Chr(VK_RETURN) then key:= #0;
     end;
 


   8.Récupérer les coordonnées du curseur dans un mémo

     procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;Shift: TShiftState);
     var
       line,col :integer;
     begin
       line:=sendMessage(memo1.Handle,EM_LineFromChar,memo1.SelStart,0);
       col:=memo1.Selstart-sendMessage(memo1.Handle,EM_LineIndex,line,0)+1;
       edit1.text:='Ligne n#176;: '+inttostr(line+1)+'    Colonne n#176;: '+inttostr(col);
     end;
 

      note : cela fonctionne aussi avec un richedit
 


   9.Lancer un fichier avec son programme par défaut

     uses WinTypes, ShellAPI;
     begin
       ShellExecute( 0, Nil, PChar('c:\my_docs\report.txt'),Nil, Nil, SW_NORMAL );
     end.
 



Retour au haut de la page


 
 
 


  10.Lancer une URL

   ( toujours avec la commande ShellExecute ! )

     uses WinTypes, ShellAPI;

     begin
       ShellExecute( 0, Nil, PChar('http://multimania.com/offset'),Nil, Nil, SW_NORMAL );
     end;
 


  11.Envoyer un e-mail
 

  1ere Methode :
Pour cette méthode, vous devez avoir le composant "TNMSMPT" dans "Internet".
Ce composant  est inclu dans Delphi 4 et 5 Pro et Entreprises.

procedure TForm1.Button1Click(Sender: TObject);
begin
  NMSMTP1.Host := 'mail.host.com';
  NMSMTP1.UserID := 'username';
  NMSMTP1.Connect;

  NMSMTP1.PostMessage.FromAddress := 'webmaster@hotmail';
  NMSMTP1.PostMessage.ToAddress.Text := 'user@host.com';
  NMSMTP1.PostMessage.Body.Text := 'Message a envoyer ici';
  NMSMTP1.PostMessage.Subject := 'Sujet du mail ici';
  NMSMTP1.SendMail;
  showmessage('Mail envoyé !');
end;

  2eme Méthode :

( et encore la commande ShellExecute ! )

     uses WinTypes, ShellAPI;

     begin
       ShellExecute( 0, Nil, PChar('mailto:offset@hotmail.com'),Nil, Nil, SW_NORMAL );
     end;
 


  12.Connaitre la version de windows

     Var
       versions: TOSVERSIONINFO;
       ver:integer;
     begin
       versions.dwOSVersionInfoSize:=sizeof(versions);
       GetVersionEx(versions);
       ver:=versions.dwPlatformId;
       if ver=VER_PLATFORM_WIN32s      then label1.caption:='Windows 3.1 avec Win32s';
       if ver=VER_PLATFORM_WIN32_WINDOWS then label1.caption:='Windows 95';
       if ver=VER_PLATFORM_WIN32_NT then label1.caption:='Windows NT';
       label1.caption:=label1.caption+' ('+inttostr(versions.dwMajorVersion)+
                                '.'+inttostr(versions.dwMinorVersion)+' )';
     end;
 


  13.Envoyer des données sur le port série

     procedure sendtoserial(data:string);
     var
       serial:textfile;
     begin
       assignefile(serial,'com1');
       rewrite(serial);
       write(serial,data);
       // ou read pour lire
       closefile(serial);
     end;
 


  14.Connaitre la mémoire libre disponible

   procedure TForm1.Button1Click(Sender: TObject);
     var
       Memory : tMemoryStatus;
     begin
         memory.dwLength := sizeof(memory);
         GlobalMemoryStatus(memory);
         label1.caption:='memoire totale : '+inttostr(memory.dwTotalPhys)+' octets';
         label2.caption:='memoire libre  : '+inttostr(memory.dwAvailPhys)+' octets';
     end;
 


  15.Connaitre le répertoire temporaire par défaut de windows

   procedure TForm1.Button1Click(Sender: TObject);
     var
       b: array[0..512] of Char;
     begin
      GetTempPath(511,b);
       label1.caption:=b;
     end;
 


  16.Codes des touches

   VK_LBUTTON ($01) : bouton Gauche Souris
     VK_RBUTTON ($02) : bouton Droite Souris
     VK_CANCEL ($03) : Arrêt Exec. programme
     VK_MBUTTON ($04) : bouton Central Souris
     VK_BACK ($08) : Retour Arrière
     VK_TAB ($09) : Tabulation
     VK_RETURN ($0D) : Entrée
     VK_SHIFT ($10) : Touche de contrôle MAJ
     VK_CONTROL ($11) : Touche de contrôle CTRL
     VK_MENU ($12) : Touche de contrôle ALT
     VK_PAUSE ($13) : Pause
     VK_CAPITAL ($14) : Verrouillage majuscules
     VK_ESCAPE ($1B) : Echappement
     VK_SPACE ($20) : Barre d'espacement
     VK_PRIOR ($21) : Page Haut
     VK_NEXT ($22) : Page Bas
     VK_END ($23) : Fin
     VK_HOME ($24) : Début
     VK_LEFT ($25) : Flèche gauche
     VK_UP ($26) : Flèche haut
     VK_RIGHT ($27) : Flèche droite
     VK_DOWN ($28) : Flèche bas
     vk_Select($29):??
     vk_Print($2A):??
     vk_Execute($2B);
     VK_SNAPSHOT ($2C) : Impression d'écran
     VK_INSERT ($2D) : Insérer
     VK_DELETE ($2E) : Supprimer
     VK_HELP ($2F) : Aide
     VK_NUMPAD0 ($60) : Touche pavé numérique 0
     VK_NUMPAD1 ($61) : Touche pavé numérique 1
     VK_NUMPAD2 ($62) : Touche pavé numérique 2
     VK_NUMPAD3 ($63) : Touche pavé numérique 3
     VK_NUMPAD4 ($64) : Touche pavé numérique 4
     VK_NUMPAD5 ($65) : Touche pavé numérique 5
     VK_NUMPAD6 ($66) : Touche pavé numérique 6
     VK_NUMPAD7 ($67) : Touche pavé numérique 7
     VK_NUMPAD8 ($68) : Touche pavé numérique 8
     VK_NUMPAD9 ($69) : Touche pavé numérique 9
     VK_MULTIPLY ($6A) : Touche pavé numérique *
     VK_ADD ($6B) : Touche pavé numérique +
     VK_SEPARATOR ($6C) : Touche pavé numérique Entrée
     VK_SUBTRACT ($6D) : Touche pavé numérique -
     VK_DECIMAL ($6E) : Touche pavé numérique . (décimal)
     VK_DIVIDE ($6F) : Touche pavé numérique /
     VK_F1 ($70) : Touches de fonction F1
     VK_F2 ($71) : Touches de fonction F2
     VK_F3 ($72) : Touches de fonction F3
     VK_F4 ($73) : Touches de fonction F4
     VK_F5 ($74) : Touches de fonction F5
     VK_F6 ($75) : Touches de fonction F6
     VK_F7 ($76) : Touches de fonction F7
     VK_F8 ($77) : Touches de fonction F8
     VK_F9 ($78) : Touches de fonction F9
     VK_F10 ($79) : Touches de fonction F10
     VK_F11 ($7A) : Touches de fonction F11
     VK_F12 ($7B) : Touches de fonction F12
     VK_F13 ($7C) : Touches de fonction F13
     VK_F14 ($7D) : Touches de fonction F14
     VK_F15 ($7E) : Touches de fonction F15
     VK_F16 ($7F) : Touches de fonction F16
     VK_F17 ($80) : Touches de fonction F17
     VK_F18 ($81) : Touches de fonction F18
     VK_F19 ($82) : Touches de fonction F19
     VK_F20 ($83) : Touches de fonction F20
     VK_F21 ($84) : Touches de fonction F21
     VK_F22 ($85) : Touches de fonction F22
     VK_F23 ($86) : Touches de fonction F23
     VK_F24 ($87) : Touches de fonction F24
     VK_NUMLOCK ($90) : Verrouillage pavé numérique
     VK_SCROLL ($91) : Verrouillage scrolling
     VK_A à VK_Z sont équivalents à 'A' à 'Z'
     VK_0 à VK_9 sont équivalents à '0' à '9'
 


  17.Voir le texte qui est dans le clipboard

     function litclipboard:string;
     begin
       if (Clipboard.HasFormat(CF_TEXT))  then result:=Clipboard.astext;
     end;
 


  18.Mettre le focus sur le composant suivant

   SendMessage(Form1.Handle, WM_NEXTDLGCTL, 0, 0);

     pour mettre le focus sur un composant précis , utiliser la
     méthode SetFocus du composant :

     Button1.SetFocus;
 


  19.Changer la vitesse d'affichage du curseur texte

     Appeler la procédure windows suivante ( temps en milliseconde ) :

     SetCaretBlinkTime(250);
 



Retour au haut de la page


 
 


  20.Positionner le pointeur sourie

     Appeler la procédure windows suivante :

     SetCursorPos(100,100);
 


  21.Faire scroller un richedit

   Appeler la procédure windows suivante :

     sendmessage(richedit1.handle,WM_VScroll,SB_LINEDOWN,0);

     Pour faire scroller vers le haut , utiliser SB_LINEUP
 


  22.Lancer l'économiseur d'écran

     Appeler la procédure windows suivante :

     PostMessage(GetDesktopWindow, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
 


  23.Cacher un programme de la barre de tache

     procedure TForm1.FormCreate(Sender: TObject);
     begin
       ShowWindow (Form1.Handle, SW_Hide);
       showwindow(Application.handle,Sw_hide);
     end;
 

     rajouter la ligne suivante pour cacher la Form

       Application.ShowMainForm:=False;
 


  24.Teste si le Caps Lock est actif

   function IsCapsLockOn : boolean;
     begin
       Result := 0 <> (GetKeyState(VK_CAPITAL) and $01);
     end;
 
 
 


  25.Faire un pause

   2 solution : la fonction sleep ( qui bloque le programme
     pendant x millisecondes )

       Sleep( 1000 );

     ou la procédure suivante qui traite les messages de la fenetre :

     procedure delay(t:integer); // t en secondes
       var NowTime : TDateTime;
     begin
      NowTime:=Now;
      repeat
       Application.ProcessMessages;
      until NowTime + t / (24 * 3600) < Now;
     end;
 


  26.Lancement de la fenetre de config de l'heure

   rajouter Shellapi dans la clause USES

     WinExec('rundll32.exe shell32.dll,Control_RunDLL timedate.cpl',SW_SHOWNORMAL);
 


  27.Lancement de la fenetre proprietes systeme

   rajouter Shellapi dans la clause USES

     WinExec('rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl',SW_SHOWNORMAL);
 
 


  28.Lancement de la fenetre proprietes de mots de passe

   rajouter Shellapi dans la clause USES

     WinExec('rundll32.exe shell32.dll,Control_RunDLL password.cpl',SW_SHOWNORMAL);
 


  29.Changer la résolution de l'écran sans rebooter

   // change la resolution en 640*480
     procedure changeres;
     var
       mode:TDeviceMode;
       i:integer;
     begin
       mode.dmSize := sizeof (MODE);
       mode.dmPelsWidth := 640;
       mode.dmPelsHeight := 480;
       mode.dmBitsPerPel := 16;
       mode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL;
       i := ChangeDisplaySettings(mode, CDS_TEST);
       if i=DISP_CHANGE_SUCCESSFUL then ChangeDisplaySettings(mode, 0)
     end;
 



Retour au haut de la page


 


  30.Controler l'alimentation du moniteur

   Cette commande permet de mettre le moniteur en veille

     SendMessage(Application.Handle, WM_SYSCOMMAND,SC_MONITORPOWER,0)

     ou de le remettre en fonctionnement

     SendMessage(Application.Handle, WM_SYSCOMMAND,SC_MONITORPOWER,-1);
 
 


  31.Controler le tiroir du lecteur de CDROM

   Cette commande permet d'ouvrir le tiroir

     mciSendString('Set cdaudio door open wait', nil, 0, 0);

     ou de le fermer

     mciSendString('Set cdaudio door closed wait', nil, 0, 0);
 
 


  32.Connaitre la résolution de l'écran

   procedure TForm1.Button1Click(Sender: TObject);
     var
       hh:hdc;
       larg,haut:integer;
     begin
       hh:=getdc(GetDesktopWindow);
       larg:=getdevicecaps(hh,HORZRES);
       haut:=getdevicecaps(hh,VERTRES);
     end;
 


  33.Faire un copier/coller vertical dans l'éditeur de Delphi

   Au clavier , faire ALT+SHIFT+les touches de directions
     A la sourie , faire ALT+bouton gauche
     Pour revenir au copier coller standard , refaire un selection normale à la sourie
 


  34.Changer le papier peint de windows

   SystemParametersInfo(SPI_SETDESKWALLPAPER,0,PChar('C:\Div33.bmp'),SPIF_SENDWININICHANGE);
 


  35.Ecrire en diagonale sur le canvas de la form

     procedure TForm1.Button1Click(Sender: TObject);
     var
       LgFnt : TLogFont;
       Fnt   : TFont;
     begin
       Form1.Canvas.Font.Name := 'Arial';
       Form1.Canvas.Font.Size := 18;
       Fnt := TFont.Create;
       Fnt.Assign(Form1.Canvas.Font);
       GetObject(Fnt.Handle, sizeof(LgFnt), @LgFnt);
       LgFnt.lfEscapement := 180;
       LgFnt.lfOrientation := 180;
       Fnt.Handle := CreateFontIndirect(LgFnt);
       Form1.Canvas.Font.Assign(Fnt);
      Form1.Canvas.Font.color:=clNavy;
       Fnt.Free;
       Form1.Canvas.TextOut(30,60,'Super!');
     end;
 


  36.Effacer de façon simple un bitmap

     with bitmap.canvas do FillRect(ClipRect);
 


  37.Faire que son programme soit compatible avec le menu
     Pop-up 'Envoyer vers'

   La partie programmation : récupérer le nom du fichier

    var
       fichier:string
     begin
       if paramcount>0 then fichier:=ParamStr(1);
     end;

     La partie windows : mettre un raccourci pointant vers
     l'éxécutable dans le répèrtoire "C:\WINDOWS\SendTo"
 


 38.Créer et utiliser un fichier .INI :

     Uses inifiles;
     Procedure TForm1.EcrireFichierINI;
     Begin
             With TIniFile.Create('Fichier.INI') do
             Begin
                     WriteString('Section','Ident1',Str1));
                     WriteInteger('Section','Ident2',Int1));
                     free;
             End
     End;

   Procedure TForm1.LireFichierINI;
     Begin
             With TIniFile.Create('Fichier.INI') do
             Begin
                       Str1 := ReadString('Section','Ident1','Val par default');
                      Int1:= ReadInteger('Section','Ident2',100');
                     free;
             End
     End;
 


39.Ecrire dans la base de registre :

   Uses Registry;
     procedure TForm1.EcrireDansLaBaseDeRegistre;
     var
         Reg :TRegistry;
     begin
             Reg := TRegistry.Create;
             with Reg do
             begin
                     try
                         RootKey := HKEY_LOCAL_MACHINE;
                         if KeyExists('\Software') then
                         begin
                                 if OpenKey('\Software\MonAppli', true) then
                                 begin
                                         WriteString('Nom', 'Toto');
                                         WriteBool('Val1', true);
                                         WriteString('Val2', 'Test');
                                 end;
                         end;
                     finally
                             free;
                     end;
             end;
     end;
 



Retour au haut de la page


 


40.Jouer un fichier .WAV :

   Uses MMSystem;
     Procedure PlayWave ( FichierWave:String ; Mode:Integer ) ;
     Var
             FichWav : Array [0..100] of Char;
     Begin
             StrPcopy(FichWav,FichierWave);
             SndPlaySound(FichWav,Mode);
     End;
 


41.Rebooter / relancer windows :

     Procedure RebootSysteme;
     Begin
              ExitWindows(EW_REBOOTSYSTEM,0);
     End;
     Procedure RelancerWindows;
     Begin
              ExitWindows(EW_RESTARTWINDOWS,0);
     End;


42.Déplacer un composant à l'éxecution :

     Procedure MonObjetMouseDown(Sender: TObject;...)
     Begin
             ReleaseCapture;
             MonObj.perform(WM_Syscommand, $F012,0);
     End;
 
 


43.Spéifier les parametres régionaux :
     DecimalSeparator := ',';
     ShortDateFormat := 'dd/dd/yyyy';
 


44.Connaître la version du système d'exploitation :

     Procedure AfficheInfoVersion;
     Var
         InfosVersion : TOSVersionInfo;
     Begin
         InfosVersion.dwOSVersionInfoSize:=sizeof(InfosVersion);
         GetVersionEx(InfosVersion);
         Case InfosVersion.dwPlatformId of
             VER_PLATFORM_WIN32s : Systeme.caption:='Système : Microsoft Windows 3.1 / Win32s ';
             VER_PLATFORM_WIN32_WINDOWS : Systeme.caption:='Système : Microsoft Windows 95';
             VER_PLATFORM_WIN32_NT : Systeme.caption:='Système : Microsoft Windows NT';
        End;
         VersionWin.caption:='Version n° : '+ inttostr(InfosVersion.dwMajorVersion)
                                           +'.'+inttostr(InfosVersion.dwMinorVersion)
                                           +'.'+inttostr(loword(InfosVersion.dwBuildNumber))
                                           +' '+InfosVersion.szCSDVersion ;
     End;
 
 


45.Afficher la liste des tâches de Windows :

     function EnumWindowsProc(Wnd : HWnd;Form : TForm1) : Boolean; Export; {$ifdef Win32} StdCall; {$endif}
     var
         Buffer : Array[0..99] of char;
     begin
             GetWindowText(Wnd,Buffer,100);
             if StrLen(Buffer) <> 0 then
             Form1.memo1.lines.Add(StrPas(Buffer));
             Result := True;
     end;

     procedure TForm1.BitBtn3Click(Sender: TObject);
     begin
             EnumWindows(@EnumWindowsProc,LongInt(Self));
     end;
 


46.Créer une fenêtre elliptique :

     var
       hR : THandle;
     begin
           hR := CreateEllipticRgn(0,0,Form1.Width,Form1.Height);
           SetWindowRgn(Handle,hR,True);
     end;
 


47.Créer une fenêtre transparente :

   Procedure TForm1.FormCreate(Sender: TObject);
     begin
           Form1.Brush.Style := bsClear;
           Form1.BorderStyle := bsNone;
     end;


48.Faire un fond dégradé :

     Procedure Form1.FormPaint(Sender: TObject);
     Var
         Ligne : integer;
     Begin
             For  Ligne:=0 to Form1.Height do
             Begin
                     Form1.Canvas.pen.color:=RGB(0,MulDiv( Ligne,255,Form1.height),0); //vert
                     Form1.Canvas.MoveTo(0, Ligne);
                     Form1.Canvas.LineTo(Form1.Width, Ligne) ;
              End;
     End;
     // ( rouge : RGB(MulDiv( Ligne,255,Form1.height),0,0)
     / ( bleu : RGB(0,0,MulDiv( Ligne,255,Form1.height)) )
 


49.Cacher / afficher le bouton Démarrer:

     Procedure TForm1.CacherBtnDemarrerClick(Sender: TObject);
     var
         Rgn : hRgn;
     Begin
         Rgn := CreateRectRgn(0, 0, 0, 0);
         SetWindowRgn(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil), Rgn, true);
     End;

     Procedure TForm1.AfficherBtnDemarrerClick(Sender: TObject);
     Begin
          SetWindowRgn(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil), 0, true);
     End;



Retour au haut de la page


50.Déssiner sur le bureau :

     Procedure TForm1.Button1Click(Sender: TObject);
     Var
     dc : hdc;
     Begin
         dc := GetDc(0);
         MoveToEx(Dc, 0, 0, nil);
         LineTo(Dc, 300, 300);
         ReleaseDc(0, Dc);
     End;
 
 
 


51.Utiliser un curseur personnalisé

Il faut créer un fichier ressource (avec imageEditor) dans lequel vous il y a le dessin du Curseur perso
Ajouter {$R tonfichier.RES} dans le source du programme
Déclarer une constante curseur unique (pas celles utilisées par Delphi)
par exemple crMonCurseur = 1;
En fin d'unité :

     ScreenCursors[crMonCurseur]:=LoadCurseur(hInstance,'NOMDUCURSEUR');

il reste plus qu'a affecter le nouveau curseur. exemple: TLabel.Cursor:=crMonCurseur;
Sachant que sous Delphi 1.0 (au moins) le NOMDUCURSEUR doit être en majuscule.
 
 


52.Scanner les programmes en coues d'éxécution

Procedure scanprog;
     var taskInfo : TTaskEntry;
     begin
             taskInfo.dwSize:=sizeof(taskInfo);
             if TaskFirst(@taskInfo) and (autorise) then
             repeat
                     Listbox.item.add(taskInfo);
             until (not TaskNext(@taskInfo));
     end;
 


53.Connaitre le nombre de sous-repertoires d'un Répertoire

Voici une Fonction qui compte le nombre de répertoire.
on lui passe en paramètre le répertoire (ca peut etre c: si on veut tout...)
et si on veut compter les sous répertoires ou non.

     function Dir_CountDir(strPathName: String;bRecurseDir : Boolean):Integer;
     var
             strTempPath : string;
             nCount : integer;
             hFindFile : THandle;
             FindData : TWin32FindData;
     Begin
             nCount := 0;
             Result := 0;
             strTempPath := strPathName+'\*.*';
             hFindFile := Windows.FindFirstFile(PChar(strTempPath),FindData);
             if hFindFile = INVALID_HANDLE_VALUE then Exit;
             repeat
                     if (IsChildDir(FindData)) then
                     begin
                             nCount := nCount+1;
                             if bRecurseDir then
                             begin
                                     strTempPath := strPathName+'\'+FindData.cFileName;
                                     nCount := nCount+Dir_CountDir(strTempPath,bRecurseDir);
                             end;
                     end;
             until (not Windows.FindNextFile(hFindFile,FindData));
             Windows.FindClose(hFindFile);
             Result := nCount;
     end;

     function IsChildDir (var lpFindData : TWin32FindData) : Boolean;
     var
             b : boolean;
     begin
             Result := ((lpFindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <>0);
             b := (lpFindData.cFileName[0] <> '.');
             Result := (Result and b);
     end;
 
 


54) Copier un fichier
 


55) Transformer une couleur en code Hexadécimal

function ColorToHex(const AColor : integer) : string;

begin
  Result := IntToHex(AColor, 8);
end; {ColorToHex}

Cette fonction convertira un Tcolor (Qui est un type integer) en un code hexa: (exemple du bleu)

ColorDialog.CustomColors.Add('ColorA=' + ColorToHex(clBlue));


56) Trouver la taille du bureau

procedure TForm1.Button1Click(Sender: TObject);
var R : TRect;
begin
    SystemParametersInfo(SPI_GETWORKAREA, 0, @r, 0);
    Label1.Caption := IntToStr(r.Top);
    Label2.Caption := IntToStr(r.Left);
    Label3.Caption := IntToStr(r.Bottom);
    Label4.Caption := IntToStr(r.Right);
end;


57) Bouger les composants pendant l'execution

procedure TForm1.MoveControl(Sender:TObject; Button:TMouseButton;
           Shift:TShiftState; X,Y:Integer);
 var
   TempPanel : TPanel;
   Control   : TControl;
 begin
   ReleaseCapture;
   if Sender is TWinControl then
     TWinControl(Sender).Perform(WM_SysCommand,$F012,0)
   else
   try
     Control := TControl(Sender);
     TempPanel := TPanel.Create(Self);
     with TempPanel do begin
       Caption := '';
       BevelOuter := bvNone;
       SetBounds(Control.Left,Control.Top,Control.Width,Control.Height);
       Parent := Control.Parent;
       Control.Parent := TempPanel;
       Perform(WM_SysCommand,$F012,0);
       Control.Parent := Parent;
       Control.Left := Left;
       Control.Top := Top;
     end;
   finally
     TempPanel.Free;
   end;
 end;


58) Avoir une icone comme curseur
Var HCursor : THandle;
 begin
   //Donne le  handle du curseur courrant
   HCursor := Screen.Cursors[ Ord(Screen.Cursor) ];
   //Dessine l'icone sur un canvas
  DrawIconEx( Form1.Canvas.Handle, XPos, YPos, HCursor, 32, 32,
               0, 0, DI_NORMAL);
 end;
 


59) Formater un disque

Faire tres attention avec ce tip !

procedure FormatDriveDialog;
 begin
   ShellExecute(Application.Handle,
                'Open',
                'C:\Windows\Rundll32.exe',
                'Shell32.dll,SHFormatDrive',
                'C:\Windows',
                SW_SHOWNORMAL);
 end;

 function SHFormatDrive(hWnd : HWnd;
                        Drive, fmtID, Options : LongInt):longint;
                        stdcall; external 'shell32.dll';

 procedure QuietFormatDrive;
 const
   SHFMT_ID_DEFAULT  = $FFFF;
   SHFMT_OPT_QUICK   = $0000;
   SHFMT_OPT_FULL    = $0001;
   SHFMT_OPT_SYSONLY = $0002;
   SHFMT_ERROR       = $FFFFFFFF;
   SHFMT_CANCEL      = $FFFFFFFE;
   SHFMT_NOFORMAT    = $FFFFFFFD;
 begin
   case SHFormatDrive(Handle, 0, SHFMT_ID_DEFAULT, SHFMT_OPT_FULL) of
     SHFMT_ERROR    : ShowMessage('Error on last format, drive may be formatable');
     SHFMT_CANCEL   : ShowMessage('Last format was canceled');
     SHFMT_NOFORMAT : ShowMessage('Drive is not formatable');
   end;
 end;



Retour au haut de la page


60) Utiliser le CPU a 100% pour son prog.

var
   H : THandle;
 begin
   H := GetCurrentProcess();
   SetPriorityClass(H,REALTIME_PRIORITY_CLASS);
 end;
 


61) Remplacer le bureau Windows par votre application

Windows NT
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
Insérez la valeur c:\votrechemin\votreappli.exe

Windows95
Editez Win.Ini, Sous [Desktop] mettez
Shell=c:\votrechemin\votreappli.exe


62) Eviter les messages d'erreur critique de Windows

var
  wOldErrorMode : Word;
begin
  wOldErrorMode :=SetErrorMode(SEM_FAILCRITICALERRORS );
    try
      //Error code here
    finally
  SetErrorMode( wOldErrorMode );
end;
 


63) Mettre son PC en veille

SetSystemPowerState(FALSE,FALSE);
 


64) Connaitre le runtime de Windows

Pour savoir depuis combien d temps Windows est lancé :

   Label1.caption := IntToStr(GetTickCount);


65) Connaitre la langue de Windows

function Language:string;
var
  IdiomaID:LangID;
  Idioma: array [0..100] of char;
begin
  {Obtiene el ID del idioma del sistema}
  {Get System ID}
  IdiomaID:=GetSystemDefaultLangID;
  {Obtiene el nombre del idioma}
  {Get Language Name}
  VerLanguageName(IdiomaID,Idioma,100);
  Result:=String(Idioma);
end;
 


66) Enregistrer un fichier *.wav

uses mmSystem;

....

procedure TForm1.Button1Click(Sender: TObject);
begin
  mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS mysound', nil, 0, handle); //Enregistre
  mciSendString('SET mysound TIME FORMAT MS '+     // format...
       'BITSPERSAMPLE 8 '+                // 8 Bit
       'CHANNELS 1 '+                     // MONO
       'SAMPLESPERSEC 8000 '+             // 8 KHz
       'BYTESPERSEC 8000',                // 8000 Bytes/s
        nil, 0, handle);
  mciSendString('RECORD mysound', nil, 0, handle); // enregistrement
end;
 

procedure TForm1.Button2Click(Sender: TObject);     // Stop
begin
  mciSendString('STOP mysound', nil, 0, handle)
end;
 

procedure TForm1.Button3Click(Sender: TObject);      // Sauvegarde
var verz: string;
begin
  GetDir(0, verz);
  mciSendString(PChar('SAVE mysound ' + verz +  '/test.wav'), nil, 0, handle);
  mciSendString('CLOSE mysound', nil, 0, handle)
end;


67) Crypter un password

procedure TForm1.Button1Click(Sender:TObject);
var
  s : string[255];
  c : array[0..255] of Byte absolute s;
  i:Integer;
begin
  {encode}

  s:='siro_com developers';
  For i:=1 to ord(s[0]) do c[i] := 23 XOr c[i];
  Label1.Caption:=s;

  {Decode}

  s:=Label1.Caption;
  For i:=1 to Length(s) do s[i] := 23 XOr ord(s[i]));
  Label2.Caption:=s;
end;
 
 
 
 
 
 
 


Thanks to :
Michel pour son site ;
Torry
Lennie de Villiers
Philipe.poussin .













 Retour à la page principale(prog)
Retour à la page d'accueil