Carnet d'adresses

Présentation
Compilateur : Borland Pascal.

Carnet d'adresses et répertoire téléphonique. Le programme peut servir de serveur DDE pour une autre application (un modèle de document WinWord 6 accompagne d'ailleurs le source).

Sujets intéressants : Dialogues Windows standard de choix de police de caractères et de choix de couleurs, impression de listings et d'étiquettes.
Téléchargement
Compatibilité
Windows
1  0 
Téléchargé 12 fois Voir les 6 commentaires
Détails
Avatar de Jean-Luc Gofflot
Responsable Pascal, Delphi et Assembleur
Voir tous les téléchargements de l'auteur
Licence : Gratuit
Date de mise en ligne : 15 novembre 2010




Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 25/01/2014 à 11:27
Bonjour !

J'ai essayé de retoucher le carnet d'adresses dans le but de pouvoir le compiler avec Virtual Pascal, et j'y suis parvenu.

Voici ce que j'ai fait. J'ai supprimé la référence à l'unité Win31. J'ai remplacé la déclaration du type tRect par Windows.tRect (apparemment il y avait une homonymie qui provoquait une erreur). Enfin, j'ai recompilé les fichiers de ressources.

Il reste deux petites choses que je n'ai pas su résoudre.

1° Les lignes contenant la fonction GetTextExtent ne passent pas. Je les ai mises en commentaires le temps de trouver la modification à faire. (A la limite, je pourrais les remplacer par des valeurs constantes.)

2° Cette ligne :

