Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

"Nos petits trucs utiles de développeurs"
Et si on partageait nos astuces et nos trouvailles de programmation ?

Le , par Droïde Système7

27PARTAGES

5  2 
Bonjour

J'espère que je poste dans le bon forum, sinon merci à la modération de rediriger ce thread.

Depuis longtemps, j'avais envie de créer quelque chose de très utile pouvant servir à tout le monde et surtout soit au niveau débutant, mais puisse, pourquoi pas, également servir aux autres.

Voici donc un thread entièrement consacré aux petits trucs sans prétention bêtes comme choux, mais très efficaces à l'usage.

Il ne s'agit en aucun cas de code compliqué ni de manipulation de haut vol ; tout le contraire et accessible à tous.

Je vous invite pour notre plus grand plaisir de développeurs d'ajouter vos trucs.

Aller, je commence...

  • BUT : Comment s'y retrouver dans une feuille de plusieurs milliers de lignes, lorsque l'on réalise des modifs un peu partout éparpillées dans différentes procédures et fonctions ?

C'est une technique que je nomme "Mickeytisation". Pourquoi ? hé bien vous allez tout de suite comprendre.
Imaginez une feuille de 50 000 lignes, vous avez repris le code d'une dizaine de procédures et quelques fonctions, alors ensuite si dans les semaines à venir, vous vous apercevez qu'un comportement anormal de votre appli provient (ou peu provenir) de ces modifications ; là intervient ma Mickeytisation.

Exemple :
En face de chaque bloc modifié, je pose au gré de mon imagination un"riri", ou un "loulou", ou encore un "fifi", etc.
Je complémente par le datage de ces modifs afin de mieux m'y retrouver.
Mais attention, chaque "loulou" par exemple correspondra à une seule série de modification.

Code : Sélectionner tout
1
2
3
4
procedure...
begin
...        // loulou   11/2007
end;
A l'aide de la fonction rechercher de votre EDI, c'est ensuite un jeu d'enfant d'aller consulter chaque bloc modifié correspondant à telle ou telle date. La semaine dernière encore, ce truc m'a bien évité des heures et des heures de recherche !
Ne pas oublier en en-tête de chaque feuille d'écrire la correspondance des modifs, style : "loulou" = ajout option impression... du 17/11/2007

Encore un autre truc :
  • BUT : En plein travail, je dois m'absenter ou bien fermer mon PC, etc., comment retouver rapidement l'endroit exact de ma dernière écriture de code lors de la réouverture de mon EDI ?

Simplement de taper n'importe quel caractère juste à l'endroit que vous étiez avant de passer à autre chose. Suffit en reprenant votre travail de lancer la compil, le compilateur vous indiquera gentiment l'endroit exact en question.

J'espère que ce thread nous sera utile

A vous de jouer et de nous donner vos trucs !

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de hohorga
Membre du Club https://www.developpez.com
Le 24/02/2012 à 17:42
En tant que débutant vous n'avez probablement pas accès aux sauvegardes d'entreprises (j’entends par là le dev qui apprend chez lui)... Pensez vous à sauver régulièrement vos sources loin de votre lieu de développement (un dégâts des eaux ça n'arrive pas qu'aux autres... voir un incendie... Ou un cambriolage où les gars vous piquent le PC + les HDD externes de sauvegarde), c'est à dire sur un autre lieu que là où vous codez ?

Voilà une astuce toute simple qui ne coûte rien...

Créez vous un compte gmail dédié.

