begin process at 2012 02 11 07:27:22
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > VISIOMEM - AFFICHER VOTRE MÉMOIRE

VISIOMEM - AFFICHER VOTRE MÉMOIRE


 Information sur la source

Note :
Aucune note
Catégorie :Système Classé sous :mémoire, système, barre, fonctions, internet Niveau :Débutant Date de création :17/04/2008 Date de mise à jour :18/04/2008 20:17:29 Vu / téléchargé :4 891 / 483

Auteur : Bacterius

Ecrire un message privé
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Bonjour,
cette application permet d'afficher une barre dans le coin inferieur droit de votre écran, ainsi qu'une icone dans la zone de notification. Cette barre affiche la quantité de mémoire libre sur votre machine.
Le code est très commenté (enfin je crois)
Assez joli et petit, il sera peut-être votre ami lol !

Source

  • begin
  • // Dans le zip
  • end;
  • end.
begin 
     // Dans le zip
end;

end.

 Conclusion

Si vous avez des commentaires ou des remarques, des critiques. L'intêret principal du programme peut être vague, mais il contient quelques fonctions interessantes dont vous pouvez vous servir, au cas ou le programme ne vous interesse pas.

Je suis ouvert à tous commentaires - critiques - remarques - conseils !

Cordialement, Bacterius !

PS : Bonne programmation !

PS2 : WindowsXP.RES n'est pas de moi

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • About.dcuTélécharger ce fichier [Réservé aux membres club]3 829 octets
  • About.dfmTélécharger ce fichier [Réservé aux membres club]28 314 octets
  • About.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 485 octets
  • Main.dcuTélécharger ce fichier [Réservé aux membres club]9 966 octets
  • Main.dfmTélécharger ce fichier [Réservé aux membres club]1 697 octets
  • Main.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier7 800 octets
  • Tests.dofTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 412 octets
  • Tests.dprTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 079 octets
  • Tests.resTélécharger ce fichier [Réservé aux membres club]1 936 octets
  • windowsxp.RESTélécharger ce fichier [Réservé aux membres club]736 octets

Télécharger le zip


 Historique

17 avril 2008 11:30:14 :
// trompé de catégorie - sacrée roulette de souris !
17 avril 2008 11:32:46 :
Oubli de WindowsXP.Res ;)
18 avril 2008 20:10:15 :
// Version 1.1 ! - Optimisation du code; merci fOxi !
18 avril 2008 20:17:29 :
Fin de la mise en ligne de la version 1.1

 Sources du même auteur

Source avec Zip Source avec une capture RAYTRACING EN DELPHI (PROGRESSIVE PATH TRACING)
Source avec Zip Source avec une capture MOTEUR PHYSIQUE 2D CHIPMUNK.. EN DELPHI!
Source avec Zip Source avec une capture DOWNSAMPLING OU COMMENT BIEN OPTIMISER LE CODE
Source avec Zip Source avec une capture FACTORISATION ET TEST DE PRIMALITÉ 32 BITS ULTRA OPTIMISÉ
Source avec Zip LECTEUR DE FICHIER MULTIMÉDIA RIFF

 Sources de la même categorie

Source avec Zip LECTURE DE LA MEMOIRE D'UN AUTRE PROCESSUS par Mokost
Source avec Zip Source avec une capture LIBÉRER LA TAILLE MAXIMALE D'UNE FENÊTRE PAR SUBCLASSING par rt15
Source avec Zip Source avec une capture OBSERVATEUR DE PROCESSUS ACTIFS; VPROCESS 1,0 par Neftali
UN SELECTDIRECTORY QUI SE PLACE AU BON ENDROIT par ThWilliam
Source avec une capture VOTRE PROGRAMME DE MAIL COMME CLIENT MAIL PAR DÉFAUT SOUS WI... par MAURICIO

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture LE CERCLE ENCHANTÉ D'ANDRES GÎT EN NOS MÉMOIRES par Caribensila
Source avec Zip GET IP AVEC INDY par Gerard
Source avec Zip FACEBOOK API POUR DELPHI par pinkfloydhighopes
Source avec Zip Source avec une capture DISKINFO V1.0.0 par Christophe67
Source avec Zip Source avec une capture MEMORYSTATUS par Christophe67

