Home page

 

Bonjour

Je vous propose de consulter mes liens Delphi : 100% francophones, quelques trucs et astuces

Générateur d'états

Mon générateur d'état, vous pouvez l'utiliser tel quel ou l'améliorer. Pour des explications n'hésiter pas à me contacter

Exemple de gestion de l'imprimante

Une Form à inclure dans votre projet pour l'impression de fichiers sans Qreport, l'utilisateur peut choisir les champs à imprimer. Si le fichier à imprimer est indexé, le fichier pourra être trié avant impression.

Cet exemple permettra que comprendre l'utilisation de l'objet Canvas pour l'impression sous Delphi

Trucs et astuces

Ne nombreux trucs et astuces System, écran et mes recommandations pour créer très simplement une application réseau utilisant des tables

L

I

E

N

S

NoBug

Michel BURDIN

Eric Pedrazzi

Le Web Rouchu

Mezoud Prod

Perso DELPHI components

Le site Delphi de Michel

Home Page de Manu

Overbyte : François Piette Home Page

Au cybersouk de l'octet maîtriser

Annuaire des services Delphi

Delphi-cybergroupe

Delphi et VTT

Le Temple des Delphinautes

Philippe Poussin

Le site de Temma

Tristan Tissot

La caverne d'Ali-Baba

Olivier Guilbaud

Stargate

La Page de Mehdi Bourmad

Le cyber annuaire des programmeurs Delphi

Paul Toth

Dark Skull Software

Planète Delphi

 

Trucs et astuces

Ecran

Forcer la mise en route de l'économiseur :

PostMessage(GetDesktopWindow, WM_SYSCOMMAND, SC_SCREENSAVE, 0);

Activer l'économiseur d'écran:

SystemparametersInfo(SPI_SETSCREENSAVEACTIVE,1,nil,SPIF_SENDWININICHANGE);

Désactiver l'économiseur d'écran

SystemparametersInfo(SPI_SETSCREENSAVEACTIVE,0,nil,SPIF_SENDWININICHANGE);

Connaître la résolution de l'écran

Avec : var HH :HDC; LARG,HAUT:integer;

HH:=getdc(GetDesktopWindow);
LARG:=GetDeviceCaps(HH,HORZRES);
HAUT:=GetDeviceCaps(HH,VERTRES);

Changer le papier peint de windows

SystemParametersInfo(SPI_SETDESKWALLPAPER,0,PChar('fichier BMP'),SPIF_SENDWININICHANGE);

Changer la résolution de l'écran à l'éxécution

Procedure changeresolution;
Var
Resolution:TDeviceMode;
i:integer;
Begin

 Resolution.dmSize := sizeof (Resolution);
 Resolution.dmPelsWidth := 640;  (800)
 Resolution.dmPelsHeight := 480; (600)
 Resolution.dmBitsPerPel := 16;  (24)
 Resolution.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL;

 I := ChangeDisplaySettings(Resolution, CDS_TEST);

 Case i Of
 DISP_CHANGE_SUCCESSFUL:
  Begin
   // Ok 
   ChangeDisplaySettings(Resolution, 0);
  End;
  DISP_CHANGE_RESTART :
  Begin
   MessageDlg('Vous devez redémarrer l'ordinateur',mtwarning,[mbOk], 0);
  ChangeDisplaySettings(resolution, CDS_UPDATEREGISTRY);
  End;
  DISP_CHANGE_BADMODE, DISP_CHANGE_FAILED
  Begin
    MessageDlg(' Erreur lors du changement de résolution',mtwarning,[mbOk], 0);
   ChangeDisplaySettings(resolution, CDS_UPDATEREGISTRY);
  End;

End;
End;

System

Lancement de la fenetre de configuration de l'heure

WinExec('RUNDLLl32.EXE SHELL32.DLL,Control_RunDLL timedate.cpl',SW_SHOWNORMAL);

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

Avec :buf::array[0..512] of Char >> GetTempPath(511,buf);

Rebooter Windows

ExitWindows(EW_REBOOTSYSTEM,0);

Relancer Windows

ExitWindows(EW_RESTARTWINDOWS,0);

Commander l'ouverture du lecteur de CD

Inclure unité mmsystem

>Ouverture : MciSendString('Set CDAUDIO DOOR OPEN WAIT', NILl, 0, handle);

>Fermeture :
MciSendString('Set CDAUDIO DOOR CLOSED WAIT', NIL, 0, handle);

Chemin du répertoire Windows

Avec : path : array[0.255] of char; > GetWindowsDirectory(Path,255);


Chemin du répertoire System

Avec : path : array[0.255] of char; > GetSystemDirectory(Path,255);

Supprimer la barre de tache pendant le déroulement d'un programme

Avec: BarreTache : HWND; dans les declarations de variable de 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;

Exécuter un fichier son Wav
Inclure unité mmsystem

Sndplaysound(pchar('exemple.wav'),SND_ASYNC+SND_NOSTOP)

Créer très simplement une application réseau utilisant des tables

Voici mes recommandations

1- Répertoire partagé :

Regrouper toutes les tables dans un module de données .Ne pas associer de composant DataBase aux tables

A l événement OnCreate du module de donnée mettre la propriété DatabaseName de toutes les table =au chemin du répertoire partagé. Effectuer avant tout le test If directoryExist( ) pour savoir si la base de donnée est accessible

Le chemin du répertoire partagé sera modifiable dans un module 'Connexion' et sauvegarder dans un fichier Ini ou autre

2- Pour que les changement apportées aux tables apparaissent simultanément et soient connues de toutes les stations du réseau

A l'état normal, les modifications apportées aux tables ne seront pas visibles en direct sur chaque station avec risque de pertes de données etc.. Il faut sur chaque station du réseau paramètrer le système de façon suivante:

Avec L'administrateur BDE : Onglet Configuration : Icône System; Icône Init: mettre local share à TRUE

3- Rafraîchissement des données

Les données modifiées seront réellement visibles sur toutes les stations après un rafraîchissement des tables modifiées

Pour cela : disposer un Timer dans le module de données, à l'événement OnTimer, rafraîchissez toutes les tables partagées par la méthode : Table.Refresh , Le temps de rafraîchissement pourra être paramètré dans le module Connexion et sauvegarder dans un fichier Ini.

4- Eviter les problèmes

lorsque vous modifier une table et que le rafraîchissement est activé, le champ modifié est à chaque fois initialiser à sa dernière valeur, pour éviter ce problème, ne jamais modifier une table dans un dbgrid, rassembler les champs modifiables dans une fiche et désactiver le rafraîchissement à l'événement OnActivate de la fiche puis restaurer le rafraîchissement à l'événement OnClose de la fiche.

Pour ne pas surcharger l'échange de données entre le serveur de données et les station, le taux de rafraîchissement doit être au moin égal à 1,5 seconde par nombre de station du réseau utilisant la base données, ne rafraîchir que les tables partagées dont le contenu est critique.

Sauvegarder la position des colonnes et la personnalisation du DbGrid

Sauvegarder : Dbgrid.Columns.SaveToFile(GetCurrentdir+'\nomdefichier');

Charger : Dbgrid.Columns.LoadFromFile(GetCurrentdir+'\nomdefichier');