Code : Sélectionner tout
n:=_lRead(HandleFichier,Buffer,TailleBuffer);
me fait obtenir un message d'erreur "type mismatch", apparemment à cause du type de la variable Buffer. Là, je ne sais pas trop quoi faire, et c'est plus embêtant, parce que du coup je ne peux pas lire le fichier de données. (Ce qui est étrange, c'est que j'arrive à l'écrire. )

Auriez-vous des idées ?
Avatar de Alcatîz Alcatîz - Responsable Pascal, Delphi et Assembleur https://www.developpez.com
le 25/01/2014 à 14:37


Citation Envoyé par Roland Chastain  Voir le message
1° Les lignes contenant la fonction GetTextExtent ne passent pas. Je les ai mises en commentaires le temps de trouver la modification à faire. (A la limite, je pourrais les remplacer par des valeurs constantes.)

GetTextExtent est obsolète ; tu peux la remplacer par GetTextExtentPoint comme dans cet exemple d'infobulle, qui calcule la taille du texte à afficher (champ TexteBouton) pour positionner la bulle :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Procedure tInfoBulle.SetupWindow; 
(* Dimensionnement de la fenêtre *) 
Var lpSize : tSize;                 (* Résultat de GetTextExtentPoint *) 
    DC : hDC; 
    AncienneFonte, Fonte : hFont; 
Begin 
  DC := GetDC(hWindow); 
  Fonte := GetStockObject(Ansi_Var_Font); 
  AncienneFonte := SelectObject(DC,Fonte); 
  GetTextExtentPoint(DC,TexteBouton,StrLen(TexteBouton),lpSize); 
  SelectObject(DC,AncienneFonte); 
  MoveWindow(hWindow,Attr.x,Attr.y,lpSize.cx + 6,18,True); 
  ReleaseDC(hWindow,DC); 
End;
Second point :
Citation Envoyé par Roland Chastain  Voir le message
2° Cette ligne :

Code : Sélectionner tout
n:=_lRead(HandleFichier,Buffer,TailleBuffer);
me fait obtenir un message d'erreur "type mismatch", apparemment à cause du type de la variable Buffer. Là, je ne sais pas trop quoi faire, et c'est plus embêtant, parce que du coup je ne peux pas lire le fichier de données. (Ce qui est étrange, c'est que j'arrive à l'écrire. )

La fonction _lRead et ses soeurs sont obsolètes (API 16 bits) ; elles devraient être remplacées par celles de l'API 32. Tu peux trouver des exemples dans ce tutoriel (notamment au paragraphe "Tests").

Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 25/01/2014 à 18:48
Merci pour la réponse, Alcatîz.

Voici ce que j'ai fait pour les fichiers : ça semble fonctionner.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
Function tFenetrePrincipale.CREATION_FICHIER : Boolean; 
(* CREATION DU FICHIER ADRESSES.DTA (UTILISATION DES FONCTIONS FICHIERS DU KERNEL WINDOWS) *) 
Begin 
  //HandleFichier:=_lCreat(NomFichier,0); 
  HandleFichier := CreateFile(NomFichier,GENERIC_WRITE,FILE_SHARE_WRITE,Nil,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,0); 
  //if HandleFichier = -1 
  if HandleFichier = INVALID_HANDLE_VALUE 
     then   (* ERREUR *)
Code : Sélectionner tout
1
2
3
4
5
6
7
8
Function tFenetrePrincipale.OUVERTURE_FICHIER : Boolean; 
(* OUVERTURE DU FICHIER ADRESSES.DTA (UTILISATION DES FONCTIONS FICHIERS DU KERNEL WINDOWS) *) 
Begin 
  //HandleFichier:=_lOpen(NomFichier,of_Read or of_Share_Deny_Read); 
  HandleFichier := CreateFile(NomFichier,GENERIC_READ,FILE_SHARE_READ,Nil,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,0); 
  //if HandleFichier = -1 
  if HandleFichier = INVALID_HANDLE_VALUE 
     then   (* ERREUR *)
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
Function tFenetrePrincipale.LECTURE_FICHIER : Boolean; 
(* LECTURE DU FICHIER ADRESSES.DTA (UTILISATION DES FONCTIONS FICHIERS DU KERNEL WINDOWS) *) 
Var n : DWord;//Word;   (* NOMBRE D'OCTETS LUS *) 
Begin 
  LECTURE_FICHIER:=false; 
  //n:=_lRead(HandleFichier,Buffer,TailleBuffer); 
  ReadFile(HandleFichier,Buffer,TailleBuffer,n,Nil); 
  if n = $FFFFFFFF//$FFFF 
     then   (* ERREUR *)
Code : Sélectionner tout
1
2
3
4
5
6
7
8
Function tFenetrePrincipale.ECRITURE_FICHIER : Boolean; 
(* ECRITURE DU FICHIER ADRESSES.DTA (UTILISATION DES FONCTIONS FICHIERS DU KERNEL WINDOWS) *) 
Var n : DWord;//Word;   (* NOMBRE D'OCTETS ECRITS *) 
Begin 
  //if _lWrite(HandleFichier,Buffer,TailleBuffer) = $FFFF 
  WriteFile(HandleFichier,Buffer,TailleBuffer,n,Nil); 
  if n = $FFFFFFFF//$FFFF 
     then   (* ERREUR *)
Code : Sélectionner tout
1
2
3
4
5
6
Function tFenetrePrincipale.FERMETURE_FICHIER : Boolean; 
(* FERMETURE DU FICHIER ADRESSES.DTA (UTILISATION DES FONCTIONS FICHIERS DU KERNEL WINDOWS) *) 
Begin 
  //if _lClose(HandleFichier) <> 0 
  if not CloseHandle(HandleFichier) 
     then   (* ERREUR *)
Est-ce que j'ai bon ?

Pour la procédure GetTextExtentPoint(), voici ce que j'ai fait :

Code : Sélectionner tout
1
2
//lTexte:=LoWord(GetTextExtent(DC,Formule,StrLen(Formule))) + LoWord(GetTextExtent(DC,' ',1)); 
lTexte:=LoWord(GetTextExtentPoint(DC,Formule,StrLen(Formule),Size)) + LoWord(GetTextExtentPoint(DC,' ',1,Size));
J'ai encore un problème au niveau de l'affichage (capture d'écran ci-jointe), mais il me semble que ça vient d'ailleurs.

En tout cas le programme fonctionne.
Avatar de Alcatîz Alcatîz - Responsable Pascal, Delphi et Assembleur https://www.developpez.com
le 26/01/2014 à 15:27
Ça me semble tout bon.

Pour les problèmes d'affichage, il s'agit peut-être d'attributs de contrôles obsolètes ?
Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 27/01/2014 à 11:11
Citation Envoyé par Alcatîz  Voir le message
Ça me semble tout bon.

Pour les problèmes d'affichage, il s'agit peut-être d'attributs de contrôles obsolètes ?

Merci pour la confirmation. Pour l'affichage, j'ai essayé quelques modifications mais sans trouver la bonne. Il faut que je prenne le temps de l'étudier dans le détail. En attendant, la majeure partie du programme fonctionne, et j'en suis bien content.
Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 16/02/2014 à 13:42
Voilà, j'ai trouvé une façon au moins provisoire de rétablir l'affichage.

J'ai supprimé cette ligne :

Code : Sélectionner tout
1
2
3
4
5
6
Procedure tFenetrePrincipale.PAINT (PaintDC : hDC; var PaintInfo : tPaintStruct); 
... 
                   else   (* UTILISATION DES COULEURS PAR DEFAUT *) 
                     begin 
                       //Fond:=not Fond; Couleur:=not Couleur; 
                     end;
Merci Alcatîz pour ce programme !
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
Responsables bénévoles de la rubrique Pascal : Gilles Vasseur - Alcatîz -