Ensuite zipez (perso j'utilise 7zip) votre projet puis envoyez le par mail sur votre nouveau compte gmail. Un projet Zipé sans les DCU et autres ne fait pas une taille énorme et peut être envoyé pas mail en une poignée de minutes.

Faites régulièrement vos sauvegardes "par mail". Ainsi en cas de dégâts (incendie, vol etc) vous n'aurez qu'à vous connecter sur gmail pour récupérer vos sources. Voilà, vous avez votre "cloud" personnel.

Autres avantages :
- Accessible de n'importe où...
- Gestion de "version" (grâce à la date des mails - vous pouvez aussi mettre un nom "parlant" dans le zip, qui inclue la date ou un numéro de version).

Dernières astuces si vous craignez que les "chinois du FBI" ne vous volent vos sources : activez le cryptage dans votre logiciel de ZIP et mettez un mot de passe suffisamment long mais que vous pourrez vos rappeler dans quelques mois si le besoin se fait sentir.

Personnellement j'utilise cette méthode pour avoir une sauvegarde décentralisée d'un projet personnel, en fait je double la sauvegarde (on ne sait jamais...) : sur gmail et dans un compte mail de free.

NB : dans le cas de Free utilisez zimbra.free.fr pour gérer vos mail et pas de logiciel genre Thunderbird qui va rapatrier vos mails en local (sauf si vous savez le paramétrer pour ne pas le faire).
4  0 
Avatar de pitango
Membre habitué https://www.developpez.com
Le 19/11/2007 à 17:26
Citation Envoyé par alainvh

évidemment, je ne peux pas imprimer de compte-rendu comme le permet RichEdit
Juste un petit truc auquel , on ne pense pas toujours (c'était mon cas il y a peu)

Sur un showmessage, on peut faire un control C et placer le tout dans notepad et ... l'imprimer.

A+
3  0 
Avatar de Paul TOTH
Expert éminent sénior https://www.developpez.com
Le 23/11/2015 à 11:02
Citation Envoyé par Droïde Système7 Voir le message


Voici un petit truc, mais tout petit alors, l'autre fois dans une unité de milliers de lignes, je ne vous dis pas...

S'agit tout bêtement d'éviter de mettre des accolades en guise de commentaire.

Pourquoi me direz-vous ?

Hé bien justement : imaginez que vous avez à neutraliser par exemple pour tests des milliers de lignes comportant ce genre de commentaires.

Désormais avant de mettre sous {...} je réfléchis à deux fois et préfère les //
il reste possible de faire deux choses

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
(* commentaire 1

{ commentaire 2

// commentaire 3

}

fin du premier commentaire *)
et

Code : Sélectionner tout
1
2
3
4
5
6
7
8
{$IFDEF NON}
(* commentaire 

{ autre commentaire }

fin du premier commentaire *)
{$ENDIF}
3  0 
Avatar de CapJack
Membre éprouvé https://www.developpez.com
Le 16/08/2011 à 22:35
Avec Outils/Configurer les outils/Ajouter...





(testé avec Delphi 2009 sous Win 7).

Créeront deux outils ouvrant un explorateur de fichiers, le premier dans le répertoire du fichier sélectionné dans l'éditeur, le deuxième dans le répertoire cible du projet. Explo électronique, toujours pratique.

Déterminer la taille d'un fichier en toutes circonstances, même s'il est ouvert dans une autre application :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function DTFileSize
        (
        const APath             : string
        ) : Int64;
 var S : TFileStream;
 begin
  Result := 0;
  if not(FileExists(APath)) then exit;
  S := nil;
  try
   S := TFileStream.Create( ExpandFileName( APath ),
                            fmOpenRead or fmShareDenyNone );
   Result := S.Size;
  finally
   if assigned(S) then S.Free;
  end;
 end;


Résoudre le problème du warning "Char in SetOfChar" sous Delphi 2009 et +, en conservant un code universel :

Se compile sous toutes les versions de Delphi, Ansi ou Unicode, et paf ! le warning.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type
        {$IFDEF UNICODE}
        SetOfChar = TSysCharSet;
        {$ELSE}
        SetOfChar = set of Char;
        {$ENDIF UNICODE}

Function  DTCharInSet(C:Char;const CharSet:SetOfChar):Boolean;
 begin
  {$IFDEF UNICODE}
  Result := CharInSet(C,CharSet)
  {$ELSE}
  Result := C in CharSet
  {$ENDIF UNICODE}
 end;
2  0 
Avatar de Andnotor
Rédacteur/Modérateur https://www.developpez.com
Le 13/12/2012 à 0:35


long silence...

2  0 
Avatar de alainvh
Membre régulier https://www.developpez.com
Le 19/11/2007 à 15:33
Je procède un peu comme Gilbert Geyer, mais en étant encore plus à "ras des pâquerettes"
Je place un ShowMessage('Ici') et un ShowMessage('Là') de part et d'autre du code qui me semble "dérailler" : puis je resserre cette "tenaille" par dichotomie. En général, je trouve le "bug" assez vite : évidemment, je ne peux pas imprimer de compte-rendu comme le permet RichEdit, mais je n'utilise aucun composant sur la Form !
1  0 
Avatar de ShaiLeTroll
Expert éminent sénior https://www.developpez.com
Le 19/11/2007 à 16:38
Pour ma part, j'utilise OutputDebugString qui utilisent le Journal d'évènement de Delphi, mais j'utilise aussi le principe du Memo\RichEdit (j'ai développé une petite fonction Trace, qui affiche les logs de l'appli en temps réel en couleur selon la gravité), le ShowMessage c'est aussi bien pratique (dans une appli converti de DBase à MySQL des opérations DB n'ont pu être comprise et donc traduite, du coup, en mode SUPERUSER, il y a des messages "Je ne sais pas pourquoi, on passe par là" ou "Code non Traduit", et dans l'appli, en fait quelques cas "spéciaux" du coup ne sont plus gérés ...)
1  0 
Avatar de Rayek
Modérateur https://www.developpez.com
Le 23/11/2007 à 9:04
Pour ma part, j'ai une unité où je mets les fonctions que j'utilise le plus souvent et qui se répercute de programmes en programmes.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
 
unit uDefs; 
 
interface 
 
uses SysUtils,stdctrls,Dialogs,DateUtils,Forms; 
 
const 
  CVERSION = '1.00'; 
  CVERDATE = '10/08/2007'; 
 
var 
  GAPPPATH : String; 
 
  procedure MemoMessage (Memo : TMemo; sText : String); 
  procedure CreateLogFile(sFilename,sText : String); 
  function Wait (ms : Integer) : Integer; 
 
 
implementation 
 
procedure MemoMessage (Memo : TMemo; sText : String); 
begin 
  CreateLogFile(FormatDateTime('YYYYMMDD',Now) + '.log', 
                  DateToStr(Now) + ' ' + TimeToStr(Now) +  sText); 
  while Memo.Lines.Count > 500 do 
    Memo.Lines.Delete(0); 
  Memo.Lines.Add('[' + DateToStr(Now) + ' ' + TimeToStr(Now) + '] ' + sText); 
end; 
 
procedure CreateLogFile(sFilename,sText : String); 
var 
  FText : TextFile; 
  sFile, sDir : String; 
begin 
  try 
    sDir := GAPPPATH + '\logs\' + FormatDateTime('YYYY',Now) + '\' + 
            FormatDateTime('MM',Now) + '\'; 
    if not DirectoryExists(sDir) then 
      ForceDirectories(sDir); 
    sFile :=sDir + sFileName; 
    AssignFile(FText,sFile); 
    if FileExists(sFile) then 
      Append(FText) 
    else 
      ReWrite(FText); 
    try 
      Writeln(FText,Trim(sText)); 
    finally 
      Closefile(FText); 
    end; 
  Except on E:Exception do 
    begin 
      if IOResult = 32 then 
        CreateLogFile(sFileName,sText) 
      else 
        ShowMessage(E.Message); 
    end; 
  end; 
end; 
 
function Wait (ms : Integer) : Integer; 
var 
  dTimeDebut : TDateTime; 
  iMsBetween : Integer; 
begin 
  dTimeDebut := Now; 
  iMsBetWeen := MilliSecondsBetween(Now,Now); 
  while  iMsBetWeen <= ms do 
  begin 
    Application.ProcessMessages; 
    iMsBetween := MilliSecondsBetween(dTimeDebut,Now); 
  end; 
  Result := abs(iMsBetween); 
end; 
 
end.
la variable Globale GAPPPATH est initialisée au démarrage et recoit le chemin de l'application.

Code delphi : Sélectionner tout
1
2
  
GAPPPATH := ExtractFilePath(Application.exename);

De même que pour CVERSION et CVERDATE, je m'en sert pour le titre de l'paplication au démarrage

Code Delphi : Sélectionner tout
1
2
  
Caption := 'MonApplication v' + CVERSION + ' du ' + CVERDATE;

La fonction Wait est une sorte de sleep sans le défaut du sleep.
Car lors de l'utilisation du sleep, le programme est mis en pause (voir dans l'aide) alors que ma fonction laisse passer correctement les messages Windows.
1  0 
Avatar de Droïde Système7
Membre expérimenté https://www.developpez.com
Le 26/11/2007 à 15:48
pitango,

Merci de ton merci, mais je n'y suis pour rien

1  0 
Avatar de OutOfRange
Membre confirmé https://www.developpez.com
Le 11/01/2009 à 19:26
Salut tout le monde
Un petit truc que je trouve très pratique pour déplacer et positionner avec précision les compos sur la form
CTRL + flèche direction pour déplacer le compo
SHIFT + bas pour augmenter la height du compo
SHIFT + haut pour diminuer la height du compo
SHIFT + droite pour augmenter la width du compo
SHIFT + gauche pour diminuer la width du compo
tout ça pixel par pixel
Très utile aussi pour modifier la taille/position d'un compo en arrière plan, inaccessible à la souris
1  0