Téléchargé 8 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
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.
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.
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; |
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".
Merci pour la réponse, Alcatîz.
Voici ce que j'ai fait pour les fichiers : ça semble fonctionner.
Est-ce que j'ai bon ?
Pour la procédure GetTextExtentPoint(), voici ce que j'ai fait :
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.
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 *) |
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)); |
En tout cas le programme fonctionne.
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 :
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 ?
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);
Auriez-vous des idées ?
Ça me semble tout bon.
Pour les problèmes d'affichage, il s'agit peut-être d'attributs de contrôles obsolètes ?
Pour les problèmes d'affichage, il s'agit peut-être d'attributs de contrôles obsolètes ?
Voilà, j'ai trouvé une façon au moins provisoire de rétablir l'affichage.
J'ai supprimé cette ligne :
Merci Alcatîz pour ce programme !
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; |
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.