Commentaires et avis

Commentaire de f0xi le 17/04/2008 17:25:47 administrateur CS


Correction :

- Pas besoin de variables.
- Toujours executer en mode protégé (try...finally)
- On n'appel jamais Destroy mais Free pour liberer un objet (lire l'aide delphi)
- Attention a respecter l'utilisation correcte de TRegistry.
- OpenKey doit etre une condition d'execution (if ... then)
- On ne touche pas aux clef systeme, appel du "CKINE" a false! pas a true!
- On appel toujours CloseKey a la fin

procedure TForm1.WriteInReg;
begin
  with TRegistry.Create do
  try
    RootKey := HKEY_CURRENT_USER;
    if OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', false) then
      WriteString('VisioMem_Run_On_Start',ParamStr(0));
    CloseKey;
  finally
    Free;
  end;
end;

procedure TForm1.EraseFromReg;
begin
  with TRegistry.Create do
  try
    RootKey := HKEY_CURRENT_USER;
    if OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', false) then
      if ValueExists('VisioMem_Run_On_Start') then
        DeleteValue('VisioMem_Run_On_Start');
    CloseKey;
  finally
    Free;
  end;
end;

On ne note jamais les True/False dans les conditions, même si c'est bon, c'est inutile.

if condition = true then => if condition then
if condition = false then => if not condition then

a respecter aussi pour les While, Repeat until etc.

de plus, afin d'eviter les problemes, il faut egalement jouer avec les propriété enabled des checkboxs.
On ne peu inscrire et désinscrire la clef en même temps!
Egalement toujours laisser des choix Vierge a l'utilisateur (checkbox non checked)

  with TRegistry.Create do
  try
    RootKey := HKEY_CURRENT_USER;
    if OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', false) then
    begin
      LanceraudmarragedeWindows1.Checked := false;
      Supprimerlaclduregistre1.Checked   := false;
      Supprimerlaclduregistre1.Enabled   := ValueExists('VisioMem_Run_On_Start');
      LanceraudmarragedeWindows1.Enabled := not Supprimerlaclduregistre1.Enabled;
    end;
    CloseKey;
  finally
    Free;
  end;


En programmation, qu'on soit francais ou non, les Flags, s'appels toujours des Flags! c'est un terme technique, pas un mots traductible.


Un timer réglé a 1ms ne sert a rien! tu peux regler a 250, 500, 1000 ms. c'est amplement suffisant pour ce genre de trucs.
pour de l'animation on mettrais plutot aux alentours de 40-50ms (25/20Fps)

La boucle du timer peut largement etre améliorée!
n'utilise pas d'integer pour les capacitées! minimum LongWord/DWORD/Cardinal. sinon ton programme affichera n'importe quoi passé les 2Go de ram (ce qui est le cas de beaucoup de monde).

pas besoin d'une fonction externe pour le calcul du %, en le mettant en clair dans la routine on permet au compilateur de faire sa petite optimisation.

