Trucs & Astuces
Home Up

 

Trucs & Astuces

Cette section du site contient des trucs et astuces que j'ai glanés à divers endroits lors de mes pérégrinations, que ce soit dans les "newsgroups", dans divers site Web ou dans des livres de références. Un certain nombre de ces trucs et astuces proviennent aussi de mon expérience personnelle alors que j'ai dû résoudre des problèmes sans aucune aide.

J'espère que vous trouverez ici des solutions à des problèmes.

Rubriques de cette page

Perte de mémoire Windows
Comment exécuter le fureteur par défaut à partir de Delphi?
Arrière-plans en Delphi
Conversion des fichiers image
Comment compter les lignes de texte affichées dans un composant texte multilignes?

Pertes de mémoire Windows

Si vous vous apercevez qu'après chaque exécution d'une application que vous avez développé, vous avez une perte de ressources Windows, vous pouvez diagnostiquer votre problème en utilisant l'utilitaire Memproof fournis au site Web ce, si vous utilisez une version 32-bit de Delphi.

Retour en haut de la page

Départ du furereur par défaut à partir de Delphi

Il y a une façon simple d'exécuter le fureteur par défaut à partir d'une application Delphi. Il suffit d'utiliser la commande ShellExecute de la façon suivante:

ShellExecute(Handle , 'open', 'http://www.whatever.com',
 nil, nil, SW_MAXIMIZE);

In faut cependant s'être assuré d'avoir utilisé

uses ShellAPI;

Retour en haut de la page

Arrière-plans en Delphi

Toutes les pages Web et les programmes multimédia ont des arrière-plans. Comment se fait-il que les fiches de Delphi n'en aient pas? Voici deux façons d'obtenir le même effet en Delphi:

À la conception

Vous placez un objet TImage sur votre fiche et et y placer le bitmap de la façon habituelle. Vous changez sa propriété Alignment à la valeur alClient, ce qui étent l'image à la dimension de son conteneur. Si le bitmap n'est pas assez grand pour couvrir tout le conteneur, il faut alors mettre sa propriété Stretch à true, ce qui agrandit la surface de l'image pour couvrir tout le conteneur.

C'est simple mais ça ne couvre pas toutes les possibilités. Si vous voulez changer l'arrière-plan dynamiquement, il faut le faire à l'exécution, comme dans le cas qui suit.

À l'exécution

Vous pouvez effectuer la même chose à l'exécution en utilisant le code qui suit:

dans la section déclaration public, ajouter
bmpBackground: TBitmap;
Ajoutez le code d'initialisation du bitmap dans le gestionnaire d'événement OnCreate
bmpBackground:= TBitmap.Create;
bmpBackground.LoadFromFile(FileName1)

où FileName1 doit correspondre au chemin d'un fhchier bitmap; et

ajoutez au gestionnaire d'événement OnPaint le code suivant:
Canvas.Draw(0, 0, bmpBackground);

Si le bitmap n'est pas assez grand pour couvrir le conteneur, il ne s'étirera pas automatiquement pour le couvrir en utilisant la méthode Draw du Canvas. Il faut alors utiliser l'alternative suivante:

Canvas.StretchDraw(Rect, bmpBackground);

où Rect est un object TRect dont les coordonnées correspondent aux dimensions du conteneur.

Retour en haut de page

Conversion de fichiers image

En Delphi, on peut convertir un fichier .jpg en fichier .bmp en utilisant le code suivant:

JPG:= TJPEGImage.Create;
BMP:= TBitmap.Create;
try

Retour en haut de page

Comment compter les lignes de texte affichées dans un composant texte multilignes?

Composants Memos

On dit procéder la la façon suivante:

var
  R: TRect;
  LastVisibleLine, LastLineIndex: Integer;
Begin
  Memo.Perform(EM_GETRECT, 0, longint(@R));
  LastLineIndex := Memo.Perform(EM_CHARFROMPOS, 0,
     MakeLParam(R.Left +1, R.Bottom -2));
  LastVisibleLine := Memo.Perform(EM_LINEFROMCHAR, LastLineIndex, 0);

Ce code retourne l'indice de la dernière ligne partiellement visible.

Composants RichEdit

Si vous utilisez le code du truc valide pour les composants Memo à un composant RichEdit, vous obtenez une violation d'accès dans RICHEDIT.DLL. Pourquoi? Tout simplement parce que Microsoft utilise le même message pour les composants RichEdit mais utilise des paramètres différents. Vous pouvez utiliser le code qui suit pour un composant RichEdit:

var 	
   R: TRect; 
   LastVisibleLine, 
   LastLineIndex: Integer; 
begin 
   Richedit.Perform(EM_GETRECT, 0, longint(@r)); 
   R.left := R.left + 1; 
   R.top := R.bottom - 2; 
   LastLineIndex := RichEdit.Perform(EM_CHARFROMPOS, 0, Integer(@R.topleft)); 
   LastVisibleLine := Richedit.Perform(EM_EXLINEFROMCHAR, 0, LastLineindex); 

 

Home Curriculum Vitae Services Pages Delphi Maison à vendre