Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

VISIOMEM - AFFICHER VOTRE MÉMOIRE


Information sur la source

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é: 3 396 / 346

Note :
Aucune note

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

Pour les "Membres Club", vous pouvez 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

Commentaires et avis

signaler à un administrateur
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;

signaler à un administrateur
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 !

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

posterieur = precedente = ulterieure :)



signaler à un administrateur
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 !

signaler à un administrateur
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 !

signaler à un administrateur
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 !

signaler à un administrateur
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;

signaler à un administrateur
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 ?

signaler à un administrateur
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 !

signaler à un administrateur
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

signaler à un administrateur
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 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 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 BLOQUER LE INTERNET EXPLOREUR [ par lehcen ] Bonjour,Comment bloquer le internet exploreur  avec Code Delphi ?Merci Controle de Conection de l' internet ? [ par MiniProgramer ] Salutje cheche le code qui il me dit, c'est je suis conectee avec L'internet ou noWindow XP fait ca par example application de lecture des code a barre [ par aymen1608 ] slt s'il est possible de me donner une application pour la lecture des code a barre avec un lecteur relier RS232 code barre en delphi [ par salimana2004 ] slt  ts le monde savaj'ai besion de vous aidesje prépare une application de gestion personnel d'un hopital et je veux faire l pointage des personne au Page Internet en Boucle + Verrouiller la croix [ par emirej ] Bonjour a tous , je cherche un code qui permet de relancer a l'infini la meme page internet je suppose qu'il faut utiliser un Timer mais je sais pas t TActionMainMenuManager Icone, couleur etc... [ par RURUInc ] Bonjour tout le monde,C'est mon premier message sur ce forum, apres l'avoir bien parcouru.J'ai utiliser ActionManager (menu style XP), tous les exempl connexion à un site internet via le programme [ par pierrecoulon ] bonjour à tous,serait-il possible de faire apparaitre une nouvelle fenêtre avec une connexion internet et appuyant sur un bouton dans le programme?mer


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.