toujours pour le %, le type extended est beaucoup trop grand pour ça!
un % ne depasse jamais 100 dans ce cas precis et la precision a 1 suffit amplement (point trop n'en faut) donc single (FLOAT 32 bits).

Toujours dans ce cas precis, les nombreux appel a IntToStr, FormatFloat, etc ralentissent ta routine. un bon vieux Format permet de  gagner un peu de performance et donc de ne pas occuper le CPU pour rien.

La selection du format d'affichage des capacitées (Mo, Ko, O) :
Ne pas oublier les "Else" au conditions afin de ne pas appeler plusieurs fois du code inutile.

shr 20 = div (1024*1024) = plus rapide
shr 10 = div 1024 = plus rapide

on peu garder le div si tu inclus la norme du format des octets de 1998 :
1 Kibi-octet (Kio) = 1024 octets
1 Kilo-octet (Ko) = 1000 octets
Mais cette norme n'est valables que pour les stockages physique (DD, clef Usb, carte memoire). la capacitée de la Ram etant toujours ne vieille norme ou 1Ko = 1024 octets.
Mais c'est toujours bon de la savoir.

L'unité de mesure des capacité prend toujours une majuscule :
Mo (Mega-octets)
Kb (Kilo-bits)
GB (Giga-Bytes) (Bytes s'ecrit avec un B majuscule pour le differencier du b de bits)

Finallement, en supprimant les fonctions inutile on gagne encore du temps en supprimant plusieurs Call de fonctions :
ta version = 7 calls (2*SizeOf, 2*GetMemoryStatus, GetFreeMem, GetTotalMem, GetPercentage)
version corrigée = 2 calls (1*SizeOf, 1*GetMemoryStatus).

donc on passe de 7 calls * 1000 (1 ms) = 7000 calls/secondes
a 2 calls * 2 ou 4 (500/250 ms) = 4 / 8 calls/secondes

tout cela permettra une plus grande fluidité de ton programme.

procedure TForm1.Timer1Timer(Sender: TObject);
Var
  Mem : TMemoryStatus;
  T, F: LongWord;
  P   : single;
begin
Var
begin
  Mem.dwLength := SizeOf(TMemoryStatus);
  GlobalMemoryStatus(Mem);
  F := Mem.dwAvailPhys;
  T := Mem.dwTotalPhys;
  P := (100/T)*F;

  Barre.Min := 0;
  Barre.Max := T;
  Barre.Position := F;

  if Mgaoctets1.Checked then
    Barre.Hint := format('%d Mo libres sur %d Mo - %.1f%%',[F shr 20, T shr 20, P])
  else
  if Kilooctets1.Checked then
    Barre.Hint := format('%d Ko libres sur %d Ko - %.1f%%',[F shr 10, T shr 10, P])
  else
  if Octets1.Checked then
    Barre.Hint := format('%d Octets libres sur %d Octets - %.1f%%',[F,T,P]);
  ModifieIcone;
end;

Commentaire de Bacterius le 17/04/2008 18:53:58

Urgh
Ok je tiendrai compte de ca dans la version posterieure foxi ^^'
Merci beaucoup :)

Cordialement, Bacterius !

Commentaire de f0xi le 18/04/2008 16:51:52 administrateur CS

posterieur = precedente = ulterieure :)



Commentaire de Bacterius le 18/04/2008 18:26:08

Bonjour,
Lol je rectifie donc :
"Version Ulterieure"
Merci foxi
Mais je crois qu'il y a quand meme une erreur dans ton équation ^^' ... ulterieur ne veut-il pas dire "après" ? http://fr.wiktionary.org/wiki/ult%C3%A9rieur :
"
ultérieur

(Familier) Qui se fait après, qui arrive après.
Je me suis réservé la liberté de faire des demandes ultérieures.
J'attendrai encore des renseignements ultérieurs.
La cérémonie a été remise à une date ultérieure."

Merci quand meme d'avoir rectifié mon erreur :p

Cordialement, Bacterius !

Commentaire de Bacterius le 18/04/2008 19:23:11

Re,
j'ai ajouté des petites optimisation supplémentaires aux conseils que tu m'as donné Foxi :
- j'ai mis le Barre.Min := 0; dans le Form.Create puisque ca ne change jamais ...

- Ajout d'un message d'erreur en cas d'erreur de registre, et alors les options "lancer au démarrage" disparaissent

- Création d'une autre clé (SoftWare\VisioMem) et pas dans (Windows\Run) :)

Voila, qu'en pensez-vous ? je mettrai le zip bientot :)

Cordialement, Bacterius !

Commentaire de Bacterius le 18/04/2008 20:13:18

Version 1.1 mise en ligne - finalement je laisse dans Windows\Run sinon j'ai peur que la clé ne serve a rien ^^'

Cordialement, Bacterius !

Commentaire de f0xi le 20/04/2008 19:00:52 administrateur CS

au temps pour moi, c'est anterieur pas ulterieur :)
huhuhu

alors pour le Barre.Min, la VCL standard dispose d'un code propre qui empeche l'execution de tout une portion de code si une propriété se voit alouer toujours la même valeur :

