IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Téléchargé 7 fois
Vote des utilisateurs
1 
0 
Détails
Licence : Freeware
Mise en ligne le 15 novembre 2010
Plate-forme : Windows
Langue : Français
Référencé dans
Navigation

Carnet d'adresses

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.
Avatar de Alcatîz
Responsable Pascal, Lazarus 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
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 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
Responsable Pascal, Lazarus 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
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
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.