procedure TProgressBar.SetMin(value: integer);
begin
  if Value <> fMin then
  begin
    fMin := Value;
    Change;
  end;
end;

ou un truc comme ça, mais c'est pas plus mal de le virer, on supprime ainsi un call, un cmp et un jump.


pour le registre :

pas besoin de gerer l'exception, et attention, tu ne librere plus l'instance du TRegistry, donc memory Leak!

au mieux, double bloc try :

with ...create do
try
  try
    ...
  except
    ...
  end;
finally
  Free;
end;

Commentaire de philkakou le 22/04/2008 21:00:59

J'ai delphi 7
Quand je charge le main.pas Delphi me dit que la fiche correspondante n'existe pas...
Comment faire ?

Commentaire de Bacterius le 22/04/2008 21:19:49

Bonjour,
te donne-t-il un message du genre : "Erreur de lecture Format de flux incorrect" ?

Dans ce cas essaye de prendre juste le code source, et de recréer une fiche :)

Tu fixes la propriété BorderStyle de la fiche, None,
et tu ajoutes un bouton et une barre (nommée Barre) à ta fiche. Je suis désolé que tu n'arrives pas à ouvrir le source. Moi je vis ca chaque fois que je télécharge une source ici [99% des cas :( ] ...

Essaye d'ouvrir le projet à l'aide du fichier .DFM peut-être ?

Bonne chance.

Dis-en plus sur tes messages d'erreur, tes problèmes et on pourra peut être mieux t'aider :)

Cordialement, Bacterius !

Commentaire de philkakou le 22/04/2008 23:50:08

Justement, l'erreur de Delphi est la suivante:
Erreur à la création de la fiche. impossible d'ouvrir la fiche
main.dfm fichier spécifié introuvable.
faudrait rajouter les fichiers dfm dans le zip pour disposer de la définition des fenêtres

Commentaire de Bacterius le 23/04/2008 17:33:32

Bonjour,
@Philkakou les fichiers .dfm sont dans le zip ...
Essaye de créer toi-même la fiche et de reporter le code sur l'unité de la nouvelle fiche.
Elle comporte 1 timer, 1 barre de progression, un popup menu et un bouton.
Bonne chance !

Cordialement, Bacterius !

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Wininet [ par winocam ] J'utilise les fonctions de Wininet dans une application pour me connecter à internet. Tout fonctionne parfaitement, sauf lorsque le programme est lanc GetMem et compagnie [ par florenth ] Salut à tous, Je me demandais, en adaptation d'un code C, s'il fallait modifier les fonctions d'allocation de mémoire par rapport au code original.En Informations système sous Xp [ par cincap ] Bonjour à tous,Y a t'il quelqu'un qui connaitrai la commande en Delphi pour faire apparaître la boîte des informations système soit l'équivalent de la Fuite de mémoire dans TCustomListBox (TCheckListBoxDataWrapper) [ par Loda ] Salut tout le monde,j'ai trouvé une fuite de mémoire (memory leak) dans le compo TCheckListBox (TCustomListBox). Il pert des TCheckListBoxDataWrapper. transfert internet [ par fouroulou ] Bonjour tout le monde,Voilà j'ai un petit problème, j'ai réalisé une application base de données(avec interbase 6.5 comme sgbd) et ce avec delphi 7.Ju Temporary internet files [ par pablor ] Bonjour,alors voilà mon problème est que je voudrais lister les fichiers présents dans le dossier "temporary internet files" qui contient donc les fic Barre de progression réelle [ par mighty_warrior ] Bonjour,Ca fait pas mal de temps maintenant que je bidouille un p'tit programme disposant d'une interface en 3D. Le truc c'est que le programme met un Menu contextuel dans la barre des taches [ par JulioDelphi ] Hello =) J'ai dans ma Form1 une procedure qui ouvre X Form2. (dans le Unit1.pas) La voici : Form2:=TForm2.Create(Form2); Form2.Show; Grace à une Code barre [ par wahidov2000 ] salut tt le monde, je suis à la recherche de la classe TBarcode


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,699 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales