BDD
BDD
Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forum C
++ Builder de developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette F.A.Q. ne garantit en aucun cas que les informations
qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est
humaine. Cette F.A.Q. ne prétend pas non plus être complète. Si vous trouvez une
erreur, ou que vous souhaitez devenir rédacteur, contactez pottiez
Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous
vous souhaitons une bonne lecture.
L'équipe C++ Builder de Developpez.
-3-
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
-4-
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Remerciements
Auteurs : pottiez ,
Remerciements à tous ceux qui ont contribués de près ou de loin à l'élaboration de cette F.A.Q.
Remerciements particuliers à Géronimo, créateur de cette FAQ, et à Alacazam. A eux deux, ils ont fourni la grande
base de cette FAQ.
Remerciements également à Greybird et à Ricky81 pour avoir fait vivre cette FAQ durant plusieurs années.
Remerciements à tous les correcteurs qui ont reporté des erreurs de quelque nature que ce soit, ou même soumis des
améliorations, et notamment :
• Erwy
• Louis-Guillaume Morant
• Anomaly
-5-
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
• Piotrek
• Bestiol
• Yogui
• LineLe
• Dut
• N1bus
• Auteur
• Baptiste Wicht
• Claude LELOUP
Enfin, un grand merci à Clément Cunin, auteur originel du cadre de cette F.A.Q. et auteur de la F.A.Q. Java.
-6-
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
-7-
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
C++ Builder est de plus un environnement de développement visuel C++ RAD (Rapid Application Development). Il
permet de construire rapidement des applications en utilisant des composants et simplifie au maximum l'écriture du
code et la réalisation de l'interface. On peut ainsi très rapidement se consacrer à la partie "métier" du code (le code
réellement utile de l'application).
C++Builder permet également le développement rapide d'applications base de données, ainsi que des applications-
serveurs web.
C++ Builder permet le développement multi-plateformes (Windows et Linux) au moyen d'une librairie spéciale, la CLX.
Si l'on ne se soucie que de Windows, la VCL, utilisée par défaut, est également disponible.
La documentation en-ligne est en français.
-8-
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Les prix ne sont pas mentionnés ici car ils peuvent changer ; pour plus d'informations, consultez le site de Borland.
Cependant, il est important de noter que, possesseur d'une version destinée aux étudiants et enseignants, vous ne pouvez
absolument pas distribuer vos applications, et vous ne pouvez utiliser les applications produites que dans un contexte
pédagogique (apprentissage ou enseignement).
-9-
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Certaines personnes affirment que pour faire de petits programmes, les bases du C++ ne sont même pas nécessaires.
Ce n'est cependant certainement pas à conseiller. Même pour réaliser un petit programme, il faut avoir un minimum
de rigueur !
Il existe des mécanismes d'aide automatiques, tout comme des mécanismes d'aide manuels au sein de l'IDE :
- 10 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
• Aide automatique
Via le menu Outils | Options de l'éditeur..., onglet Audit de Code, vous pouvez configurer les fonctionnalités d'aide
automatique.
Les fonctionnalités suivantes sont disponibles :
• Achèvement du code : Cette fonctionnalité permet de vous proposer, lorsque vous écrivez un . ou un -> après le
nom d'un type connu, de vous proposer la liste des méthodes et propriétés disponibles.
• Paramètres du code : Cette fonctionnalité permet de vous proposer, lorsque vous êtes en train d'écrire les
paramètres d'appel à une méthode ou fonction, la liste des paramètres attendus.
• Evaluation d'expression dans conseil : Cette fonctionnalité permet d'évaluer les valeurs des expressions que vous
survolez avec la souris lorsque le compilateur est sur un point d'arrêt. Il s'agit donc plus d'une fonctionnalité de
déboguage
• Audit de symbole dans conseil : Cette fonctionnalité permet de vous indiquer, lorsque vous survolez un type, des
informations sur sa déclaration
Notez que la dernière fonctionnalité peut ralentir fortemment l'IDE. Auquel cas, vous pouvez choisir de la désactiver
(voir le lien en fin de question). De même, vous pouvez choisir de désactiver les deux premières fonctionnalités, pour
les utiliser en manuel, comme expliqué ci-dessous.
Aide manuelle
• Les fonctionnalités automatiques d'achèvement du code et de paramètres du code sont accessibles manuellement,
via la combinaison de touches Ctrl + Espace.
• Lorsque le curseur texte est sur un mot-clé, ou qu'un mot-clé est sélectionné, l'appui sur la touche F1 lance l'aide
sur l'article correspondant, si il est disponible.
• Dans l'Inspecteur de propriétés, l'appui sur la touche F1 lance l'aide sur le composant et la propriété actuellement
sélectionnés.
lien : Pourquoi C++ Builder se fige-t-il lorsque l'on passe la souris sur le code ?
lien : MSDN
lien : Page de recherche MSDN
- 11 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 12 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Delphi et C++ Builder sont très proches, et vous pouvez passer de l'un à l'autre avec une certain aisance. Vous devez
donc décider en fonction de votre préférence de langage.
Pour plus d'informations, vous pouvez consulter le comparatif donné en lien ci-dessous.
- 13 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Pour tous les contrôles fenêtrés ( descendants de TWinControl ) la propriété Handle du composant donne le Handle
de fenêtre Windows sous-jacent au composant.
- 14 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
int c;
//...
if (a < b)
c += a;
else
c += b;
int c;
c += a < b ? a : b;
On voit qu'on évite des lignes de code inutiles et que la lisibilité n'en est pas amoindrie, à condition toutefois de réserver
cette syntaxe aux tests simples. Il peut en effet devenir fastidieux de lire un code construit uniquement autour de cet
opérateur (surtout si plusieurs de ceux-ci sont imbriqués). A utiliser à bon escient donc...
- 15 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
#define NULL 0
La seule différence avec la solution préconisée est que la macro peut-être redéfinie dans le code. Cela générera
néanmoins un avertissement. Vous pouvez donc utiliser NULL dans C++ Builder sans arrière-pensées.
Cet exemple permet de créer un tableau de nbetoiles pointeurs sur des TEtoile. L'instruction Etoiles = new
Etoile*[nbetoiles]; permet de construire le tableau de pointeurs. Il faut ensuite allouer la mémoire nécessaire à chaque
TEtoile, ce que fait la boucle for. La méthode LibereEtoiles fait la démarche inverse : elle libère tous les TEtoile, puis
la mémoire utilisée par le tableau à l'aide de delete[].
- 16 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Par exemple,
vous construisez non pas un tableau de 100 "lignes", mais un tableau de 100 lignes multipliées par la taille d'un entier.
En fait, l'opérateur new connaît la taille des éléments du tableau grâce au type du constructeur :
Ici, c'est le TYPE suivant le new qui détermine la taille des éléments du tableau. La taille détermine le nombre d'éléments
du tableau.
Bien sûr, n'oubliez pas de faire un delete[] pour libérer le tableau ensuite.
If (Assigned(OnEvent)) Then
OnEvent(Self);
if (Objet->OnEvent != NULL)
Objet->OnEvent();
- 17 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Pour éviter cette erreur, assignez NULL à vos pointeurs dès leur déclaration, et après chaque delete. Ainsi, il n'y aura
aucun risque, car delete NULL ne fait rien.
Cette erreur peut aussi arriver si un new échoue. Là encore, l'affectation de NULL résout le problème.
Enfin, cette erreur peut arriver si vous essayez d'accéder à une zone mémoire non allouée. Le cas typique est celui de
la déclaration du pointeur sans new :
TEdit *Edit;
Edit->Parent = this; // Erreur : aucun appel à l'opérateur new n'a été fait !
On voit ici que l'attribution de NULL aux pointeurs permet de limiter les risques, mais cela ne doit pas être une solution
à vos problèmes : il faut chercher pourquoi le pointeur est déréférencé plusieurs fois et l'éviter le plus possible, il faut
chercher pourquoi la création d'un objet échoue, et enfin, il faut veiller à bien allouer la mémoire nécessaire avant
d'utiliser un objet.
- 18 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Dans cet exemple, la variable entière error est directement comparée à des constantes : 0, 1, 2... Définissez plutôt des
constantes à l'aide d'une énumération, ce qui permet de bien visualiser à quoi correspondent ces constantes, et d'être
sûr de ne pas intervertir les traitements dépendant de celles-ci :
En voyant ce code, vous n'avez pas besoin de vous demander à quelle erreur correspond telle constante puisque vous
n'avez pas à connaître les valeurs des constantes (théoriquement, on a SYNTAX_ERROR = 0, DIVISION_0_ERROR =
1 et FATAL_ERROR = 2). Si vous souhaitiez définir les valeurs des constantes, initialisez-les dans l'énumération :
La méthode de gestion des erreurs étant écrite, pour l'appeller, il suffit de passer l'une des constantes en argument :
- 19 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
//...
int a, b;
cout << "Entrez deux nombres :\n";
cin >> a >> b;
- 20 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
AnsiString Chaine;
int i = 10;
Chaine = IntToStr(i); // Chaine = "10"
Ainsi le caractère sera toujours le même. Il faut aussi penser à gérer la saisie de ce caractère dans les TEdit ou autres
zones de saisie devant contenir des nombres réels :
- 21 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
lien : GMP
lien : NTL
lien : MIRACL
lien : MPFR
lien : HaypoCalc
RoundTo(f, 0) arrondit à l'entier le plus proche. Dans le cas où la valeur est juste entre deux entiers, c'est l'entier pair
qui est choisi.
RoundTo(1.2, 0) donne 1
RoundTo(1.9, 0) donne 2
RoundTo(1.5, 0) donne 2
RoundTo(2.5, 0) donne 2
RoundTo(2.500001, 0) donne 3
RoundTo(-1.4, 0) donne -1
RoundTo(-1.5, 0) donne -2
SimpleRoundTo(f, 0) arrondit à l'entier le plus proche. Dans le cas où la valeur est juste entre deux entiers, c'est l'entier
supérieur qui est choisi.
SimpleRoundTo(1.2, 0) donne 1
SimpleRoundTo(1.9, 0) donne 2
SimpleRoundTo(1.5, 0) donne 2
- 22 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
SimpleRoundTo(2.5, 0) donne 3
SimpleRoundTo(-1.4, 0) donne -1
SimpleRoundTo(-1.5, 0) donne -1
Pour imiter la fonction Trunc() en Pascal, on pourra faire un simple cast vers un entier :
Mais dans la plupart des cas, il est utile de formater le nombre de décimales. Pour ce faire il y a différentes fonctions
proposées par C++ Builder : FloatToStrF(), FormatFloat() ou Format().
Par exemple pour afficher une valeur avec deux chiffres après la virgule :
float f = 12345.6789;
ShowMessage(FloatToStrF(f, ffFixed, 8, 2));
ShowMessage(FormatFloat("0.00", f));
ShowMessage(Format("%8.2f", ARRAYOFCONST((f))));
N'hésitez pas à consulter l'aide pour une utilisation avancée de ces fonctions.
Exemple :
- 23 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Comment obtenir la valeur décimale d'un entier à partir d'une représentation hexadécimale ?
Auteurs : Ricky81 , Bloon ,
La fonction suivante propose un tel traitement en utilisant tout simplement la fonction StrToInt :
return StrToInt(Value);
}
Exemples d'utilisation :
ShowMessage(HexToInt("12")); // affiche 18
ShowMessage(HexToInt("F1")); // affiche 241
ShowMessage(HexToInt("$FF")); // affiche 255
//---------------------------------------------------------------------------
// IntToBinStr
// Number : entier ou hexadecimal non signé
// Digits : nombre de quartets affichés
//---------------------------------------------------------------------------
AnsiString IntToBinStr(unsigned int Number, int Digits)
{
int i;
AnsiString KeyString;
char *BitSTring[] = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
return KeyString;
}
- 24 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
{
AnsiString N="";
if(nBits > 32) nBits = 32;
for(int j = 0; j < nBits; j++)
{
N = "0" + N; //remplissage par le début de la chaîne
N[1] = (char)(N[1] + (I & 1)); // on évite un if
I = I / 2; // prêt pour le bit suivant
}
return N;
}
Exemples de résultats :
• 19 -> 0001011
• 0x13 -> 0001011
- 25 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
AnsiString Chaine;
Chaine = "coucou";
Chaine = Chaine.UpperCase(); // = "COUCOU"
ShowMessage(Chaine);
AnsiString Chaine;
Chaine = "COUCOU";
Chaine = Chaine.LowerCase(); // = "coucou"
ShowMessage(chaîne);
Comment convertir une chaîne AnsiString en une chaîne C, tableau de caractères à zéro terminal ?
Auteurs : Geronimo , Greybird ,
Certaines fonctions requièrent l'usage des chaînes C standards (tableaux de caractères à zéro terminal).
La classe AnsiString fournit un grand nombre de méthodes dont la méthode c_str qui permet de convertir une AnsiString
en une chaîne C (C string).
AnsiString Src;
AnsiString Dest;
//...
// Ce code va générer une erreur
CopyFile(Src, Dst, true);
Le code ci-dessus va générer une erreur "Impossible de convertir AnsiString en const char *" car la fonction CopyFile
demande pour arguments des chaînes C. Pour résoudre ce problème, il convient d'utiliser la méthode c_str :
- 26 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
AnsiString Src;
AnsiString Dest;
//...
// Ce code ne génerera aucune erreur
CopyFile(Src.c_str(), Dst.c_str(), true);
Attention ! La méthode c_str retourne un pointeur sur une chaîne C, qui n'est valable que pour l'instruction suivant
l'appel à c_str. En d'autres termes, vous ne pouvez pas faire ceci :
En effet, au moment où CopyFile est exécutée, pSrc et pDest pointent sur un emplacement mémoire dont le contenu
est indéfini. Il se peut très bien que la mémoire ait été écrasée entre les instructions c_str et l'appel à CopyFile. Ce ne
sera pas toujours le cas, et le programme peut très bien fonctionner parfaitement pendant très longtemps, et planter
de façon aléatoire...
Pour résoudre ce problème, il faut utiliser la fonction strcpy :
Pour utiliser les caractères étendus, il faut adapter la fonction aux chaînes WideString :
- 27 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
return Res;
}
Prenons l'exemple du caractère DOS 129 "ü" qui correspond donc à la valeur 0x9a :
char a = 0x9a;
ShowMessage(a); // n'affiche pas "ü"
// les deux sorties suivantes affichent bien "ü"
ShowMessage(DosStrToWinStr(a));
ShowMessage(DosStrToWideWinStr(a));
lien : MSDN
Si jamais le contenu de la zone d'édition n'est pas convertible en entier, un message prévient l'utilisateur qu'il doit
rentrer un entier correct.
A noter qu'il existe une fonction ne générant pas d'exception, mais retournant une valeur par défaut si la conversion
n'est pas possible : IntToStrDef. Cette fonction peut-être utile pour certains cas de figure.
- 28 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Le fichier est chargé en mémoire dans l'objet de type TStringList et est accessible dans son intégralité via la propriété
Text mais également ligne par ligne via la propriété Strings.
Les modifications après lecture ne se font qu'en mémoire, elles ne sont pas automatiquement répercutées sur le fichier.
- 29 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Exemple :
Attention :
• le premier caractère possède l'index 1 et non pas 0 !
• il ne faut pas dépasser la longueur de la chaîne sous peine de violation d'accès
Exemple :
- 30 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Exemple :
lien : Comment remplacer une occurrence dans une chaîne par une autre valeur ?
Comment remplacer une occurrence dans une chaîne par une autre valeur ?
Auteurs : Ricky81 , Nono40 ,
L'unité StrUtils disponible à partir de la version 6 de C++ Builder propose les fonctions AnsiReplaceStr et
AnsiReplaceText. Pour les utiliser, il vous suffit de faire l'inclusion suivante :
#include <StrUtils.hpp>
La fonction AnsiReplaceStr remplace donc toutes les occurrences d'une sous-chaîne dans une chaîne en tenant compte
de la casse. AnsiReplaceText fait exactement la même chose mais est insensible à la casse.
Exemple :
- 31 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Le résultat est l'index de la chaîne dans le tableau si elle est trouvée, et -1 dans le cas contraire.
#include <StrUtils.hpp>
...
AnsiString Str = "Chaine3";
AnsiString Values[] = {"Chaine1", "Chaine2", "Chaine3"};
int tabSize = sizeof(Values) / sizeof(AnsiString);
switch(AnsiIndexStr(Str, &Values[0], tabSize))
{
case 0: // "Chaine1"
{
break;
}
case 1: // "Chaine2"
{
break;
}
case 2: // "Chaine3"
{
break;
}
case -1: // une autre chaîne
{
break;
}
}
Si votre version de C++ Builder ne propose pas cette fonction, vous pouvez l'implémenter ainsi :
int AnsiIndexStr(const AnsiString aText, const AnsiString * aTab, const int tabSize)
{
if (aTab == NULL)
{
return -1;
}
for (int i = 0 ; i < tabSize ; i++)
{
if (aTab[i] == aText)
{
return i;
}
}
return -1;
}
- 32 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
asm
{
mov eax, 10; // Place 10 dans eax (eax = 10)
add eax, 10; // Ajoute 10 dans eax (eax = 20)
}
Vous devez également placer la directive #pragma inline au début du fichier contenant de l'assembleur. Ceci indique
à C++Builder qu'il y aura de l'assembleur dans votre source.
#pragma inline
- 33 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
en tête de l'unité où vous avez placé de l'assembleur. Le compilateur redémarre donc la compilation en activant la
compilation de l'assembleur quand il en rencontre. Lorsque vous placez cette directive, le compilateur est prévenu dès
le début de la présence d'assembleur dans le code et active alors l'assembleur avant de compiler.
- 34 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 35 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Dans C++Builder2006
- 36 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 37 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
• Enfin, vous pouvez essayer d'utiliser les optimisations du compilateur : Projet | Modifier le fichier d'options. Dans
le tag CFLAGS, remplacez le code -Od par -O1.
Par expérience, c'est surtout la première méthode qui se révêle la plus payante. La troisième n'ayant pas d'effet, la
seconde obligeant à déployer les librairies séparemment, ce qui augmente plutôt la taille du fichier distribué.
Quels fichiers peut-on déployer avec une application créée dans C++Builder ?
Auteurs : Geronimo ,
Un fichier a été installé avec Borland C++ Builder dans le répertoire d'installation qui se nomme "deploy.txt". Consultez
ce fichier pour savoir quels fichiers vous pouvez déployer avec quelle version.
Un bon moyen de rendre le projet compatible avec votre environnement est de suivre une procédure similaire à la
suivante :
• Après avoir extrait le projet en question, supprimez tout ce qui ne concerne que le projet : fichiers *.bpr, *.res,
nomduprojet.cpp. Bref ne conservez que les fichiers relatifs aux unités ou autres éléments composants votre projet.
• Recréez une application sous C++ Builder
• Supprimez la fiche créée automatiquement, en utilisant Projet | Retirer du projet
• Ajoutez la ou les fiches, unités, ... au projet
• Si nécessaire, faites les éventuelles adaptations spécifiquement liées à votre projet
Vous avez ainsi recréé l'application en bénéficiant de la configuration du projet par défaut de C++ Builder.
Si ce projet par défaut est configuré pour recenser les différentes bibliothèques que vous avez, vous ne devriez pas avoir
de mal à tester l'application. Dans le cas contraire il vous faudra ajouter à la main dans les propriétés du projet les
bibliothèques nécessaires voire installer les bibliothèques manquantes.
Attention : vérifiez bien que votre version de C++ Builder (Personnelle, Professionnelle, Entreprise) dispose des
bibliothèques nécessaires au fonctionnement de l'application.
Exemple
this->Color = 0x00EBD6D6;
- 38 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Remarque
• Ne pas transtyper en (TColor) pour justement générer ce message.
• Dans : Projet | Options | Compilateur | Avertissement, cocher : Tous
...
(Option de ligne de commande supprimant cet avertissement : -w-eas)
...
Il nous reste plus qu'à rajouter ces 2 lignes, pour que l'avertissement ne monte plus.
- 39 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Les fichiers avec l'extension .CPP sont compilés comme des fichiers C++. Les fichiers ayant une extension .C, sans
extension, ou différente de .CPP, .OBJ, .LIB, ou .ASM sont compilés comme des fichiers C.
Les compilateurs essayent de lier avec un fichier de définition de module ayant le même nom que l'exécutable.
Option Description
-an Aligne les données sur les frontières n , où 1=octet, 2=mot (2 octets), 4=mot*double (4 octets), 8=mot quadruple (8
octets), 16=paragraphe (16 octets) (Défaut : -a8 )
-B Compile en .ASM (-S), puis appelle l'assembleur pour générer un .OBJ
-b Les enums ont toujours la taille des entiers (Défaut : -b les enums ont la taille d'un entier)
-b- les enums ont la taille d'un octet si possible
-C Active les commentaires imbriqués (Défaut : -C- désactive les commentaires imbriqués)
- 40 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
-Hs Met en mémoire cache "intelligente" les fichiers en-tête précompilés (Défaut)
-Hu Utilise les en-têtes précompilés, mais ne les génère pas
-I<chemin> Définit le chemin d'accès aux répertoires des fichiers inclus
-in Définit n comme taille significative des identificateurs (Défaut : 250)
-Ja Développe tous les membres modèle y compris les membres inutilisés
-jb Arrête la compilation par lot après le premier fichier ayant généré des erreurs (désactivé par défaut)
-Jgd Génère des définitions pour toutes les instances de modèles et fusionne les chaînes dupliquées (Défaut)
-Jgx Génère des références externes pour toutes les instances de modèles
-jn Erreurs*: arrêt après n messages (Défaut : 25)
-K Type caractère non signé par défaut (Défaut : -K- = type caractère signé par défaut)
-pr Utilise la convention d'appel fastcall pour transmettre les paramètres aux registres
-ps Utilise la convention d'appel stdcall
-Q Informations d'erreur du compilateur étendues (désactivé par défaut)
-q Supprime la bannière d'identification du compilateur (désactivé par défaut)
-R Inclut les informations du browser dans les fichiers .OBJ générés
-RT Active les informations d'identification des types à l'exécution (Défaut)
- 41 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
-S Compilation en .ASM
-T- Supprime toutes les options précédentes de l'assembleur
-Tx Transmet l'option x à l'assembleur
-tW La cible est une application Windows (identique à -W)
-Vl Utilise l'ancien style des structures Borland C++ (pour la compatibilité avec les versions précédentes de BCC32.EXE)
-VF Compatibilité MFC
-Vmd Utilise la plus petite représentation possible des pointeurs sur membres
-Vmm Gère l'héritage multiple pour les pointeurs sur membres
-Vmp Pointeurs sur membres de précision déclarée d'honneur
-Vms Gère l'héritage simple pour les pointeurs sur membres
-Vmv Ne place aucune restriction sur ce que peuvent pointer les pointeurs sur membres (Défaut)
-Vx Fonctions membre de classe vide de taille nulle
-v Active le débogage du source
-vG Toutes les options Codeguard activées
-vGc Accès au pointeur en ligne (Codeguard)
-vGd Accès aux données globales et de la pile (Codeguard)
- 42 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
-X Désactive les informations d'auto-dépendance du compilateur (Défaut : -X- active les informations d'auto-
dépendance du compilateur)
-x Active la gestion d'exception (Défaut)
-xd Autorise le nettoyage des destructeurs (Défaut)
-xdg Utilise le compteur de destructeurs global (pour la compatibilité avec les versions précédentes de BCC32.EXE)
-xf Active les prologues rapides des exceptions
-xp Active les informations sur l'emplacement de l'exception
-wbbf -w8005 Les champs bit doivent être des entiers signés ou non signés (désactivé par défaut)
-w-bei -w-8006 Initialisation de 'identificateur' avec 'identificateur' (Défaut)
-w-big -w-8007 La valeur hexadécimale contient plus de trois chiffres (Défaut)
-w-ccc -w-8008 La condition est toujours vraie OU toujours fausse (Défaut)
-wcln -w8009 La constante est longue (désactivé par défaut)
-w-hch -w-8021 Gestionnaire pour 'type1' caché par gestionnaire précédent pour 'type2' (Défaut)
-w-hid -w-8022 'fonction1' cache la fonction virtuelle 'fonction2' (Défaut)
-w-ias -w-8023 La variable tableau ''identificateur'' est near (Défaut)
-w-ibc -w-8024 La classe de base 'classe1' est aussi la classe de base de 'classe2' (Défaut)
-w-ifr -w-8085 Fonction 'fonction' redéfinie comme non-en ligne (Défaut)
- 43 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
-w-mpd -w-8034 Précision maximum utilisée pour le type pointeur membre 'type' (Défaut)
-w-msg -w-8035 Avertissements définis par l'utilisateur (Défaut)
-wnak -w8036 Non-ANSI utilisé : 'motclé' (désactivé par défaut) (Remarque : l'utilisation de cette option est nécessaire
pour se conformer à la norme ANSI)
-w-ncf -w-8037 Fonction non const 'fonction' appelée pour un objet const (Défaut)
-w-ntd -w-8049 Utilisez '> >' pour les modèles imbriqués au lieu de '>>' (Défaut)
-w-nto -w-8050 Aucun fichier de types OBJ présent. Désactivation de l'option types externes. (Défaut)
-w-nvf -w-8051 Fonction non volatile 'fonction' appelée pour un objet volatil (Défaut)
-w-obi -w-8052 Initialisation de base sans nom de classe est maintenant obsolète (Défaut)
-w-obs -w-8053 'identificateur' obsolète (Défaut)
-w-pre -w-8063 Opérateur de préfixe surchargé 'opérateur' utilisé comme un opérateur de suffixe (Défaut)
-w-pro -w-8064 Appel à la fonction 'fonction' sans prototype (Défaut)
-w-pro -w-8065 Appel à la fonction 'fonction' sans prototype (Défaut)
- 44 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
-w-stl -w-8089 'opérateur<' doit être visible publiquement pour être contenu par un nom 'nom' (désactivé par défaut)
-w-stl -w-8090 'opérateur<' doit être visible publiquement pour être utilisé par un nom 'nom' (désactivé par défaut)
-w-stl -w-8091 L'argument 'type' 'argument' passé à 'fonction' est un itérateur de 'type'. Itérateur de 'type' requis
(désactivé par défaut)
-w-stl -w-8092 L'argument 'type' 'argument' passé à 'fonction' n'est pas un itérateur. Itérateur de 'type' requis
(désactivé par défaut)
-wucp -w8079 Mélange de pointeurs de plusieurs types 'char' (désactivé par défaut)
-wuse -w8080 'identificateur' est déclaré mais jamais utilisé (désactivé par défaut)
-w-voi -w-8081 Les fonctions void ne doivent pas renvoyer de valeur (Défaut)
-w-zdi -w-8082 Division par zéro (Défaut)
- 45 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > Langage > Compilation et édition de liens > Comment résoudre l'erreur...
[Lieur Erreur] Unresolved external 'UneFonction()' referenced from XXX.OBJ ?
Auteurs : CGi , Neo41 ,
Cette erreur se produit quand vous appelez une fonction dont vous avez bien inclus le fichier entête la déclarant, mais
dont le lieur ne trouve pas son implémentation.
Une cause possible est que cette fonction provient soit d'une librairie (.lib) ou d'un fichier source (.cpp) et que vous
avez omis de l'ajouter au projet.
Dans ce cas, la solution est d'ajouter la librairie ou le fichier source au projet (via le menu Projet | Ajouter au projet...)
Il peut également arriver que l'erreur se produise même si le .lib est bien ajouté au projet. En ce cas, il s'agit
probablement d'une librairie que vous avez développée, et dans laquelle vous venez d'apporter des modifications.
Une solution peut alors être de supprimer tous les fichiers temporaires (.obj, .tds, .~, les .lib et .bpl s'ils existent), et de
reconstruire la librairie (la recompilation ne suffit pas).
[Lieur Erreur fatale] Fatal: Could not open XXX.exe (program still running?) ?
Auteurs : CGi , pottiez ,
La cause probable de cette erreur est que le programme que vous essayez de compiler, construire ou exécuter est déjà
en cours d'exécution.
La solution est simple : fermer l'instance du programme en cours d'exécution.
A partir de Windows Vista cette erreur peut apparaître si vous n'executez pas C++Builder en
tant qu'Administrateur.
Le problème est que dans la définition de la méthode vous avez omis son appartenance à la classe (TForm1:: dans notre
example)
- 46 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Elle est donc définie comme une fonction indépendante et non comme une fonction membre. Cette erreur est assez
fréquente, mais comme le code est valide on n'obtient qu'une erreur de l'éditeur de lien.
Dans ce cas, la solution est de rajouter le nom de la classe devant la méthode (TForm1:: dans notre exemple).
La deuxième:
• Ouvrir le projet concerné
• Faire un click doit sur le nom du projet et ensuite choisir "Modifier la source des options" pour afficher le fichier
xml
• Chercher toutes les occurrences de 'XXX.LIB' et les supprimer
• Sauvegarder le projet SANS LE FERMER
• Retirer un fichier de la liste des fichiers du projet (peu importe lequel)
• Sauvegarder le projet et fermer C++ Builder
• Réouvrir le projet
• Rajouter le fichier retiré auparavant
• Compiler
- 47 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
Les lignes de commentaires permettent de clarifier le code en séparant les méthodes. On trouve tout d'abord les
instructions de préprocesseur. L'instruction
#include <vcl.h>
#pragma hdrstop
permet de définir ce qui sera placé dans les en-têtes précompilés. Tous les fichiers en-tête (#include) placés au-dessus
de cette directive seront placés dans les entêtes précompilées. Les en-têtes précompilées permettent d'accélérer la
compilation, au détriment de la place sur le disque dur. Veillez à ce que dans toutes les unités, ce soient les mêmes
fichiers qui soient placés au-dessus de cette directive.
#include "Unit1.h"
Cette instruction préprocesseur inclut le fichier d'en-tête Unit1.h qui contient la définition de la classe TForm1.
#pragma package(smart_init)
Cette instruction garantit l'initialisation correcte des paquets joints au programme, dans le bon ordre des dépendances.
- 48 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Les fichiers.dfm contiennent la fiche conceptualisée graphiquement. Tout ce que vous placez sur votre fiche, composants,
etc... est stocké dans ce fichier ainsi que les propriétés de chaque composant (hauteur, largeur, position,...) Cette directive
signale que le fichier en cours (Unit1.cpp) est le fichier unité d'une fiche : c'est le fichier lié à la fiche. Vient ensuite la
déclaration de Form1.
TForm1 *Form1
Form1 est un pointeur sur un objet de type TForm1. Form1 représente votre fiche. Lorsque vous faites Form1->Edit1-
>Text, c'est à ce Form1 que vous faites référence.
Enfin, ceci est le constructeur de la fiche. C'est pour cela qu'elle a le même nom que la classe de la fiche : TForm1.
Comme chaque méthode de la fiche, son appartenance à celle-ci est marquée par le TForm1::. La méthode suivante :
void TForm1::CompterMots()
{
est la méthode CompterMots qui appartient à la classe TForm1. Le constructeur a pour argument TComponent* Owner.
Enfin, le code :
: TForm(Owner)
Sachez que la classe TForm1 dérive d'une classe parente TForm. Dans la VCL, il existe une classe fiche TForm qui
contient tout ce qui est nécessaire à une fiche par défaut (bordure, couleur, barre de titre...). Lorsque dans le concepteur,
vous modifiez votre fiche, vous créez en fait une nouvelle classe qui a toutes les propriétés de la classe TForm mais qui
en a de nouvelles : tous les composants que vous rajoutez. Ainsi, le code ci-dessus signifie qu'on appelle le constructeur
de la classe parente de TForm1, qui est TForm avec comme argument l'argument passé en au constructeur de la classe
TForm1.
- 49 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
lien : Quelques réflexes à avoir pour utiliser au mieux C++ Builder en respectant au maximum la POO
(Programmation Orientée Objet)
A noter qu'il est préférable de ne pas utiliser de tels programmes si ce n'est pas vraiment nécessaire : si votre programme
est composé d'un seul exécutable, un programme d'installation ne sert à rien, une compression Zip suffit. N'ajoutez pas
inutilement des clés dans le registre si ce n'est pas vraiment nécessaire.
- 50 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 51 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
correspondant. Aidez-vous des conseils (s'ils ne s'affichent pas, cliquez avec le bouton droit sur la palette et cochez
Afficher les conseils).
lien : GExperts
lien : Test GExperts
- 52 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 53 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Avec la version personnal de Builder 6, cette option n'est pas directement accessible dans l'EDI (elle n'existe pas).
Il faut passer par la base de registre pour modifier cette option.
A quoi sert la case "Voir la fenêtre CPU" dans les messages d'erreur ?
Auteurs : Geronimo ,
Le CPU est le processeur de votre ordinateur. La fenêtre CPU permet de contrôler les instructions passées au processeur
ainsi que le contenu des registres du processeur ("petites mémoires" à accès très rapide placées sur le processeur).
Lorsqu'il y a une erreur, en cochant cette case, vous faites apparaitre la fenêtre CPU. Mais cette fenêtre n'est pas
seulement accessible en cas d'erreur : vous pouvez la faire apparaitre lorsque vous le souhaitez : placez un bouton sur
votre fiche. Dans l'évènement OnClick de ce bouton, placez le code assembleur suivant :
L'instruction (mov eax, 0xFF) place le code 0xFF (= 255) dans le registre eax. La deuxième instruction ne fait aucune
opération. Ce petit programme n'a donc pas d'intérêt si ce n'est celui de vous montrer une utilisation simple de la
fenêtre CPU.
Placez maintenant un point d'arrêt sur l'instruction nop (allez sur cette ligne et appuyez sur [F5]).
Exécutez le programme ([F9]). Cliquez sur le bouton Button1. Le programme s'arrête et l'éditeur de source met en
évidence la ligne où nous avions placé le point d'arrêt (nop). Un point d'arrêt arrête l'application avant qu'elle exécute
l'instruction. Donc l'instruction nop n'a pas été exécutée. Dans le registre eax, nous devrions donc avoir la valeur 0xFF.
Nous allons le contrôler avec la fenêtre CPU. Utilisez pour cela un clic avec le bouton droit, Déboguer | Voir le CPU.
Regardez l'avant-dernière colonne, tout en haut. En face de EAX, vous devriez voir 000000FF. Donc notre registre
contient bien cette valeur.
- 54 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
L'utilisation de la fenêtre CPU décrite ici n'a pas beaucoup d'intérêt en soi, mais elle permet de comprendre une utilité
de cette fenêtre.
Le commentaire vide // empêche C++Builder de retirer la méthode. En effet, celui-ci ne retire que les méthodes sans
contenu.
- 55 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Pour créer une variable d'environnement utilisateur au sein de C++ Builder, allez dans Outils | Options
d'environnement, puis sélectionnez l'onglet Variables d'environnement, cliquez sur le bouton Nouvelle et renseignez
les 2 champs.
Supposons que nous ayons créé la variable jAPI avec la valeur E:\Program Files\Borland\CBuilder6\composants\jAPI
pour définir le répertoire accueillant la librairie jAPI. Il suffit dès lors dans les projets faisant appel à cette librairie de
rajouter comme chemin d'inclusion la valeur $(jAPI).
- 56 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Exemple
Label1->Caption = __LINE__;
- 57 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
FileOpen("C:\log.txt",fmOpenWrite);
FileOpen("C:\\log.txt",fmOpenWrite);
- 58 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
AnsiString RepertoireWindows()
{
AnsiString result = "";
UINT buflength;
char *repertoire = new char[MAX_PATH];
buflength = GetWindowsDirectory(repertoire,MAX_PATH);
if (buflength == 0)
{
delete[] repertoire;
return result;
}
else if (buflength > MAX_PATH)
{
delete[] repertoire;
repertoire = new char[buflength];
GetWindowsDirectory(repertoire,buflength);
}
result = repertoire;
delete[] repertoire;
return result;
}
AnsiString RepertoireWindows()
{
getenv("WINDIR");
}
AnsiString RepertoireSystemeWindows()
- 59 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
{
AnsiString result = "";
UINT buflength;
char *repertoire = new char[MAX_PATH];
buflength = GetSystemDirectory(repertoire,MAX_PATH);
if (buflength == 0)
{
delete[] repertoire;
return result;
}
else if (buflength > MAX_PATH)
{
delete[] repertoire;
repertoire = new char[buflength];
GetSystemDirectory(repertoire,buflength);
}
result = repertoire;
delete[] repertoire;
return result;
}
AnsiString RepertoireTemporaire()
{
AnsiString result = "";
UINT buflength;
char *repertoire = new char[MAX_PATH];
buflength = GetTempPath(MAX_PATH, repertoire);
if (buflength == 0)
{
delete[] repertoire;
return result;
}
else if (buflength > MAX_PATH)
{
delete[] repertoire;
repertoire = new char[buflength];
GetTempPath(buflength, repertoire);
}
result = repertoire;
delete[] repertoire;
return result;
- 60 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
ChargerConfiguration("options.ini");
Dans ce cas, le fichier est cherché dans le répertoire courant de l'application. Mais ce répertoire peut être changé
(regardez les raccourcis Windows et leur propriété Démarrer en). Il est donc nécessaire de trouver le répertoire de
l'application, ce qui se fait à l'aide de la fonction ExtractFilePath de la manière suivante :
Notez que Application->ExeName contient le nom de fichier exécutable de l'application. La fonction ExtractFilePath en
extrait le chemin. Donc pour notre petit exemple, nous utiliserions :
ChargerConfiguration(ExtractFilePath(Application->ExeName)+"options.ini");
#include <FileCtrl.hpp>
// ...
AnsiString Directory;
if (SelectDirectory("Sélectionnez le répertoire de copie", "c:\\", Directory))
{
ShowMessage("Vous avez choisi : "+Directory);
}
else
{
ShowMessage("Vous avez annulé");
}
La fonction SelectDirectory, définie dans FileCtrl.hpp, prend pour premier argument la légende de la fenêtre. Le second
argument est le répertoire par défaut. Enfin, le troisième argument est la chaîne AnsiString dans laquelle sera stocké
le répertoire. La fonction SelectDirectory retourne true si l'utilisateur valide avec OK. Sinon, elle retourne false.
Une autre solution consiste à utiliser "BrowseForFolder" de l'API Windows, comme suit pour une fenêtre centrée :
//---------------------------------------------------------------------------
#define NO_WIN32_LEAN_AND_MEAN // à mettre avant '#include <vcl.h>'
- 61 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
#include <vcl.h>
#pragma hdrstop
#include <shlobj.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
// Fonction Globale
//---------------------------------------------------------------------------
int __stdcall BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{ // Permet de centrer la boite à l'ecran
TRect rect;
GetWindowRect(hwnd, &rect);
MoveWindow(
hwnd,
( Screen->Width - rect.Width() ) /2, // centré en x
( Screen->Height - rect.Height() ) /2,
rect.Width(),
rect.Height(),
true
);
return 1;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
String __fastcall TForm1::SelectDossier( String Titre )
{
char Path[MAX_PATH];
char BufferDisplayName[MAX_PATH];
PItemIDList IDRoot;
SHGetSpecialFolderLocation(Handle, CSIDL_NETWORK, &IDRoot);
TBrowseInfo BrowseInfo;
ZeroMemory(&BrowseInfo, sizeof(TBrowseInfo));
BrowseInfo.hwndOwner = Handle;
BrowseInfo.pszDisplayName = BufferDisplayName;
BrowseInfo.lpszTitle = Titre.c_str();
BrowseInfo.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS |
BIF_RETURNFSANCESTORS;
BrowseInfo.lpfn = BrowseCallbackProc;
if (PList){
SHGetPathFromIDList(PList, Path);
return (String)Path;
}
else return "";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String PathSelect = SelectDossier( "Veuillez-sélectionner le dossier source :" );
}
- 62 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
//---------------------------------------------------------------------------
if (CreateDirectory(Repertoire.c_str(), 0))
{
// Le répertoire a été créé
}
else
{
// Le répertoire n'a pas été créé
}
#include <FileCtrl.hpp>
//...
if (ForceDirectories(Chemin)
{
// Le chemin a été créé
}
else
{
// Le chemin n'a pas été créé
}
#include <FileCtrl.hpp>
if (DirectoryExists(Repertoire))
{
//...
- 63 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Exemple:
Exemple:
- 64 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Exemple:
#include "ShellApi.h"
--------------------------------------------------------------------
SHFILEOPSTRUCT stFileOp;
ZeroMemory(&stFileOp, sizeof(stFileOp));
stFileOp.wFunc = FO_DELETE;
stFileOp.fFlags = FOF_SILENT | FOF_NOCONFIRMATION;
stFileOp.hwnd = Application->Handle;
stFileOp.pFrom = "C:\\Temp\0";
SHFileOperation(&stFileOp);
Le but de cette fonction est de parcourir de façon récursive tous les fichiers et les sous réperoires du répertoire à
supprimer. La fonction pourrait ressembler à ceci:
Attributes |= faAnyFile;
bcRep = pmRep;
if(bcRep[bcRep.Length()] != '\\')
{
bcRep+= "\\";
}
bcRepTemp = bcRep;
bcRep+= "*.*";
if(FindFirst(bcRep, Attributes, SearchRec) == 0)
{
do
{
bcFile = SearchRec.Name;
if(bcFile != "." && bcFile != "..")
{
bcFile = bcRepTemp + SearchRec.Name;
if(SearchRec.Attr != faDirectory)
- 65 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
{
DeleteFile(bcFile);
}
else
{
DeleteRecursif(bcFile);
}
}
}
while (FindNext(SearchRec) == 0);
FindClose(SearchRec);
}
RemoveDir(pmRep);
}
DeleteRecursif("C:\\Temp\\");
L'astuce consiste à passer par les méthodes de recherche de fichiers, et de récupérer les données retournées par cette
recherche, comme le montre le code suivant :
TSearchRec SR;
String NomRepertoire = "C:\\jeux";
TDateTime DT;
Le deuxième paramètre de la fonction FindFirst permet de spécifier le type de fichier recherché (ici répertoire). Si celui-
ci est trouvé, les informations le concernant sont renvoyées dans la variable SR.
• SHGetSpecialFolderLocation
• SHGetPathFromIDList
Pour ce faire et dans le cas d'une inclusion d'en tête de la VCL, il faut respecter l'ordre de déclaration suivant :
- 66 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
#define NO_WIN32_LEAN_AND_MEAN
#include <vcl.h>
Dans le .h
private:// Déclarations de l'utilisateur
String __fastcall CheminSpecialFolder(int TypeFolder);
Dans le .cpp
String __fastcall TForm::CheminSpecialFolder(int TypeFolder)
{
String Result = "";
//
char sPath[MAX_PATH];
_ITEMIDLIST *AIdList;
//
try
{
SHGetSpecialFolderLocation(Application->Handle, TypeFolder, &AIdList);
SHGetPathFromIDList(AIdList, sPath);
Result = sPath;
}
catch(...)
{
//gérer les erreurs relevées...
}
//
return Result;
}
Les valeurs représentant les différents types de dossiers sont disponibles dans l'aide SDK Windows.
Pour récupérer le répertoire temporaire de l'OS, vous pouvez vous en sortir avec les lignes suivantes :
AnsiString TempPath;
GetTempPath(200,TempPath.c_str());
- 67 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
char PathCourt[MAX_PATH];
GetShortPathName(Path_Long.c_str(), PathCourt, MAX_PATH);
return (String)PathCourt;
}
- 68 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
AnsiString Directory;
if (OpenDialog1->Execute())
{
Directory = ExtractFilePath(FileName);
//... utilisation du répertoire
}
Attention, l'extension peut être rendue en majuscules. Pour la convertir en minuscules, utilisez la méthode LowerCase.
- 69 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
AnsiString FileName;
//...
FileName =...
//...
int Date = FileAge(FileName);
La fonction FileAge retourne un entier. Pour obtenir un objet DateTime, utilisez la fonction FileDateToDateTime. A
partir de cet objet DateTime, vous pouvez obtenir une chaîne contenant les dates et heures de modification :
#include <SysUtils.hpp>
//...
// Change l'extension.txt en.dat
ChangeFileExt("fichier.txt", ".dat");
if (OpenDialog1->Execute())
{
if (SaveDialog1->Execute())
{
if (!CopyFile(OpenDialog1->FileName.c_str(), SaveDialog1->FileName.c_str(), true))
{
ShowMessage("Impossible de copier");
}
}
}
Cette fonction copie le fichier si l'utilisateur valide les boîtes de dialogue. La fonction prend pour argument deux chaînes
à zéro-terminal (source et destination) et un booléen qui indique si la fonction doit écraser un fichier déjà existant :
true, la fonction n'écrase pas, false, la fonction écrase le fichier. La fonction retourne 0 si elle échoue d'où notre test
pour afficher un dialogue si la copie n'a pas eu lieu.
- 70 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
if (OpenDialog1->Execute())
{
if (SaveDialog1->Execute())
{
if (!MoveFile(OpenDialog1->FileName.c_str(), SaveDialog1->FileName.c_str()))
{
ShowMessage("Impossible de déplacer");
}
}
}
La fonction MoveFile échoue si le fichier destination existe déjà. Remarquez également que cette fonction prend pour
arguments des chaînes C à zéro terminal, d'où l'appel de la méthode c_str() qui fournit une chaîne à zéro terminal à
partir d'une chaîne AnsiString.
if (FileExists("c:\\windows\\mon_programme.ini"))
{
//... utilisation de "mon_programme.ini"
}
do
{
for (int i = 0 ; i < Extensions->Count ; i++)
{
if (ExtractFileExt(Infos_fichier.Name).LowerCase() == Extensions->Strings[i].LowerCase())
{
ListeFichiers->Add(ExpandFileName(Infos_fichier.Name));
}
}
}
while(!FindNext(Infos_fichier));
FindClose(Infos_fichier);
- 71 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Voici donc notre méthode. Les paramètres qui doivent lui être passés sont respectivement FilePath, le répertoire dans
lequel il faut faire la recherche, Extensions, la liste des extensions à recenser et enfin, ListeFichiers, un objet de type
TStrings dans lequel on récupère la liste des fichiers.
La méthode crée une structure Infos_fichier qui permettra à la fonction FindFirst de stocker des informations sur les
fichiers trouvés. Regardez l'aide sur FindFirst pour avoir plus de précisions sur celle-ci. Sachez simplement qu'elle
attend en premier argument le répertoire de recherche, en second argument le type de fichiers à rechercher et enfin, la
structure dans laquelle elle va stocker ses données. Cette fonction retourne 0 si elle trouve un fichier. Dans ce cas, on
commence la boucle do...while. C'est la fonction FindNext qui prend le relais, FindFirst ne servant que pour la première
fois.
Ensuite, on parcourt la liste des extensions et on regarde si l'extension du fichier trouvé SRec.Name correspond à une
de la liste, dans ce cas, on l'ajoute.
Cette méthode peut être utilisée de la manière suivante. Placez une ListBox sur votre fiche :
- 72 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Voici donc notre méthode. Les paramètres qui doivent lui être passés sont respectivement listFile, dans lequel on
récupère la liste des fichiers, directory, le répertoire dans lequel il faut faire la recherche, filtre, filtre de l'extension de
fichier à trouver.
La méthode crée une structure Infos_fichier qui permettra à la fonction FindFirst de stocker des informations sur les
fichiers trouvés. Regardez l'aide sur FindFirst pour avoir plus de précisions sur celle-ci. Sachez simplement qu'elle
attend en premier argument le répertoire de recherche, en deuxième argument le type de fichiers à rechercher et enfin,
la structure dans laquelle elle va stocker ses données. Cette fonction retourne 0 si elle trouve un fichier. Dans ce cas, on
commence la boucle do...while. C'est la fonction FindNext qui prend le relais, FindFirst ne servant que pour la première
fois.
Pour chaque fichier trouvé, on regarde si c'est un répértoire ou un fichier, si c'est un fichier on l'ajoute à la liste, si c'est
un répertoire, on rappelle la méthode pour aller tester les fichiers de ce répertoire.
if (OpenDialog1->Execute())
{
for (int i=0; i<OpenDialog1->Files->Count; i++)
{
Ouvrir(OpenDialog1->Files->Strings[i]);
}
}
Le membre Files de OpenDialog1 contient la liste des fichiers sélectionnés. Il suffit donc de parcourir cette liste
et d'ouvrir chaque fichier. Nous faisons appel pour cela à une méthode Ouvrir, que vous pouvez écrire pour votre
programme.
Exemple:
- 73 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Exemple:
SHFILEOPSTRUCT stFileOp;
ZeroMemory(&stFileOp, sizeof(stFileOp));
stFileOp.wFunc = FO_DELETE;
stFileOp.fFlags = FOF_ALLOWUNDO;
stFileOp.hwnd = Application->Handle;
stFileOp.pFrom = "C:\\Temp\\Fichier.txt\0";
SHFileOperation(&stFileOp);
ForceDirectories("c:\\tmp1\\tmp2\\tmp3\\tmp4\\");
TFileStream * file = new TFileStream("c:\\tmp1\\tmp2\\tmp3\\tmp4\\test.txt",fmCreate);
file->Write("Test",4);
delete file;
- 74 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Exemple d'utilisation :
Renseignement de la structure
String PathNomExt = "C:\\WINDOWS\\SYSTEM32\\CALC.EXE";
WIN32_FILE_ATTRIBUTE_DATA InfoFichier;
ZeroMemory (&InfoFichier, sizeof(WIN32_FILE_ATTRIBUTE_DATA));
Il ne nous reste plus qu'à exploiter les valeurs de la structure qui nous intéressent.
Les attributs
bool Archive = InfoFichier.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE;
bool LectureSeule = InfoFichier.dwFileAttributes & FILE_ATTRIBUTE_READONLY;
bool Compresse = InfoFichier.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED;
bool Cache = InfoFichier.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN;
// Date d'enregistrement :
FileTimeToSystemTime( &InfoFichier.ftLastWriteTime, &St);
Enregistrement.sprintf("Modifié : %02d/%02d/%d à %02dh%02d:%02d",
St.wDay, St.wMonth, St.wYear, St.wHour, St.wMinute, St.wSecond
);
- 75 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Ces types disposent d'une propriété Val qui est un double définit comme suit : sa partie entière correspond au nombre
de jours écoulés depuis le 30/12/1899, sa partie décimale (nulle dans le cas d'un TDate) correspond au nombre d'heures
(ramené à 24) depuis minuit.
Pour bénéficier des fonctions et méthodes spécifiques à ces types, il vous faudra inclure DateUtils.hpp.
Pour une gestion du temps, vous pouvez utiliser le type TTime qui représente un temps sous la forme HH, MM, SS
et mSec.
TDate date;
date = EncodeDate(annee, mois, jour); // les paramètres sont des entiers
Pour extraire des informations à partir d'une date, il suffit d'utiliser la fonction DecodeDate : le code suivant initialise
les variables annee, mois et jour.
TDateTime __fastcall EncodeTime(Word Hour, Word Min, Word Sec, Word MSec);
void __fastcall DecodeTime(const System::TDateTime DateTime, Word &Hour, Word &Min, Word &Sec,
Word &MSec);
- 76 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Enfin, à noter les fonctions EncodeDateTime et DecodeDateTime pour la gestion simultanée de la date et de l'heure.
Il s'agit ici de vérifier qu'à partir des différentes valeurs constituant la date/heure, on construit bien une date/heure
valide.
return SetSystemTime(infos);
}
Sans oublier un :
- 77 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
#include <DateUtils.hpp>
void TestGetTickCount()
{
int start, stop, lap;
//déclaration d'entier pour récupérer les valeurs renvoyees par GetTickCount()
start = GetTickCount();
//start contient alors la durée écoulé, en millisecondes, depuis que l'ordinateur est allumé
lap = GetTickCount() - start; //utilisation de la variable lap pour un temps intermédiaire
stop = GetTickCount() - start; //stop contient le temps écoulé depuis l'affectation de start
}
- 78 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
TDateTime date1;
int nbJours;
TDateTime date1;
int nbJours;
TDateTime date1;
Word Annee, Mois, Jour, Heure, Minute, Seconde, milliSec;
double jourJul;
nbJours peut être positif ou négatif, mais il peut également être un réel pour permettre d'agir également sur l'heure.
- 79 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Dans les exemples 1 et 3, diff est bien plus précis qu'une différence de date puisqu'il intègre également l'heure. Ainsi,
sur l'exemple suivant, on obtiendra une valeur légèrement inférieure à 3 :
TDateTime date1;
int numeroJ;
date1 = Now();
numeroJ = DayOfTheYear(date1);
TDateTime date1;
int numeroS;
- 80 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
date1 = Now();
numeroS = WeekOfTheYear(date1);
TDateTime date1;
int jourSemaine;
date1 = Now();
jourSemaine = DayOfTheWeek(date1);
- 81 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
N = 44 - E;
if (N <= 21)
{
N += 30;
}
P = N + 7 - ((D + N) % 7);
if (P > 31)
{
J = P - 31;
}
else
{
J = P;
}
if (J == P)
{
M = 3;
}
else
{
M = 4;
}
return EncodeDate(annee, M, J);
}
- 82 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
TDate maDate;
maDate = EncodeDate(2004, 12, 35);
if (IsInLeapYear(maDate))
{
ShowMessage("C'est une année bissextile.");
}
else
{
ShowMessage("Ce n'est pas une année bissextile.");
}
date1 = JulianDateToDateTime(jourJulien);
double jourJulien;
TDateTime date1;
Word annee, mois, jour, heure, minute, seconde;
Attention : Pour que le résultat de la fonction DateTimeToJulianDate() retourne une valeur juste, il faut que la date soit
strictement supérieure au 15/10/1582 00:00:00 (début du calendrier Grégorien). Avant cette date, il manque le décalage
de 10 jours entre les deux calendriers. Pour les dates strictement inférieures au 5 octobre 1582, il suffit de rajouter
10 au résultat de la fonction. On ne peut pas calculer les jours Juliens des dates du 5 au 14 octobre 1582 puisqu'elles
n'existent pas.
- 83 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 84 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
#include <stdlib.h>
//...
system("dir *.*");
#include <stdlib.h>
// Version DOS/Windows :
system("dir *.* > results.txt");
// Version Linux :
/* L'option -l permet d'avoir les détails
des fichiers */
system("ls -l > results");
Attention, les chaînes passées en arguments de cette fonction sont des chaînes C standard. Pour passer des AnsiString
en arguments, utilisez la méthode c_str() :
// Affiche une boîte de dialogue "Ouvrir un fichier" et ouvre le fichier avec notepad.
if (OpenDialog1->Execute())
{
- 85 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
if ( ParamCount() > 0 )
Memo1->Lines->LoadFromFile(ParamStr(1));
ShowMessage("Tâche effectuée");
L'autre méthode, plus perfectionnée, est MessageDlg. Cette fonction permet de personnaliser un peu la boîte de
dialogue :
MessageDlg("La tâche a été effectuée correctement", mtInformation, TMsgDlgButtons() << mbOK, 0);
Cette fonction permet d'afficher un message (AnsiString passée en premier argument). Le second argument indique
le type de boîte de dialogue. mtInformation affiche une icône "information" dans la boîte de dialogue. Enfin, l'avant-
dernier argument permet de choisir quels boutons seront disponibles dans la boîte de dialogue. Le dernier argument
permet de lier la boîte de dialogue à une rubrique d'aide. Un des grands avantages de cette fonction est qu'elle permet
de savoir quel bouton a été enfoncé s'il y en avait plusieurs :
if (MessageDlg("Le document n'a pas été sauvegardé, voulez-vous le sauvegarder avant de quitter ?",
mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
Sauver();
- 86 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Dans ce code, la méthode Sauver est appellée si le bouton Oui est cliqué. Pour plus de détails sur le fonctionnement de
MessageDlg, consultez l'aide de C++Builder.
//...
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
bool Stop; /* Placez la variable ici */
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
//...
}
- 87 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Maintenant, il nous faut pouvoir arrêter cette boucle dessin. Pour cela, nous avons vu qu'il suffit de placer la variable
Stop à true. Placez un autre bouton sur la fiche. Dans son gestionnaire d'évènements OnClick, placez le code suivant :
Si un clic sur le bouton a lieu, il sera traité par l'appel à Application->ProcessMessages(). Enfin, il faut pouvoir quitter
le programme. Pour cela, utilisez l'évènement OnCloseQuery de la fiche et placez-y également le code Stop = true.
Notez qu'en raison du fonctionnement interne de Windows, Sleep ne garantit qu'un minimum d'attente. En effet,
Windows n'est pas un système temps-réel.
- 88 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Application->ShowMainForm = false;
- 89 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Comment accéder à des fonctions ou variables d'une fiche à partir d'une autre fiche ?
Auteurs : Geronimo ,
Pour accéder aux membres de Form2 à partir de Form1, il vous faut inclure le fichier Unit2.h dans Unit1.h, ce que vous
pouvez faire à l'aide de Fichier | Inclure l'en-tête d'unité et en double-cliquant sur Unit2.
- 90 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Pour que les bulles d'aide apparaissent dans une fiche, positionnez la propriété ShowHint de celle-ci à true. Pour que
les hints apparaissent dans toute l'application, vous pouvez placer le code suivant dans le constructeur de votre fiche
principale :
Application->ShowHint = true;
Ne négligez pas les bulles d'aide, c'est la première niveau d'aide pour l'utilisateur et un bon fichier d'aide ne les remplace
pas. (quand vous cherchiez un composant dans la palette de C++ Builder, ne vous êtes-vous jamais aidé des bulles
d'aide ?)
Application->HintColor = clBlue;
ou bien pour avoir des couleurs plus personnalisées, utilisez le code hexadécimal
Pour le code hexadécimal, les trois premiers octets (de droite à gauche) représentent les couleur Rouge, Vert et Bleu.
Ainsi, 0x00FF0000 correspondra à un bleu intense, 0x0000FF00 à un vert intense et enfin 0x000000FF à un rouge
intense. L'octet de poids fort (les deux premiers 0 de gauche) concerne les palettes de couleurs (cf l'aide de C++ Builder
sur TColor).
- 91 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
• Si vous souhaitez afficher ce hint dans une autre partie de la barre de statut, il faut écrire le gestionnaire
d'évènements correspondant. Dans le fichier en-tête de votre fiche principale (Unit1.h), dans la classe TForm1,
déclarez la fonction suivante qui sera le gestionnaire d'évènements :
Implémentez ensuite la fonction. Elle affichera dans le Panel de la barre de statut le hint en cours de l'application :
Vous pouvez bien sur remplacer ce code si vous souhaitez que le hint s'affiche autre part (mais la barre de statut
existe dans ce but). Enfin, dans le constructeur de votre fiche, nous attribuons cette fonction comme gestionnaire de
l'évènement OnHint de l'application :
- 92 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Avec ce code, nous allons ajouter cet élément au menu. Pour cela, nous avons besoin du Handle du menu système (un
pointeur sur ce menu). Nous faisons donc appel à la fonction GetSystemMenu. Pour l'ajouter au menu, nous utilisons la
fonction AppendMenu, qui ajoute un élément à la fin d'un menu. En premier argument, nous lui passons le Handle du
menu système, en second, le type d'élément qui va être rajouté : une chaîne. Notez seulement que le troisième argument
est une constante, MON_ELEMENT_MENU, que vous définissez, par exemple dans votre classe fiche :
Remarquez que nous aurions pu utiliser également un #define MON_ELEMENT_MENU 1 mais que notre code à
l'avantage de s'intégrer totalement dans le C++.
A ce stade, si vous lancez le programme, vous pourrez constater qu'un nouvel élément apparait dans le menu système.
Il s'agit maintenant de savoir quand l'utilisateur clique sur cet élément et de gérer ce clic. Pour cela, nous allons créer
une fonction-gestionnaire d'évènements qui sera appelée lorsque le message WM_SYSCOMMAND sera déclenché par
Windows, c'est-à-dire quand l'utilisateur cliquera sur un élément du menu système. Il faut donc déclarer notre fonction
comme gestionnaire de messages WM_SYSCOMMAND, grâce au code suivant qu'il faut placer dans la classe TForm1,
dans la section public :
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, WMCommandeMenuSysteme)
END_MESSAGE_MAP(TForm)
Grâce à ce code, la fonction WMCommandeMenuSysteme sera appelée lorsque l'utilisateur cliquera sur un élément
du menu système. Créons donc cette fonction, sans oublier de la déclarer dans le fichier en-tête, le code précédent ne
faisant pas office de déclaration :
- 93 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Dans cette fonction, deux cas se présentent : soit le message provient de notre élément menu système et nous devons
le gérer, soit c'est un autre élément : dans ce cas, nous passons la main à la fonction Dispatch de la classe TForm afin
qu'elle le gère. Si nous oublions ce second cas, seul notre élément fonctionnera. La différenciation des deux cas se fait
grâce à notre constante MON_ELEMENT_MENU.
HMENU hmenu;
hmenu = GetSystemMenu(this->Handle, false);
if (hmenu != NULL)
Toutefois faites attention au fait que cette méthode n'empêche pas la fermeture de la fenêtre avec la combinaison
ALT+F4 ou l'option Fermer (clic droit sur l'icône de la fiche dans la barre de tâches). Pour empêcher la fermeture
d'une fenêtre, voyez le lien donné ci-dessous.
HMENU hmenu;
hmenu = GetSystemMenu(this->Handle, false);
if (hmenu != NULL)
{
RemoveMenu(hmenu, SC_MOVE, NULL);
}
- 94 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
L'évènement OnDestroy n'est appelé que lorsque la fenêtre est détruite réellement. En fait, appeler la méthode Close
sur une fiche ne la détruit pas mais la cache uniquement. Pour détruire la fenêtre il faut agir sur le paramètre Action
dans l'évènement OnClose.
Pour intercepter la demande de fermeture d'une fiche il faut implémenter l'évènement OnCloseQuery de la façon
suivante:
Comment supprimer les boutons Maximize, Minimize et Close dans la barre de titre d'une fenêtre ?
Auteurs : Neo41 ,
Pour supprimer les boutons Maximize, Minimize ou Close d'une fenêtre, il faut agir sur la propriété BorderIcons de
la forme.
• Pour supprimer les trois boutons et le menu système, il faut mettre biSystemMenu à false
• Pour désactiver seulement le bouton Maximize, il faut mettre biMaximize à false
• Pour désactiver seulement le bouton Minimize, il faut mettre biMinimize à false
- 95 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Il n'est pas possible de supprimer le bouton Close indépendamment des autres. En revanche, il est possible de le
désactiver (lien ci-dessous).
Ainsi, la fiche splash screen sera affichée pendant la création des autres fiches.
N.B. N'oubliez évidemment pas d'inclure le .h de votre Splash_Form dans le module principal de votre application.
BorderStyle = bsNone;
Left = 0;
Top = 0;
Width = Screen->Width;
Height = Screen->Height;
BorderStyle = bsNone permet de faire disparaître la barre de titre. Les deux lignes suivantes sont aisément
compréhensibles, n'oubliez pas que nous sommes dans une classe fiche, donc que Left et Top sont les positions de la
fiche. Enfin, il suffit de faire coïncider la largeur et la hauteur de la fiche avec celle de l'écran, ce que font nos deux
dernières lignes. Bien sûr, ce code se place dans le constructeur de votre fiche, ou dans l'évènement OnCreate.
- 96 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Evitez tout de même de mettre une application qui n'en a pas besoin en plein écran !
int typeAnimate = 1;
TForm* Form2 = new TForm(NULL);
Form2->Show();
Form2->Hide();
// Animation de la fenêtre
AnimateWindow(Form2->Handle, 1000, typeAnimate);
Form2->Close();
delete Form2;
- 97 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 98 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Comment récupérer des handles sur les entrées/sorties standard d'une application console ?
Auteurs : Greybird ,
Pour utiliser les API Windows dans une application console, il est parfois nécessaire de posséder un Handle sur une
des entrées/sorties standards de celle-ci.
Cela se réalise au moyen de l'API GetStdHandle. Cette fonction prend pour unique paramètre :
• STD_INPUT_HANDLE : handle de l'entrée standard (cin)
• STD_OUTPUT_HANDLE : handle de la sortie standard (cout)
• STD_ERROR_HANDLE : handle de la sortie d'erreurs standard (cerr)
Ainsi, le code suivant récupère un handle sur la sortie standard de l'application console :
HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOut != INVALID_HANDLE_VALUE)
{
// Utilisation du handle.
- 99 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
#include <Windows.hpp>
#include <iostream>
using namespace std;
// ...
HANDLE hOut;
CONSOLE_SCREEN_BUFFER_INFO csbiAncien;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOut != INVALID_HANDLE_VALUE)
{
// on sauvegarde l'état de la console
GetConsoleScreenBufferInfo(hOut,&csbiAncien);
lien : Comment récupérer des handles sur les entrées/sorties standard d'une application console ?
- 100 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 101 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Le discours commercial a fait qu'aux yeux de l'utilisateur lambda et d'un certain nombre de développeurs, la CLX est
la soeur jumelle de la VCL et est donc un ensemble de composants utilisables aussi bien sous Windows avec C++ Builder
(ou Delphi) que sous Linux avec Kylix. Certains vont même jusqu'à comparer la CLX avec la VCL et donc en limiter
la portée au sous-ensemble "composants visuels" et allant donc associer CLX et Qt.
Techniquement parlant, la CLX n'est en fait rien d'autre que le framework complet proposé par Delphi et C++ Builder.
La CLX n'est donc pas à comparer à la VCL puisque la VCL est l'un des éléments de la CLX. Et l'équivalent de la VCL
côté compatibilité multi-plateforme se nomme la Visual CLX et repose sur Qt.
La VCL ou la Visual CLX ne représentent que 9 unités, les autres éléments constitutifs de la CLX sont NetCLX
(composants Internet tel que Indy), BaseCLX (par exemple l'unité DataUtils) et DataCLX (Composants d'accès aux
données client tel que dbExpress).
Dans la hiérarchie on retrouve également les types TPersistent et TComponent qui proposent successivement un
enrichissement en méthodes et comportements. Jusqu'à arriver à TControl qui est l'ancêtre de tous les contrôles visibles
par l'utilisateur à l'écran lors de l'exécution et avec lesquels il peut interagir.
- 102 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Lorsque vous construisez vous même un nouveau composant visuel par exemple à partir de TControl, vous pouvez
choisir parmi les propriétés, méthodes et évènements du type TControl celles que vous souhaitez publier.
Rajoutez-lui l'option : -LUvclX0, avec X votre numéro de version de C++ Builder. ce qui doit donner ceci :
Dans les 2 cas il vous faudra renseigner le champ intitulé Nom d'unité pour y faire figurer le nom du fichier source
correspondant au composant.
Après validation, vous devriez avoir une nouvelle fenêtre listant pour le paquet selectionné les fichiers de composants
référencés ainsi que les dépendances. A partir de cette fenêtre vous pouvez gérer des ajouts ou retraits de composants
mais aussi compiler le paquet et installer les nouveaux composants. Le fonctionnement est identique à celui d'un projet
puisque vous avez par ailleurs accès dans le menu Projet aux commandes Make et Construire.
- 103 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Remarque : Pour accéder directement à un package de composants, vous pouvez également tout simplement ouvrir le
fichier .bpk correspondant, comme vous ouvrez un .bpr, par le menu Fichier | Ouvrir un projet ou Fichier | Réouvrir.
Pour ce faire, soit votre ActiveX est déjà enregistré dans la base de registre et figure donc dans la liste, soit il ne l'est
pas et vous pouvez l'ajouter en passant par le bouton Ajouter....
Après avoir sélectionné l'ActiveX, vous pouvez choisir la palette dans laquelle vous souhaitez le rendre disponible, le
répertoire accueillant l'unité qui sera créée, puis il ne vous reste plus qu'à cliquer sur le bouton Installer...
Une nouvelle fenêtre apparaît vous demandant de renseigner un paquet existant ou un nouveau paquet dans lequel
installer le composant obtenu.
Une fois le paquet choisi, tout ce passe comme lors de l'installation classique d'un composant.
- 104 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Button1->Enabled = false;
- 105 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
AnsiString Texte;
// Texte =...;
ListBox1->Items->Add(Texte);
En fait, la classe TListBox contient une instance de la classe TStringList qui représente les lignes : Items. Donc pour
ajouter des éléments, nous utilisons les méthodes de Items. Pour ajouter un élément, on utilise la méthode Add de cette
liste Items, ce qui donne ListBox1->Items->Add(Texte). Ensuite, l'utilisation la plus classique est de regarder quel élément
a été cliqué si l'utilisateur double-clique dans la liste. Voici donc la fonction-gestionnaire d'évènements OnDblClick :
Tout d'abord, nous vérifions qu'un élement est bien sélectionné, grâce à ItemIndex qui est positionné à -1 si aucun
élément n'est sélectionné, sinon, une erreur de violation d'accès serait déclenchée car l'élément d'indice -1 n'existe pas.
Ensuite, pour accéder à un élément, nous utilisons toujours le membre Items, avec son membre Strings qui est le tableau
contenant les chaînes.
IndexOf retourne l'indice d'un élément et ItemIndex contient l'indice de l'élément sélectionné.
- 106 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
N.B. Si votre ComboBox autorise la saisie (Style = csSimple ou csDropDown), l'affectation à sa propriété Text d'une
chaîne de la liste aura le même effet. La méthode exposée ci-dessus prend tout son intérêt dans le cas csDropDoxnList
et les deux cas csOwner... .
ComboBox1->Style = csDropDownList;
N.B. La valeur initiale de ce composant ne pouvant plus être initialisée par sa propriété Text, utilisez alors la méthode
décrite dans le lien ci-dessous
Dans C++ Builder, dans le Menu : Aide | SDK Windows, on peut retrouver la définition de
CB_SETDROPPEDWIDTH ainsi que les messages s'appliquant au TComboBox - tels que CB_GETDROPPEDWIDTH
ou CB_SHOWDROPDOWN par exemple - de manière à bien voir les paramètres attendus et les valeurs renvoyées.
lien : Comment fixer automatiquement la largeur de la liste déroulante d'un ComboBox en fonction de l'item le plus
grand ?
- 107 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Enfin, il faut implémenter l'évènement OnEnter afin de calculer la longueur des éléments et de positionner la largeur
de la liste déroulante :
- 108 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
On déclare un pointeur sur un TListItem. Un TListItem représente un élément de TListView. La méthode Add crée ce
nouveau TListItem et l'ajoute à ListView1. Ensuite, on attribue le contenu de Edit1 à la propriété Caption du nouvel
élément. Ensuite, on ajoute le contenu de Edit2 aux sous-éléments de Item.
Vous remarquerez que les deux premières lignes vous permettent d'utiliser le même gestionnaire d'évènement pour
autant de TListBox que vous le souhaitez. Il vous suffit de positionner leur propriété Style, et de relier leur évènement
OnDrawItem à cette fonction.
Enfin, si vous désirez fixer la taille des lignes, qui par défaut sera différente de la taille classique d'un TListBox qui gère
son propre dessin, il vous faudra agir sur la propriété ItemHeight.
Fichier .cpp :
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
- 109 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Fichier .cpp :
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int NoDrive0 = 0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DirectoryListBox1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
Label1->Caption = DirectoryListBox1->Directory;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
// on élimine de DriveComboBox les lecteurs sans disque
// on supprime les messages d'erreur sur les disques
UINT oldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);
int a = DriveComboBox1->Items->Count; // nb de disques
// on commence par la fin sinon on a un problème
// le lecteur 1 devient 0 après une suppression
for(a; a >= 0;a--)
{
if (DiskSize(a) > -1)
{
if(NoDrive0 == 0)
{
DriveComboBox1->Items->Delete(a); // pas de disque on elimine
}
}
}
// on retablit les messages d'erreur sur les disques
SetErrorMode(oldErrorMode); // on restitue l'ancienne valeur
NoDrive0 = 1;
}
//---------------------------------------------------------------------------
Fichier .h :
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
#include <FileCtrl.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TDirectoryListBox *DirectoryListBox1;
TDriveComboBox *DriveComboBox1;
TLabel *Label1;
TButton *Button2;
void __fastcall DirectoryListBox1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y);
void __fastcall Button2Click(TObject *Sender);
private: // User declarations
public: // User declarations
- 110 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Fichier .h :
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
- 111 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
TColor CLTitre = clBtnFace, CLFond = clYellow, CLSelection = clRed; // Vos couleurs personnalisées.
AnsiString s = StringGrid1->Cells[ACol][ARow]; // Texte de la cellule.
if (ACol < StringGrid1->FixedCols || ARow <
StringGrid1->FixedRows) { // Concerne les titres des lignes et des colonnes.
StringGrid1->Canvas->Brush->Color = CLTitre;
StringGrid1->Canvas->FillRect(Rect); // On dessine le fond de la cellule.
StringGrid1->Canvas->Font->Style = StringGrid1->Canvas->Font->Style <<
fsBold; // On met les titres en gras.
// On réaffiche le texte par dessus, car le FillRect l'a effacé.
StringGrid1->Canvas->TextRect(
Rect,
(Rect.Right + Rect.Left - StringGrid1->Canvas->TextWidth(s)) / 2,
(Rect.Top + Rect.Bottom - StringGrid1->Canvas->TextHeight(s)) / 2,
s);
// Le premier argument est le rectangle de rognage, les deux suivants permettent de centrer le texte dans la cel
}
else if (State.Contains(gdSelected)) { // Concerne la(les) cellule(s) sélectionnée(s).
StringGrid1->Canvas->Brush->Color = CLSelection;
StringGrid1->Canvas->FillRect(Rect);
StringGrid1->Canvas->Font->Color = clWhite; // Le texte est écrit en blanc.
StringGrid1->Canvas->TextRect(Rect, Rect.Left +1, Rect.Top + 1, s); // Ici texte justifié à gauche.
}
else {
StringGrid1->Canvas->Brush->Color = CLFond;
StringGrid1->Canvas->FillRect(Rect);
StringGrid1->Canvas->TextRect(Rect, Rect.Left +1, Rect.Top + 1, s);
}
N.B. Pour centrer un texte dans un rectangle, on égale les coordonnées du centre du rectangle et celles du centre du texte.
Comment écrire sur plusieurs lignes dans une cellule d'un TStringGrid?
Auteurs : Alacazam ,
Le but est donc tout simplement d'afficher le texte de votre cellule sur plusieurs lignes, s'il est trop long par exemple,
ou simplement pour améliorer la présentation de vos données.
Le principe :
- Utiliser un TMemo invisible de la largeur de la case, et le laisser découper votre texte (propriété WordWrap à true).
- Récupérer les n lignes du TMemo une par une, et les afficher dans des rectangles n fois plus petits (en hauteur).
N.B. Si vous ne maitrisez pas trop le OnDrawCell ou l'utilisation du TCanvas de la grille, je vous conseille de lire d'abord
Comment personnaliser un ensemble de cellules sans modifier toute la grille dans un TStringGrid ?.
#include <math.hpp>
// A placer dans l'évènement OnDrawCell de votre TStringGrid.
TMemo *Memo = new TMemo(this);
Memo->Visible = false;
Memo->Parent = this;
Memo->Lines->Text = StringGrid1->Cells[ACol][ARow];
Memo->Width = StringGrid1->ColWidths[ACol];
- 112 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
// Cette ligne permet d'éviter le chevauchement des lignes si le texte est vraiment trop long pour la case.
Ligne_Nbr = Min(Ligne_Nbr, (Rect.Bottom - Rect.Top) / StringGrid1->Canvas->TextHeight(" ") + 1);
Signalons que si vous souhaitez forcer un retour à la ligne après un mot, vous n'avez qu'à le faire suivre de "\n", qui
sera traité correctement par le TMemo.
lien : Comment personnaliser un ensemble de cellules sans modifier toute la grille dans un TStringGrid ?
OldWindowProc = DBGrid1->WindowProc;
DBGrid1->WindowProc = DBGridNewWindowProc;
- 113 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
{
DBGrid1->DataSource->DataSet->Prior();
}
}
return;
}
OldWindowProc(Msg);
}
Pour le TStringGrid
• OnClick
• OnDrawCell
• OnKeyDown
• OnKeyUp
• OnMouseMove
Pour la TForm
• OnCreate
• OnClose
Dans le .h
Private:
TStringGrid *pGrille;
TStringList *pListeIndex;
bool MultiSelect;
- 114 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Dans le .cpp
void __fastcall TForm1::FormCreate(TObject *Sender)
{
MultiSelect = false;
// On met la valeur de cette variable à 'faux' afin que le comportement
// par défaut de la grille soit 'normal' et qu'il faille appuyer sur la touche
// 'ctrl' pour simuler la sélection multiple
}
//-----------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
// On libère la mémoire allouée à l'objet TStringList si il a été crée
if(pListeIndex != NULL)
delete pListeIndex;
}
- 115 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
NB : Cet évènement fonctionne quelle que soit la valeur de la propriété DefaultDraw de la grille.
NB : Sans cet évènement, cette astuce pour simuler la multiselection ne fonctionne pas dès le premier click.
- 116 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Si vous voulez vérouiller plusieurs cellules, je vous propose d'utiliser un vecteur et de vérifier chaque valeur du vecteur
grâce à un boucle
Il est a noter que si les cellules vers lesquelles on déplace avec MoveRow ou MoveColumn ne sont pas vides, les valeurs
seront permutées avec celles que l'on veut déplacer.
Comment avoir des retours chariot dans une cellule d'un TStringGrid ?
Auteurs : blondelle , rbag ,
Pour cela, il faut activer l'option goAlwaysShowEditor et ajouter le code suivant dans l'événement OnKeyDown :
- 117 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 118 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
X = 0;
for(i = StringGrid1->FixedCols + 1; i <= ACol; i++) (X++, StringGrid1->ColWidths [i]);
{
Y = 0;
for(i = StringGrid1->FixedRows + 1; i <= ARow; i++) (Y++, StringGrid1->RowHeights[i]);
{
R.Left = X;
R.Right = X + Rect.Right - Rect.Left;
R.Top = Y;
R.Bottom = Y + Rect.Bottom - Rect.Top;
// Dessin d'une partie de l'image
Image1->Visible = false;
Image1->Picture->Bitmap->LoadFromFile("C:\\Documents and Settings\\toto\\Mes documents\
\Mes images\\Massiv10\\Massiv10\\Bitmaps\\Arrow\\arcarrow1.bmp");
// "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\Massiv10\\Massiv10\\Bitmaps\
\Arrow\\arcarrow1.bmp"
StringGrid1->Canvas->CopyRect(Rect, Image1->Picture->Bitmap->Canvas, R);
StringGrid1->Canvas->Brush->Style = bsClear;
}
}
}
// Sélection de la couleur de texte
if(State.Contains(gdSelected))
{
SetTextColor(StringGrid1->Canvas->Handle, clWhite);
}
else
{
SetTextColor(StringGrid1->Canvas->Handle, clBlack);
}
// Dessin du texte en utilisant la fonction API
DrawText(StringGrid1->Canvas->Handle, (StringGrid1->Cells[ACol][ARow]).c_str(), -1, &Rect,
DT_NOPREFIX );
}
MonBitMap est un objet de type TBitMap qui doit avoir été chargé avec l'image. L'image doit être suffisamment grande
pour couvrir le fond du TStringGrid.
- 119 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
// Dessin du fond
StringGrid1->Canvas->FillRect(Rect);
// Sélection de la couleur de texte
if(State.Contains(gdSelected))
{
StringGrid1->Font->Color = clWhite;
}
else
{
StringGrid1->Font->Color = clBlack;
}
// Dessin du texte en utilisant la fonction API
DrawText(StringGrid1->Canvas->Handle, (StringGrid1->Cells[ACol][ARow]).c_str(), -1, &Rect,
DT_CENTER | DT_NOPREFIX | DT_VCENTER | DT_SINGLELINE );
}
Comment écrire le texte d'une cellule d'un TStringGrid sur plusieurs lignes ?
Auteurs : blondelle , Nono40 ,
Le code suivant permet d'écrire le texte d'une cellule d'un TStringGrid sur plusieurs lignes.
- 120 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Cela permet de savoir quand la touche [Entree] est appuyée (validation si nécessaire) et supprime le son en "faisant
croire" à Windows qu'aucune touche n'a été enfoncée (Key = 0)
Attention, la protection n'est pas totale. En effet, il est toujours possible de coller des caractères non numériques dans
le TEdit...
Le message EM_EXLINEFROMCHAR permet de déterminer la ligne où se trouve le caractère dont le numéro est
passé en 3ème paramètre LPARAM.
- 121 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
De la même manière, grâce à EM_LINEINDEX, on détermine le numéro du 1er caractère de la ligne dont le numéro
est passé en second paramètre ; pour avoir le "déplacement horizontal", on n'a plus alors qu'à soustraire ce résultat
au numéro du caractère courant.
Pour modifier cette position :
Ici, le principe est exactement le même ; on se déplace au 1er caractère de la ligne numLigne (grâce à EM_LINEINDEX),
puis on avance de numCaractere positions sur cette même ligne.
Comment afficher chaque ligne d'un TRichEdit avec une couleur de texte différente ?
Auteurs : Alacazam ,
Dans cet exemple, les lignes font apparaître un dégradé de couleur allant du bleu au rose.
Comme vu ici ( Comment connaître et modifier la position du curseur dans un TRichEdit ?), on peut assez facilement
récupérer le numéro (absolu) du 1er caractère d'une ligne donnée, grâce à EM_LINEINDEX. Nous nous en servons
cette fois pour sélectionner une ligne dans sa totalité, avant de lui appliquer un attribut de couleur.
Pour choisir facilement votre gamme de couleurs, regardez ici : Comment obtenir les composantes RGB d'une
couleur TColor ?
RichEdit1->Lines->SaveToFile(Nom_fichier);
- 122 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Cet enregistrement se fera, par défaut, au format RTF (texte mis en forme).
Si vous souhaitez sauvegarder le contenu au format "texte simple", précédez votre enregistrement de :
RichEdit1->PlainText = true;
SysLocale.MiddleEast = True;
MonEdit->BiDiMode = bdRightToLeft;
- 123 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Canvas->MoveTo(0, 0);
Canvas->LineTo(ClientWidth, ClientHeight);
La méthode BitBlt va copier le contenu de ce DC vers le Canvas de notre composant TBitmap (DC de notre image) :
BitBlt(bitmap->Canvas->Handle, // Destination
0, // Coin haut-gauche : abscisse
0, // Coin haut-gauche : ordonnée
Screen->Width, // Largeur de la zone destination
Screen->Height, // Hauteur de la zone destination
ScreenSrc, // Source
0, // Haut-gauche de la source : abscisse
0, // Haut-gauche de la source : ordonnée
SRCCOPY); // Méthode de copie
ReleaseDC(GetDesktopWindow(), ScreenSrc);
Si vous souhaitez directement enregistrer votre capture d'écran, voici un exemple de code :
- 124 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
On crée ici directement un Bitmap et on lui affecte la copie d'écran, puis on utilise la méthode SaveToFile du Bitmap
pour sauvegarder l'image dans le répertoire courant.
Tout d'abord, on initialise un pointeur sur un objet Clipboard grâce à la méthode Clipboard(). Attention, il ne faut
pas créer d'objet Clipboard avec l'opérateur new car une seule instance du presse-papiers est autorisée. La méthode
Clipboard gère cela en créant un nouvel objet si il n'en existe pas. Sinon, elle renvoie un pointeur sur le Clipboard
déjà existant. La condition de la ligne suivante permet de vérifier que le contenu du presse-papiers est bien une image
Bitmap. Ensuite, nous essayons de charger l'image dans Image1 grâce à la méthode LoadFromClipboardFormat. Les
données du presse-papier sont récupérées par la méthode GetAsHandle.
- 125 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Label1->Caption = "Rouge : " + IntToStr(nRed) + " Vert :" + IntToStr(nGreen) + " Bleu :" + IntToStr(nBlue);
}
Nous déclarons trois variables de type BYTE (unsigned char) qui contiendront les composantes de la couleur. La couleur
est celle du pixel situé sous la souris à la position (X, Y) d'où le code Image1->Canvas->Pixels[X][Y], Pixels étant un
tableau de TColor.
Enfin, nous écrivons la composition RGB de notre couleur dans Label1.
Remarque : On peut se passer de ColorToRGB mais uniquement pour les constantes correspondant à des couleurs fixes
(et non des couleurs système) qui sont au format 0x00bbggrr.
Vous obtenez finalement quelque chose de ce type 0x00BBGGRR (valeurs Blue, Green, Red, remarquez l'inversion).
- 126 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > Interface > Composants > Les images et le graphisme > TChart
Qu'est ce qu'un TChart ?
Auteurs : Bandit Boy ,
Un TChart est un composant permettant de réaliser des graphiques pour représenter des chiffres. Il peut représenter
un repère orthonormé, un histogramme, un camembert, ou un diagramme de Gantt. Le repère orthonormé permet
d'afficher de plusieurs manières : points reliés, nuage de points, vecteurs, zones (par shape, ou rondes).
Chaque série de données est représenté dans une "Series".
Les fonctions décrites dans la FAQ peuvent être définies soit par logiciel lorsque l'application est en cours, soit à la
conception en double-cliquant sur le composant.
TFastLineSeries *Serie;
Serie = new TFastLineSeries(this);
Serie->ParentChart = Chart1;
- 127 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
TPieSeries *Series1;
Series1 = new TPieSeries(this);
Series1->ParentChart = DBChart1;
Series1->AddPie(30, "1 partie", clLime);
Series1->AddPie(50, "2 partie", clBlue);
Series1->AddPie(20, "3 partie", clYellow);
Chart1->BottomAxis->ExactDateTime = true;
Chart1->BottomAxis->Increment = DateTimeStep[dtOneSecond];
Serie->AddXY(Now(), Y, DateTimeToStr(Now()), clBlack);
Chart1->SaveToBitmapFile("C:\\graph.bmp");
- 128 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Par exemple, ici on sauvegarde l'image graph.bmp sous la racine, qui sera l'image du graphe.
Serie->LinePen->Width = 1;
Serie->LinePen->SmallDots = true;
Serie->LinePen->Style = psDot;
Serie->SeriesColor = clLime;
- 129 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Chart1->BottomAxis->Logarithmic = true;
- 130 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
par
et
par
Pour l'utiliser :
- 131 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Dans cet exemple, nous affichons la page web dont le code HTML est tapé dans un TMemo.
- 132 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Browser->ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER);
// Sélectionner tout
Browser->ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_DODEFAULT);
// Désélectionner tout
Browser->ExecWB(OLECMDID_CLEARSELECTION, OLECMDEXECOPT_DODEFAULT);
Browser->ExecWB(OLECMDID_PAGESETUP, OLECMDEXECOPT_DODEFAULT);
- 133 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Browser->ExecWB(OLECMDID_PROPERTIES, OLECMDEXECOPT_DODEFAULT);
- 134 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Browser->ExecWB(OLECMDID_SAVEAS , OLECMDEXECOPT_DODEFAULT);
- 135 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Pour spécifier un nom de fichier par défaut, il faut quelque peu modifier le code :
Variant pIn;
pIn = "nom_page.html";
Browser->ExecWB(OLECMDID_SAVEAS , OLECMDEXECOPT_PROMPTUSER, pIn);
- 136 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Comment lister les images d'une page, ainsi que leurs propriétés ?
Auteurs : Greybird ,
Il est possible d'obtenir la liste des images qui sont présentes dans la page web. La propriété Images du document
(représenté par le Variant vDocument) donne l'accès à cette liste. Elle nous permet pour chaque image de récupérer
l'URL source, mais aussi d'autres propriétés telles que la taille ou le poids de l'image.
Le code ci-dessous présente la liste des images et de certaines de leurs propriétés dans un TListBox.
- 137 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
#include <mshtml.h>
...
AnsiString __fastcall GetSource (TCppWebBrowser * browser)
{
IHTMLDocument3 *html = NULL;
IHTMLElement *element = NULL;
BSTR string = L"";
try
{
if (browser->Document != NULL)
{
OleCheck(browser->Document->QueryInterface(IID_IHTMLDocument3,(LPVOID*)&html));
OleCheck(html->get_documentElement(&element));
OleCheck(element->get_outerHTML(&string));
}
}
- 138 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
La seconde fonction fonctionne sur les versions antérieures, mais nécessite plus de travail, et utilise l'interface
IHTMLDocument2, ainsi qu'un flux de données.
#include <mshtml.h>
...
AnsiString __fastcall GetSource (TCppWebBrowser * browser)
{
AnsiString Source = "";
IHTMLDocument2 *html = NULL;
IPersistStreamInit *spPsi = NULL;
IStream *spStream = NULL;
try
{
if (browser->Document != NULL)
{
OleCheck(browser->Document->QueryInterface(IID_IHTMLDocument2,(LPVOID*)&html));
IPersistStreamInit *spPsi = NULL;
OleCheck(html->QueryInterface(IID_IPersistStreamInit, (LPVOID*)&spPsi));
if (spPsi != NULL)
{
OleCheck(CreateStreamOnHGlobal(NULL, true, &spStream));
if(spStream != NULL)
{
__int64 nSize = 0;
STATSTG ss;
LARGE_INTEGER nMove;
nMove.QuadPart = 0;
OleCheck(spPsi->Save(spStream, true));
OleCheck(spStream->Seek(nMove, STREAM_SEEK_SET, (ULARGE_INTEGER*)&nSize));
OleCheck(spStream->Stat(&ss, STATFLAG_NONAME));
nSize = ss.cbSize.QuadPart;
Source.SetLength(nSize);
OleCheck(spStream->Read((void *)Source.data(), nSize, (ULONG*)&nSize));
spStream->Release();
spStream = NULL;
}
spPsi->Release();
spPsi = NULL;
}
html->Release();
html = NULL;
}
}
catch (EOleSysError &eOSE)
{
if (spStream != NULL)
{
- 139 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
spStream->Release();
}
if (spPsi != NULL)
{
spPsi->Release();
}
if (html != NULL)
{
html->Release();
}
throw eOSE;
}
return Source;
}
La propriété Forms du document (représenté par le Variant vDocument) donne accès à l'ensemble des formulaires de
la page.
Il est alors possible de récupérer l'ensemble du contenu de ce formulaire, via la propriété All du formulaire (représenté
par le Variant vForm).
On récupère alors les champs du formulaire, et on positionne leur propriété Value.
Il ne reste alors plus qu'à soumettre le formulaire en appellant sa méthode Submit.
A noter que la récupération du formulaire et des champs se fait au moyen de la propriété NamedItem qui permet de
rechercher des tags HTML par leur propriété name.
Le code suivant montre comment remplir les champs login et password d'un formulaire nommé connection, puis de
soumettre le formulaire.
Dans le .h :
- 140 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
private:
void WebPostData(TCppWebBrowser *CppWebBrowser, String sURL, String sPostData);
Dans le .cpp :
V_VT(&vHeaders) = VT_BSTR;
V_BSTR(&vHeaders) = bstrHeaders;
pvPostData = vPostData;
if(pvPostData)
{
VariantInit(pvPostData);
SafeArrayAccessData(psa, (LPVOID*)&pPostData);
memcpy(pPostData, cszPostData, cElems);
SafeArrayUnaccessData(psa);
Pour l'appeler :
WebPostData(CppWebBrowser1,"http://www.site.com/
page.html","pseudo=monpseudo&pass=monpass&submit=ok");
lien : Borland Developer Network : How to post data using TCppWebBrowser in C++Builder
- 141 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Ce composant facilite donc la gestion de listes de chaînes et est particulièrement utile lorsqu'il s'agit de manipuler des
fichiers textes.
Il dispose notamment des méthodes Add pour insérer une chaîne en fin de liste, Insert pour insérer un élément à une
position donnée (il y a donc une réorganisation/décalage d'index pour une partie des éléments déjà existant), Delete qui
supprime un élément à une position donnée (idem pour la réorganisation), et Clear qui retire tous les éléments.
L'accès aux chaînes se fait via la propriété Strings qui est un tableau de chaînes. Il est important d'avoir à l'esprit que
le premier élément sera référencé par un index valant 0 :
Nous pouvons par exemple très facilement gérer un couple pseudo/prénom comme suit :
Liste->Add("Ricky81=Eric");
Liste->Add("Greybird=Arnaud");
delete Liste;
- 142 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
La problématique de synchronisation des informations étant réglée, il est par exemple possible de trier les éléments
sans risque en appelant Liste->Sort();
- 143 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > Interface > Composants > Création dynamique / Recherche de composants à l'exécution
Que représente le TObject *Sender dans les méthodes de la VCL ?
Auteurs : Geronimo ,
Dans beaucoup de méthodes, on trouve comme argument TObject *Sender. Cet argument est utilisé pour savoir quel
est l'objet qui a appelé la méthode.
Voici un exemple simple pour clarifier : dans un nouveau projet, placez sur votre fiche deux boutons et double-cliquez
sur le premier (Button1). Vous obtenez alors le code suivant :
Sélectionnez maintenant votre deuxième bouton sur la fiche (Button2) et dans l'inspecteur d'objets, onglet évènements,
attribuez la méthode Button1Click pour OnClick.
Maintenant, la méthode Button1Click est appelée lorsque vous cliquez sur Button1 ou Button2. Sender permet ici de
savoir quel objet a appelé Button1Click.
Voyez cet exemple :
Sender étant un pointeur sur TObject, il faut le convertir en un pointeur sur TButton pour pouvoir le traiter. Pour
cela, on utilise dynamic_cast.
Voici une version plus perfectionnée ci-dessous qui récupère le pointeur sur le bouton et qui agit ensuite sur les propriétés
du bouton :
- 144 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Nous modifions ici le texte affiché du bouton sur lequel on a appuyé et y plaçons "Appuyé".
TPanel *Panel;
// ...
TLabel *Label = new TLabel(Form1);
Label->Parent = Panel;
Cela signifie que quand Form1 sera détruite, Label le sera également. Donc dans ce cas, vous ne devez pas faire appel
à delete car il y aurait deux delete sur Label ce qui causera des problèmes. Si vous souhaitez garder la main, il suffit de
passer NULL en argument du constructeur. Dans ce cas, le contrôle n'ayant pas de Owner vous pouvez (et vous devrez)
le détruire quand vous le souhaitez avec delete.
La deuxième ligne indique que le Parent de Label est Panel. Ainsi, Label s'affichera dans Panel, et ses propriétés Top
et Left, par exemple, seront relative au Panel.
TButton *MonBouton;
void __fastcall TForm1::Button1Click(Sender: TObject);
{
// La fenêtre est propriétaire du nouveau bouton
MonBouton := new TButton(this);
// mais c'est dans Panel1 qu'il doit s'afficher
MonBouton->Parent = Panel1;
// ensuite on définit les autres propriétés
MonBouton->Caption = "Bouton !";
MonBouton->Left = 10;
- 145 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Après création d'un objet et initialisation de ses propriétés, ajout du pointeur dans la liste :
liste->Add((void *)monObjet);
Pour récupérer un pointeur contenu dans la liste et agir sur l'objet en question (ici nous avons pris un TLabel) :
TLabel *label;
label = (TLabel *)liste->Items[2]; // Accède au troisième élément de la liste
// utilisation classique possible de label
lien : Créer dynamiquement une liste visuelle des images d'un répertoire
Exemple :
- 146 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
EditDynamique->OnKeyPress = MonTraiteKeyPress;
- 147 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Edit1->SetFocus();
L'autre méthode permet de donner le focus à un contrôle dont vous ne connaissez pas le nom. Pour cela, utilisez la
fonction FocusControl membre de la fiche.
Dans ce code, nous donnons le focus au contrôle renvoyé par la fonction FindNextControl. Cette fonction prend comme
référence le contrôle passé en premier argument, et le second argument permet de définir le sens de parcours par
rapport à l'ordre de tabulation (true pour le sens croissant, false pour le sens décroissant).
Regardez l'aide de C++Builder sur FindNextControl pour obtenir la description des arguments suivants.
Comment faire pour avoir des barres d'outils qui peuvent devenir flottantes ?
Auteurs : Geronimo ,
Utilisez le composant TToolBar et changez ses propriétés DragKind et DragMode.
DragKind = dkDock;
- 148 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
DragMode = dmAutomatic;
Voici un exemple permettant d'afficher un menu sur le click droit de la souris mais uniquement pour les noeuds de
niveau 1. Pour le tester n'oubliez pas de laisser vide la propriété PopupMenu de votre TreeView.
Exemple:
- 149 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Remarque : seuls les composants qui auront la fiche pour Owner seront concernés. Pour parcourir de façon récursive,
voici un exemple de code :
- 150 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Attention, si vous comptez supprimer des composants pendant le parcours, il faut impérativement effectuer la boucle
dans le sens descendant. Dans le cas contraire, vous serez victimes de la mise à jour de la propriété Components et des
composants seront omis dans le parcours.
Cette méthode est très utile pour modifier les propriétés d'une série de composants dont les noms peuvent être calculés
en boucle. Par exemple pour effacer le contenu de Edit1 à Edit10 :
Par exemple, pour connaître le nom du bouton cliqué, même si Button1Click est également associé à Button2, Button3
etc...
- 151 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
if (Button != NULL)
{
Button->Caption = "Appuyé";
}
}
- 152 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
SendMessage(ProgressBar1->Handle,PBM_SETBARCOLOR,0,clLime);
La fonction suivante donne ou retire (suivant la valeur du paramètre grant le privilège donné en paramètre name :
- 153 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
wCurrentProcess = GetCurrentProcess();
OpenProcessToken(wCurrentProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &wToken);
LookupPrivilegeValue(NULL, name.c_str(), &wLuid);
wTokenIn.PrivilegeCount = 1;
wTokenIn.Privileges[0].Luid = wLuid;
wTokenIn.Privileges[0].Attributes = (grant?SE_PRIVILEGE_ENABLED:0);
ret = AdjustTokenPrivileges(wToken,
FALSE, &wTokenIn, sizeof(TOKEN_PRIVILEGES), &wTokenOut,&wLength))
CloseHandle(wToken);
return ret;
}
Par exemple, pour ajouter le paramètre SE_SHUTDOWN_NAME, effectuer une action, et retirer le privilège, en nous
basant sur les informations du MSDN listant les constantes d'autorisation (voir plus bas), nous allons utiliser :
SetPrivilege("SeShutdownPrivilege",true);
// actions
SetPrivilege("SeShutdownPrivilege",false);
En général, cette situation se produira lors du développement, afin d'obtenir les données nécessaire à la programmation
de l'interaction avec une fenêtre d'une autre application.
Le code (application console) ci-dessous montre comment réaliser un petit utilitaire permettant d'obtenir le nom de
classe de la fenêtre située au premier plan. Pour l'utiliser, il faut créer une application console (Fichier | Nouveau |
Autre, puis choisir Expert Console).
#include <windows.h>
#include <stdio.h>
#include <conio.h>
int main(int argc, char * argv[])
{
HWND hFore;
char* pszBuffer;
int iNbChar = 1;
int iNbCharReturned;
printf("Vous avez 5 secondes pour activer la fenetre dont vous voulez connaitre le class name\r
\n");
printf("Appuyez sur une touche pour declancher le compteur ...");
getch();
Sleep(5000);
hFore = GetForegroundWindow();
do
{
iNbChar = iNbChar * 2;
pszBuffer = new char[iNbChar];
- 154 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
iNbCharReturned = GetClassName(hFore,pszBuffer,iNbChar);
if (iNbCharReturned == 0)
{
printf("Impossible de recuperer le class name\r\n");
}
if (iNbCharReturned < (iNbChar - 1))
{
printf("\r\nLe class name de cette fenetre est :\r\n|%s|",pszBuffer);
printf("\r\nLes barres verticales (|) de gauche et droite n'en font pas partie\r\n\a");
}
delete[] pszBuffer;
}
while ((iNbCharReturned >= (iNbChar - 1)));
return 0;
}
Ceci peut se réaliser au moyen de la fonction FindWindow de l'API Windows. Cette fonction prend en premier paramètre
le nom de la classe de fenêtre recherchée, et en second le titre de cette fenêtre. Il est possible de positionner l'un de ces
deux paramètres à NULL afin de ne pas utiliser le critère correspondant dans la recherche.
Etant donné que le titre de la fenêtre est beaucoup plus fluctuant que le nom de la classe de fenêtre, on cherchera
toujours à préférer la recherche par nom de classe.
Pour obtenir ce nom de classe, il est possible d'utiliser un code fourni dans la FAQ (lien ci-dessous).
Le code suivant montre comment mettre une instance de la calculatrice Windows au premier plan, et lui envoyer un
message indiquant l'appui sur la touche R (ce qui aura pour effet de déclencher la fonction inverse).
- 155 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Pour les visualiser dans l'Explorer, on clique droit sur le fichier, puis on fait propriété.
Dans l'EDI builder, pour inclure des informations de version, on utilise l'option :
Pour déterminer si un fichier possède des informations de version, on utilise la fonction GetFileVersionInfoSize.
Pour obtenir ces informations, on utilise en plus la fonction GetFileVersionInfo.
Exemple d'utilisation :
Lorsque l'on clique sur un bouton, on renseigne un Memo (Memo1) avec toutes les informations dont dispose
l'executable de l'application.
BYTE *Buffer;
try{
Buffer = new unsigned char[Size];
LPVOID Str;
UINT Len;
String TypeInfo;
LPDWORD lpdwLangCp;
char szFileInfo[26];
// Nom de l'organisation
TypeInfo = szFileInfo + (AnsiString) "CompanyName";
if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
Memo1->Lines->Add( "Nom de l'organisation :\t" +
(AnsiString) reinterpret_cast<char *>(Str) );
else Memo1->Lines->Add( "Nom de l'organisation :\tErreur de lecture" );
// Description
TypeInfo = szFileInfo + (AnsiString) "FileDescription";
if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
Memo1->Lines->Add( "Description :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
else Memo1->Lines->Add( "Description :\tErreur de lecture" );
// Version de fichier
TypeInfo = szFileInfo + (AnsiString) "FileVersion";
if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
Memo1->Lines->Add( "Version de fichier :\t" +
(AnsiString) reinterpret_cast<char *>(Str) );
else Memo1->Lines->Add( "Version de fichier :\tErreur de lecture" );
- 156 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
// Nom interne
TypeInfo = szFileInfo + (AnsiString) "InternalName";
if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
Memo1->Lines->Add( "Nom interne :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
else Memo1->Lines->Add( "Nom interne :\tErreur de lecture" );
// Copyright
TypeInfo = szFileInfo + (AnsiString) "LegalCopyRight";
if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
Memo1->Lines->Add( "Copyright :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
else Memo1->Lines->Add( "Copyright :\tErreur de lecture" );
// Marques légales
TypeInfo = szFileInfo + (AnsiString) "LegalTrademarks";
if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
Memo1->Lines->Add( "Marques légales :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
else Memo1->Lines->Add( "Marques légales :\tErreur de lecture" );
// Nom du produit
TypeInfo = szFileInfo + (AnsiString) "ProductName";
if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
Memo1->Lines->Add( "Nom du produit :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
else Memo1->Lines->Add( "Nom du produit :\tErreur de lecture" );
// Version du produit
TypeInfo = szFileInfo + (AnsiString) "ProductVersion";
if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
Memo1->Lines->Add( "Version du produit :\t" +
(AnsiString) reinterpret_cast<char *>(Str) );
else Memo1->Lines->Add( "Version du produit :\tErreur de lecture" );
// Commentaire
TypeInfo = szFileInfo + (AnsiString) "Comments";
if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
Memo1->Lines->Add( "Commentaire :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
else Memo1->Lines->Add( "Commentaire :\tErreur de lecture" );
}
__finally{
delete Buffer;
Memo1->Lines->Add( "\t----------------------------" );
}
}
Comment forcer la fermeture d'un programme en exécution (fin de tâche) grâce à son intitulé ?
Auteurs : Bandit Boy , pottiez ,
Pour forcer la fermeture d'un programme, il suffit de connaître le Handle de sa fenêtre, en utilisant pour cela la fonction
FindWindow
qui prend en paramètre l'intitulé de la fenêtre (texte qui se trouve dans la barre de titre de la fenêtre). Ensuite la fonction
GetWindowThreadProcessId
récupère l'ID du processus grâce au Handle. TerminateProcess ferme le programme.
Pour l'exemple "Calculatrice" est le programme a terminer :
- 157 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 158 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Dans un premier temps, l'exécutable étant en cours, nous n'avons pas les droits d'accès. Il est nécessaire de les obtenir
pour mettre à jour l'application. Pour cela, nous allons effectuer une copie de l'exécutable au même endroit que celui en
cours (donc transparent pour l'utilisateur). L'original en exécution sera au préalable déplacé dans le dossier temporaire,
puis supprimé.
AnsiString TempPath;
AnsiString NewPath;
AnsiString OriginalPath;
if(MoveFileEx(OriginalPath.c_str(),NewPath.c_str(),MOVEFILE_REPLACE_EXISTING) == FALSE)
ShowMessage("Moving file error");
if(CopyFile(NewPath.c_str(),OriginalPath.c_str(),FALSE) == FALSE)
ShowMessage("Copying file error");
if(MoveFileEx(NewPath.c_str(),NULL,MOVEFILE_DELAY_UNTIL_REBOOT) == FALSE)
ShowMessage("Moving file error");
Comme il n'est pas possible à l'exécutable de se supprimer lui-même, il sera supprimé au redémarrage du PC par la
fonction MoveFileEx en donnant le message MOVEFILE_DELAY_UNTIL_REBOOT.
Une fois les droits acquis, il n'y a plus qu'à charger le fichier à mettre en ressource puis de mettre à jour.
if(INVALID_HANDLE_VALUE != hFile)
{
//chargement du fichier dans un buffer pour le transmettre
dwFileSize = GetFileSize(hFile, NULL);
lpBuffer = new BYTE[dwFileSize];
if(ReadFile(hFile,
lpBuffer,
dwFileSize,
&dwBytesRead,
NULL) != FALSE)
{
//récupération du Handle de la ressource
- 159 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Le fichier mis à jour se trouvant sur la copie, il faut donc relancer l'application pour voir l'effet de cette mise à jour. Ici
le fichier ajouté (ou modifié s'il existe déjà sous le même nom RESOURCEADDED) est de type RCDATA.
AnsiString Chemin_Fichier_Text=ExtractFilePath(Application->ExeName)+"\\file.txt";
TResourceStream *MRes=new TResourceStream((int)HInstance, "RESOURCE", RT_RCDATA);
MRes->SaveToFile(Chemin_Fichier_Text);
TStringList *File= new TStringList;
File->LoadFromFile(Chemin_Fichier_Text);
DeleteFile(Chemin_Fichier_Text);
Ici on écrit dans un fichier temporaire le contenu de la resource "RESOURCE", puis on le charge dans un TStringList
pour utilisation.
- 160 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
//procédure de sauvegarde
AnsiString TempPath,NewPath,OriginalPath;
GetTempPath(200,TempPath.c_str());
GetTempFileName(TempPath.c_str(), "TMP",0,NewPath.c_str());
OriginalPath = Application->ExeName;
if(MoveFileEx(OriginalPath.c_str(),NewPath.c_str(),MOVEFILE_REPLACE_EXISTING) == FALSE)
Application->MessageBox("Impossible de déplacer l'exe","Erreur",MB_OK+MB_ICONWARNING);
if(CopyFile(NewPath.c_str(),OriginalPath.c_str(),FALSE) == FALSE)
Application->MessageBox("Impossible de copier l'exe","Erreur",MB_OK+MB_ICONWARNING);
if(MoveFileEx(NewPath.c_str(),NULL,MOVEFILE_DELAY_UNTIL_REBOOT) == FALSE)
Application->MessageBox("Impossiblede déplacer la copie","Erreur",MB_OK+MB_ICONWARNING);
Pour le recharger, il suffit de lire le fichier en tant que TRessourceStream, de le convertir en TSream pour obtenir le
format de sauvegarde, puis de sauver le fichier en tant que son propre type (".txt" pour les fichier texte, ".csv" pour
les csv ...)
Pour le recharger :
Par exemple dans une application multilangue, on peut sauver dans un fichier ini, txt ou autre les configurations (choix
de la langue, fichiers chargés, modifications apportées par l'utilisateur...) puis le sauver en Ressource pour que l'exe
soit portable.
L'avantage de cette manipulation est que TOUT est dans UN fichier : l'application elle-même.
- 161 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
L'inconvénient est que le code est un peu lourd à placer, et qu'il faut que l'application soit modifiable (non en lecture
seule) pour être modifiée.
- 162 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
ShowMessage(StrUpper(getenv("NUMBER_OF_PROCESSORS")).ToIntDef(0));
ShowMessage(StrUpper(getenv("PROCESSOR_IDENTIFIER")));
- 163 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
#include <IniFiles.hpp>
Un fichier .ini est un fichier ASCII structuré de la manière suivante : il contient un ou plusieurs noms de sections notés
entre crochets, et chaque section contient des couples clé/valeur.
[Section]
NomDeClé=Valeur
[Section2]
NomDeClé1=Valeur
NomDeClé2=Valeur
...
Attention, il n'y a aucun contrôle sur la structure d'un fichier .ini, il est possible d'ouvrir un fichier texte quelconque.
Dans ce cas, les extractions de clés et/ou valeurs donnent lieu à des résultats aléatoires. L'écriture, par contre, reste
possible.
Note : Sous Windows Me/98/95 le système met en cache une version du fichier Win.ini afin d'augmenter les
performances. Vous pourrez donc être amené à appeler la méhode UpdateFile pour nettoyer les lectures et les écritures
du tampon depuis et vers le fichier .ini sur disque. UpdateFile est utile sous Windows Me/98/95, mais n'a aucun effet
sous Windows NT car NT ne met pas de lectures et d'écritures de fichier INI dans un tampon.
- 164 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Ces méthodes créent ou mettent à jour la valeur relative à un clé dans une section. Leurs prototypes sont similaires et
ne se distinguent que dans le dernier paramètre propre au type traité :
void __fastcall WriteString(const AnsiString Section, const AnsiString Ident, const AnsiString
Value);
Section identifie la section à considérer, Ident est le nom de la clé concernée, et Value correspond à la valeur qu'on désire
faire correspondre à la clé.
TIniFile *f;
try
{
f = new TIniFile("C:\\Test.ini");
f->WriteBool("Section bool", "Clé bool", true);
f->WriteDate("Section TDate", "Clé TDate", Date());
f->WriteInteger("Section int", "Clé int", 29);
f->WriteString("Section AnsiString", "Clé AnsiString", "Test.ini");
}
__finally
{
delete f;
}
Voici le résultat :
[Section bool]
Clé bool=1
[Section TDate]
Clé TDate=28/10/2004
[Section int]
Clé int=29
[Section AnsiString]
Clé AnsiString=Test.ini
Ces méthodes lisent la valeur relative à une clé dans une section. Leurs prototypes sont similaires et ne se distinguent
que par le type renvoyé et celui de la valeur par défaut :
- 165 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
AnsiString __fastcall ReadString(const AnsiString Section, const AnsiString Ident, const AnsiString
Default);
Section identifie la section à considérer, Ident est le nom de la clé concernée, et Default correspond à la valeur à renvoyer
dans les situations suivantes :
• la section n'existe pas
• la clé n'existe pas
• aucun valeur n'est définie
TIniFile *f;
bool b;
TDate d;
int i;
AnsiString s;
try
{
f = new TIniFile("C:\\Test.ini");
b = f->ReadBool("Section bool", "Clé bool", false);
d = f->ReadDate("Section TDate", "Clé TDate", Date());
i = f->ReadInteger("Section int", "Clé int", 0);
s = f->ReadString("Section AnsiString", "Clé AnsiString", "");
}
__finally
{
delete f;
}
Remarque : la méthode ReadBinaryStream est l'exception à la règle puisque le dernier paramètre est un pointeur vers
le flux dans lequel la valeur sera extraite.
- 166 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Section spécifie la section du fichier .ini dans laquelle rechercher la clé, et Ident le nom de la clé.
Comment lire les noms de toutes les sections d'un fichier .ini ?
Auteurs : Ricky81 ,
La méthode ReadSections lit et renvoie les noms de toutes les sections dans un objet de type descendant de TStrings
comme par exemple TStringList, ou la propriété Lines d'un TMemo.
TIniFile *f;
try
{
TStringList *l = new TStringList();
f = new TIniFile("C:\\Test.ini");
f->ReadSections(l);
ShowMessage(IntToStr(l->Count)+" sections présentes.");
delete l;
}
__finally
{
delete f;
}
Comment lire les noms de clés d'une section particulière dans un fichier .ini ?
Auteurs : Ricky81 ,
La méthode ReadSection lit et renvoie tous les noms de clés d'une section donnée dans un objet de type descendant de
TStrings, comme par exemple TStringList, ou la propriété Lines d'un TMemo.
TIniFile *f;
try
{
f = new TIniFile("C:\\Test.ini");
f->ReadSection("Section bool", Memo1->Lines);
- 167 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
}
__finally
{
delete f;
}
Comment lire l'ensemble des valeurs d'une section d'un fichier .ini ?
Auteurs : Ricky81 ,
La méthode ReadSectionValues lit les valeurs de l'ensemble des clés d'une section donnée et les envoie à un objet de type
descendant de TStrings sous la forme "clé=valeur".
Les valeurs sont donc converties dans leur représentation AnsiString.
TIniFile *f;
try
{
f = new TIniFile("C:\\Test.ini");
f->ReadSectionValues("Section int", Memo1->Lines);
}
__finally
{
delete f;
}
lien : Comment lire l'ensemble des valeurs de toutes les sections d'un fichier .ini ?
Comment lire l'ensemble des valeurs de toutes les sections d'un fichier .ini ?
Auteurs : Laurent Dardenne , Ricky81 ,
On combine l'appel des méthodes ReadSections et ReadSectionValues.
TIniFile *f;
AnsiString section;
try
{
TStringList *lSections = new TStringList();
TStringList *lValeurs = new TStringList();
f = new TIniFile("C:\\Test.ini");
f->ReadSections(lSections);
for(int i=0 ; i < lSections->Count ; ++i)
{
section = lSections->Strings[i];
f->ReadSectionValues(section, lValeurs);
Memo1->Lines->Append(section);
Memo1->Lines->AddStrings(lValeurs);
}
delete lSections;
delete lValeurs;
}
- 168 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
__finally
{
delete f;
}
lien : Comment lire l'ensemble des valeurs d'une section d'un fichier .ini ?
lien : Comment lire les noms de toutes les sections d'un fichier .ini ?
Section détermine la section concernée, et Ident le nom de la clé pour laquelle le couple clé/valeur va être retiré du fichier.
Remarque : les tentatives de suppression de clés dans une section inexistante ou de suppression de clés inexistantes ne
sont pas considérées comme des erreurs. Dans ces situations, DeleteKey ne fait rien.
- 169 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Notes:
• Une clé absolue commence par une barre oblique inverse (\) et est sous-clé de la clé racine.
• Une clé relative est sous-clé de la clé en cours.
• Une clé non-volatile est stockée dans un fichier et est préservée lorsque le système redémarre ( NT ).
• Une clé volatile est stockée en mémoire et n'est pas préservée lorsque le système redémarre ( NT ).
HKEY_USERS
Correspond à la racine de tous les profils d'utilisateurs de l'ordinateur. HKEY_CURRENT_USER est une sous-clé de
HKEY_USERS.
HKEY_LOCAL_MACHINE
Contient les informations de configuration spécifiques à l'ordinateur (pour tous les utilisateurs).
HKEY_CLASSES_ROOT
Sous-clé de HKEY_LOCAL_MACHINE\Software. Les informations stockées ici garantissent l'ouverture du
programme voulu lorsque vous ouvrez un fichier depuis l'Explorateur Windows.
HKEY_CURRENT_CONFIG
Contient des informations sur le profil matériel utilisé par l'ordinateur local au démarrage.
REG_DWORD
- 170 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Données représentées par un nombre de 4 octets. Beaucoup de paramètres concernant les pilotes de périphériques et
les services sont de ce type.
REG_EXPAND_SZ
Chaîne de longueur variable. Ce type de données comprend les variables qui sont résolues lorsqu'un programme ou
un service les utilise.
REG_MULTI_SZ
Chaîne multiple. Les valeurs qui contiennent des listes ou plusieurs valeurs sous une forme lisible par l'homme sont
généralement de ce type. Les différentes valeurs sont séparées par un espace, une virgule ou un autre signe.
REG_SZ
Chaîne de texte de longueur fixe.
REG_FULL_RESOURCE_DESCRIPTOR
Série de tableaux imbriqués destinés à stocker une liste de ressources pour un composant matériel ou un pilote.
A noter que les noms de clés et de type prédéfinis dépendent de la version de l'OS. Certaines versions de C++ Builder
ne gèrent nativement qu'un sous ensemble de type prédéfini. Reportez-vous à l'aide en ligne du programme Regedit
ou au SDK Windows.
#include <registry.hpp>
Il est possible de passer au constructeur un long pour initialiser la propriété Access (niveau d'accès à utiliser).
registre->RootKey = HKEY_CLASSES_ROOT;
- 171 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Si par la suite on souhaite accéder à une autre clé racine on doit fermer la clé racine courante puis ouvrir avec la
nouvelle clé racine.
registre->CloseKey();
Le comportement de cette méthode dépend de la propriété LazyWrite. Il est recommandé de ne pas maintenir les clés
ouvertes plus longtemps que nécessaire.
delete registre;
Le destructeur appelle la méthode CloseKey avant de détruire l'objet. La suite d'instructions qui suit est donc
redondante :
registre->CloseKey();
delete regisre;
Note : Il est recommandé d'utiliser la gestion d'exception de type try...catch et/ou try...__finally afin de gérer tous les
cas d'erreurs et ainsi libérer la mémoire allouée.
lien : Comment modifier les droits d'accès d'un objet de type TRegistry ?
if registre->KeyExists("nom_de_la_clé")
{
- 172 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
// ...
if registre->ValueExists("nom_de_la_valeur")
{
// ...
if registre->HasSubKeys()
{
// ...
Une clé en absolu l'est par rapport à la clé racine, la chaîne passée commence nécessairement par \ (doublé ici car \ est
le caractère d'échappement). Ici nous créons la clé HKEY_CURRENT_USER\Software\Essai.
- 173 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
registre->RootKey = HKEY_CURRENT_USER;
if(registre->OpenKeyReadOnly("Software"))
{
if(registre->CreateKey("Test")) // Nom relatif
{
...
Une clé en relatif l'est par rapport à la clé courante. Ici nous nous sommes placés sur la clé HKEY_CURRENT_USER
\Software et créons donc la clé HKEY_CURRENT_USER\Software\Test.
Exemple :
registre->OpenKey("nom_de_la_clé", true);
Notez ici que le paramètre CanCreate a pour valeur true. Cela permet au cas où la clé n'existerait pas, de forcer sa
création puis son ouverture. Il s'agit en quelque sorte d'une combinaison d'appel de CreateKey puis d'OpenKey.
Il est à présent possible de lire, écrire ou supprimer une valeur d'une clé.
Pour lire, écrire ou supprimer une valeur chaîne dans la clé, on utilisera les méthodes ReadString, WriteString ou
DeleteString de TRegistry.
Pour la lecture :
maChaine = registre->ReadString("nom_de_la_valeur");
Pour l'écriture :
registre->WriteString("nom_de_la_valeur", "valeur");
Pour la suppression :
if(registre->DeleteValue("nom_de_la_valeur");
{
...
- 174 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Note : Ici nous avons traité les exemples de la lecture, de l'écriture et de la suppression d'une valeur d'une clé de type
chaîne de caractères. Il existe des méthodes spécifiques pour manipuler les autres types de données. Pour les connaître
reportez-vous à l'aide.
delete registre;
delete mesCles;
delete registre;
delete mesCles;
lien : Comment lire les noms de toutes les sous-clés de la clé en cours ?
- 175 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
if(registre->DeleteKey("nom_de_la_clé"))
{
// la clé a bien été supprimée
}
Note : Après l'avoir supprimée, il n'est pas nécessaire de fermer cette clé.
Le comportement de cette méthode diffère selon l'OS. Consultez l'aide.
Le paramètre "UNCName" contient un nom de machine au format UNC. Le format UNC étant égal à \\<serveur>
\<nom_partage> (ne pas oublier de doubler le caractère \ pour une chaîne de caractères).
try
{
/* pour les accès distant la propriété RootKey est égale soit
à HKEY_USERS soit à HKEY_LOCAL_MACHINE */
registreMachineDistante->RootKey = HKEY_LOCAL_MACHINE;
if(!registreMachineDistante->RegistryConnect("\\\\"+serverName))
{
// vérifier la configuration réseau ou les permissions d'accès
ShowMessage("Impossible de se connecter.");
return;
}
if(registreMachineDistante->OpenKeyReadOnly("\\"+CleMachineDistante+"\\"+CleRecherchee))
{
registreMachineDistante->GetKeyNames(listeSousCles); // liste des sous-clés
}
else
{
ShowMessage("Erreur, clé absente.");
}
}
__finally
{
delete registreMachineDistante;
}
- 176 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
L'accès à la base de registre d'une machine peut être limité par l'administrateur. Si vous définissez la propriété
Access=KEY_ALL_ACCESS vous devez avoir le droit d'accès NT 'contrôle total' sur la clé que vous souhaitez modifier.
Sous NT/W2K et XP, vous pouvez visualiser les droits en utilisant l'outil RegEdt32.
Voir l'aide en ligne pour plus de détails.
- 177 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 178 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Ce code renvoie l'espace mémoire du lecteur C:, en octets, pouvant encore être utilisé.
Pour ouvrir :
Pour fermer :
Dans le cas de plusieurs lecteurs, il vous faut initialiser le lecteur concerné avec la commande suivante :
De la même façon, vous aurez à utiliser la commande suivante pour clôturer l'association :
Tout ceci donne donc le code suivant pour ouvrir par exemple :
- 179 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
int GetVolumeInformationA(
const char * lpRootPathName,
char * lpVolumeNameBuffer,
unsigned long nVolumeNameSize,
unsigned long * lpVolumeSerialNumber,
unsigned long * lpMaximumComponentLength,
unsigned long * lpFileSystemFlags,
char * lpFileSystemNameBuffer,
unsigned long nFileSystemNameSize)
Il suffit de passer en paramètre le chemin vers la racine du disque ("C:\\"), afin d'obtenir les informations voulues.
Au retour de la fonction :
• lpVolumeNameBuffer va contenir le nom de volume
• lpFileSystemNameBuffer va contenir le nom du système de fichiers
• lpVolumeSerialNumber va contenir le numéro de série
• lpMaximumComponentLength va contenir la longueur maximum d'un nom de fichier
• lpFileSystemFlags va contenir la liste des états du disque
- 180 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
{
const int Max_Length = 256;
char * VolName = new char[Max_Length];
char * FileSysName = new char[Max_Length];
unsigned long VolSerial;
unsigned long FileMaxLen;
unsigned long FileFlags;
delete[] VolName;
delete[] FileSysName;
}
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName,// adresse du volume
LPTSTR lpVolumeNameBuffer,// structure qui accueillera le nom du volume
DWORD nVolumeNameSize,// taille de la structure qui accueillera le nom du volume
LPDWORD lpVolumeSerialNumber,// structure qui accueillera le numéro de série du volume
LPDWORD lpMaximumComponentLength,// structure qui accueillera la taille maximale d'un nom de fichier
LPDWORD lpFileSystemFlags,// structure qui accueillera des informations sur le système de fichiers
LPTSTR lpFileSystemNameBuffer,// structure qui accueillera le nom du système de fichiers
DWORD nFileSystemNameSize // taille de la structure qui accueillera le nom du système de fichiers
);
char VolName[12],serial[15];
DWORD VolumeSerialNumber;
DWORD MaximumComponentLength;
DWORD FileSystemFlags;
char FileSystemName[5];
if (GetVolumeInformation("C:\\",
VolName,
sizeof(VolName),
&VolumeSerialNumber,
&MaximumComponentLength,
&FileSystemFlags,
FileSystemName,
sizeof(FileSystemName)))
{
sprintf(serial,"%X-%X",HIWORD(VolumeSerialNumber),LOWORD(VolumeSerialNumber));
numserie = serial;
AnsiString Message = "Nom du disque : " + AnsiString(VolName);
Message += "\nSystème de fichiers : " + AnsiString(FileSystemName);
Message += "\nNuméro de série : " + numserie;
ShowMessage(Message);
}
}
- 181 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
La seule différence à la restitution concerne le numéro de série qui ici est au format hexadécimal.
- 182 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Attention, cette fonction ne teste pas si votre écran supporte la résolution que vous souhaitez. Prévoyez au cas où dans
votre développement de pouvoir revenir à la résolution précédente.
ChangeDisplaySettingsA(0, 0);
- 183 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Voici un exemple d'utilisation pour suspendre l'écran de veille et la mise en veille du moniteur durant l'exécution d'un
programme (void * Param; est un membre privé de la fiche) :
//---------------------------------------------------------------------------
// Au lancement de l'application on modifie les valeurs d'attente
void __fastcall TForm1::FormCreate(TObject *Sender)
{
// si l'écran de veille est actif
if(!SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, NULL, SPIF_UPDATEINIFILE))
{
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, NULL, SPIF_UPDATEINIFILE);
}
- 184 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
if(Param > 0)
{
SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT, (int) Param, NULL, SPIF_UPDATEINIFILE);
}
}
//---------------------------------------------------------------------------
AnsiString GetTitleBarFontName()
{
NONCLIENTMETRICS metrics;
metrics.cbSize = sizeof(metrics);
AnsiString result = "Aucune Font trouvée";
if (SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(metrics), &metrics, 0))
{
result = metrics.lfCaptionFont.lfFaceName;
}
return result;
}
- 185 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
réalisées avec C++ Builder. En effet, les fenêtres héritant de TForm utilisent cette taille comme taille par défaut de leur
propre police. Pour obtenir cette information, un simple appel à la fonction GetDeviceCaps suffit.
La fonction d'exemple suivante vous retourne directement la taille de la police. Les valeurs principales sont :
int GetSystemFontSize()
{
HDC dc = GetDC(0);
int result = GetDeviceCaps(dc, LOGPIXELSX);
ReleaseDC(0, dc);
return result;
}
- 186 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Comment intercepter tous les évènements clavier des composants d'une fiche ?
Auteurs : Geronimo ,
Pour permettre à une fiche de récupérer les évènements du clavier se produisant dans l'un de ses contrôles enfants,
vous devez positionner la propriété KeyPreview à true, la fiche recevra tous les évènements du clavier avant que les
contrôles ne les reçoivent.
Vous pouvez définir cette propriété dans l'inspecteur d'objet ou à tout moment par le code suivant :
KeyPreview = true;
Nous allons utiliser la fonction GetKeyState qui permet non seulement de savoir si une touche est enfoncée, mais
également de savoir si celle-ci est bloquée.
Pour cela, il faut examiner de plus près la valeur renvoyée par cette fonction : elle renvoie un SHORT. Le bit de poids
le plus fort est à 1 si la touche est enfoncée et le bit de poids le plus faible est à 1 si la touche est verrouillée.
Le code suivant permet donc de tester le verrouillage ou non du NumLock :
- 187 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 188 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
• MOUSEEVENTF_WHEEL pour faire croire que la molette a bougé (sans indication de sens)
Cette fonction retourne l'état de la touche, le bit 15 du résultat est à 1 si la touche (ou le bouton) est actuellement
enfoncée. Le test fonctionne aussi même si l'application n'est pas active. Le numéro de touche passé en paramètre doit
être le code de touche virtuelle. C++ Builder définit les constantes VK_xxxx pour chaque touche du clavier. A noter
que pour les touches de type lettre, on peut également utiliser le code ASCII de la lettre majuscule, ou le charactère
correspondant (ce qui revient au même).
Pour obtenir la liste des codes de touche virtuelle, recherchez dans l'aide de BCB la rubrique Codes de touche virtuelle
Comment répéter une action lorsque le bouton gauche de la souris reste enfoncé ?
Auteurs : blondelle , pottiez , henderson ,
Cette fonction repète une action tant que le bouton gauche de la souris reste enfoncé.
Attention : ne pas utiliser dans le code les variables X et Y qui sont les coordonnées de la souris.
- 189 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
{
a = a + 1;
Label1->Caption = a;
Application->ProcessMessages();
time = GetTickCount();
while (GetTickCount() < time + 150) // 150 ms
{
// 150 ms temporisation utilisée pour un appui bref
// sinon le déplacement est de plusieurs pixels si le délai est trop court
}
}
}
La boucle " while ((GetAsyncKeyState(VK_LBUTTON) & 0x8000) != 0) " répète l'action tant que le bouton gauche
reste enfoncé, dès que celui-ci est relaché l'action cesse.
La boucle " while (GetTickCount() < time + 150) " assure une temporisation qui ralentit le test sur l'état du bouton afin
de ne prendre en compte que l'incrément de 1 lors d'un appui bref.
- 190 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
La fonction GlobalMemoryStatusEx initialise la variable MS avec différentes informations concernant l'état instantané
de la mémoire.
La quantité de mémoire vive installée sur le poste est récupérable par le membre ullTotalPhys.
Une variante :
int ram;
MEMORYSTATUSEX X;
X.dwLength = sizeof(X);
GlobalMemoryStatusEx(&X);
ram = X.ullTotalPhys+524288;
La fonction GlobalMemoryStatusEx initialise la variable MS avec différentes informations concernant l'état instantané
de la mémoire.
La quantité de mémoire vive libre est récupérable par le membre ullAvailPhys.
- 191 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
La fonction GlobalMemoryStatusEx initialise la variable MS avec différentes informations concernant l'état instantané
de la mémoire.
Le pourcentage d'utilisation de la mémoire vive est récupérable par le membre dwMemoryLoad.
La fonction GlobalMemoryStatusEx initialise la variable MS avec différentes informations concernant l'état instantané
de la mémoire.
La quantité de mémoire virtuelle libre restante est récupérable par le membre ullAvailVirtual.
La fonction GlobalMemoryStatusEx initialise la variable MS avec différentes informations concernant l'état instantané
de la mémoire.
La quantité de mémoire virtuelle pouvant être utilisée est récupérable par le membre ullTotalVirtual.
- 192 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
La fonction GlobalMemoryStatusEx initialise la variable MS avec différentes informations concernant l'état instantané
de la mémoire.
La quantité de mémoire paginée libre restante est récupérable par le membre ullAvailPageFile.
La fonction GlobalMemoryStatusEx initialise la variable MS avec différentes informations concernant l'état instantané
de la mémoire.
La quantité de mémoire paginée pouvant être utilisée est récupérable par le membre ullTotalPageFile.
- 193 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Dans cet exemple, le son est joué et la fonction renvoie true après la fin du son.
Voyez l'aide pour la liste des options possibles.
MessageBeep(MB_OK);
Le code suivant montre comment récupérer le volume actuel du mixer, le modifier, et retourner à la valeur précédente.
- 194 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
#include <mmsystem.h>
...
unsigned long volume;
waveOutGetVolume(NULL, (LPDWORD) &volume);
waveOutSetVolume(NULL, (DWORD)0x0);
waveOutSetVolume(NULL, volume);
A partir de Windows Vista ces méthodes ne sont plus gérées, on peut donc utiliser le code
suivant pour afficher la fenêtre de contrôle de son :
- 195 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Le résultat affiché vous donne les noms des fonctions mais il n'est malheureusement pas possible de connaître les
paramètres attendus par les fonctions.
On peut également utiliser l'outil gratuit Dependency Walker, qui montre en plus les dépendances entre modules.
- 196 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Registry->RootKey = HKEY_LOCAL_MACHINE;
// The com ports are administered in the following directory.
// false, because no entry is supposed to be created.
Registry->OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM", false);
- 197 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Si vous rencontrez un problème à l'inclusion de shlobj.h il vous faudra modifier les fichiers shobjidl.h et shlobj.h comme
suit :
shobjidl :
• Commenter les lignes 2189 à 2193
• Commenter les lignes 8085 à 8095
shlobj.h :
• Modifier la ligne 1422 en } *LPFVSHOWINFO;
• Modifier la ligne 3457 en } *LPSHELLFLAGSTATE;
ExitWindowsEx(EWX_LOGOFF,0);
Remarque : pour forcer les applications à se terminer, il est possible d'utiliser le flag EWX_FORCE en complément
de EWX_LOGOFF.
Par exemple :
- 198 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
ExitWindowsEx(EWX_LOGOFF | EWX_FORCE,0);
SetSystemPowerState(False,True);
Le code précédent met l'ordinateur en veille en utilisant la technique d'hibernation et envoie le message de mise en veille
aux applications sans attendre de réponse.
Cette fonction ne fonctionnera avec les systèmes NT que si l'application dispose du privilège SE_SHUTDOWN_NAME.
ExitWindowsEx(EWX_REBOOT,0);
Remarque : pour forcer les applications à se terminer, il est possible d'utiliser le flag EWX_FORCE en complément
de EWX_REBOOT.
Par exemple :
ExitWindowsEx(EWX_REBOOT | EWX_FORCE,0);
Cette fonction ne fonctionnera avec les systèmes NT que si l'application dispose du privilège SE_SHUTDOWN_NAME.
ExitWindowsEx(EWX_SHUTDOWN,0);
Remarque : pour forcer les applications à se terminer, il est possible d'utiliser le flag EWX_FORCE en complément
d'un des 2 précédemment cités.
- 199 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Par exemple :
ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,0);
Cette fonction ne fonctionnera avec les systèmes NT que si l'application dispose du privilège SE_SHUTDOWN_NAME.
Pour obtenir la version de Windows installée sur le PC, C++ Builder fournit ainsi les variables Win32MajorVersion et
Win32MinorVersion, entre autres. On peut en déduire la version de Windows à l'aide du code suivant :
- 200 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Cette méthode permet d'obtenir simplement le nom du système d'exploitation. Il est cependant possible d'obtenir des
informations plus détaillées (numéro de construction, pro/perso, etc.) en utilisant les fonctions de l'API Windows. Cette
méthode un peu plus longue est donnée dans le fichier zip ci-dessous.
- 201 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Je déclare une structure TaskBar du même type que celle de la barre de tâches windows (type _AppBarData), ensuite
je récupère le Handle de la barre de tâche pour lire ses paramètres.
Je m'intéresse tout particulièrement à TaskBar.lParam qui correspond à l'affichage de la barre. Ce paramètre peut
prendre plusieurs valeurs dont voici la liste :
Une fois connue, soit je le modifie pour un affichage "Masqué automatiquement" ou "Toujours affiché".
- 202 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
On peut voir que cette fonction peut permettre de modifier d'autres paramètres de la barre ... Par ailleurs, la commande
ABM_SETSTATE permet d'appliquer la modification.
--------------------------------------------------------------------------------
[C++ Error] shobjidl.h(2193): E2238 Multiple declaration for 'FOLDERSETTINGS'
[C++ Error] shobjidl.h(8095): E2238 Multiple declaration for 'DESKBANDINFO'
[C++ Error] shlobj.h(1422): E2238 Multiple declaration for 'FVSHOWINFO'
--------------------------------------------------------------------------------
BOOL IsAdmin(void)
{
HANDLE hProcess, hAccessToken;
UCHAR InfoBuffer[1024];
PTOKEN_GROUPS ptgGroups = (PTOKEN_GROUPS)InfoBuffer;
DWORD dwInfoBufferSize;
PSID psidAdministrators;
SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;
UINT x;
hProcess = GetCurrentProcess();
if(!OpenProcessToken(hProcess,TOKEN_READ,&hAccessToken))
return(FALSE);
if(!GetTokenInformation(hAccessToken,TokenGroups,InfoBuffer,
1024, &dwInfoBufferSize)) return(FALSE);
AllocateAndInitializeSid(&siaNtAuthority, 2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&psidAdministrators);
for(x=0;x<ptgGroups->GroupCount;x++)
{
if( EqualSid(psidAdministrators, ptgGroups->Groups[x].Sid) )
{
FreeSid(&psidAdministrators);
return( TRUE );
}
- 203 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
}
FreeSid(&psidAdministrators);
return(FALSE);
}
Attention :
Cette fonction déclenche une fenêtre CPU lors de l'éxécution de la ligne de libération de la structure de type SID, en
mode debug. Ce problème n'intervient pas dans l'exécutable généré.
char path[200];
//récupère le chemin de l'image utilisée comme papier peint
if(SystemParametersInfo( SPI_GETDESKWALLPAPER,
200,
path,
0) == TRUE)
{
AnsiString Chemin;
float i=0;
//garde la proportion de l'écran pour l'affichage de l'image
Image1->Picture->LoadFromFile(path);
i = (float)Screen->Height/(float)Screen->Width;
Image1->Height = i * Image1->Width;
}
if(OpenDialog1->Execute())
{
Image1->Picture->LoadFromFile(OpenDialog1->FileName);
Image1->Canvas->TextOutA(10,10,"modif de l'image par Builder");
Image1->Picture->SaveToFile(OpenDialog1->FileName);
if(SystemParametersInfo( SPI_SETDESKWALLPAPER,
OpenDialog1->FileName.Length(),
OpenDialog1->FileName.c_str(),
WM_SETTINGCHANGE) != TRUE)
{
Button2->Caption = "Erreur";
}
}
- 204 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
try {
DBGrid1->DataSource->DataSet->DisableControls();
for(int i=0;i<DBGrid1->SelectedRows->Count;i++)
{
// tests, modification, suppression, etc...
}
} finally {
DBGrid1->DataSource->DataSet->EnableControls();
}
- 205 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
lien : BDEInfoSetup
Le paramètre de DbiInit permet de définir certains paramètres comme le fichier de configuration et le répertoire de
travail du BDE. En lui passant NULL, ce sont des valeurs par défaut qui sont utilisées.
- 206 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Remarque : Il est important d'avoir une session (TSession) et de l'ouvrir pour interroger le BDE.
Pour avoir dans la liste les alias créés localement (dans la session), il suffit de définir la propriété ConfigMode à cmAll.
Session1->Open();
Session1->AddAlias("MonIBAlias", "INTRBASE", liste);
Session1->SaveConfigFile();
Session1->Close();
delete liste;
}
- 207 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Il existe un set de 3 valeurs, décrites dans l'aide, qui sont les suivantes :
• cfmVirtual
• cfmPersistent
• cfmSession
Ainsi, si ConfigMode ne contient que cfmSession, la session ne pourra voir que les alias qu'elle crée en mémoire, et les
autres sessions n'auront pas la possibilité d'accéder à ces alias. De plus, l'enregistrement des alias n'a dès lors aucun
sens : l'appel de la méthode SaveConfigFile sera sans effet.
Si la propriété ne contient que Virtual, on obtiendra les entrées ODBC définies au niveau de Windows (Administrateur
ODBC).
Enfin, si elle ne contient que Persistant, on obtiendra les entrées ODBC définies au niveau du BDE (Administrateur
BDE).
La valeur cmAll correspond à la combinaison des 3 listées précédemment et rend donc l'accès à l'ensemble des alias, et
même entre sessions différentes. C'est également la valeur par défaut de ConfigMode.
Quelques exemples :
- 208 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Exemple:
#include <SysUtils.hpp>
------------------------------------------------------------------------------
AnsiString Requete = "UPDATE MATABLE SET DESCRIPTION=";
Requete+= QuotedStr("L'adresse de l'intervention");
//Exécution de la requête...
- 209 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
try
{
ADOConnection1->ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Mode=ReadWrite;Extended Prope
+ (AnsiString)strDir + ";DefaultDir=" + (AnsiString)strDir
ADOConnection1->Open();
}
catch(Exception &exception)
{
MessageBox(Handle,"ERREUR Impossible d'ouvrir la Base de Donnée !!",
"Avertissement",MB_OK|MB_ICONSTOP ) ;
return;
}
Il est aussi possible de se connecter en faisant "clic droit sur le composant ADOConnection" puis -> "Modifier la chaîne
de connexion".
Comment créer une table dans une base Access avec ADO ?
Auteurs : virtuA ,
Pour créer une table il suffit de passer par une requête SQL.
Il faut placer le Composant ADOQuery sur la fiche désirée (l'utilisation de ce code sous-entend que la connexion avec
la base Access est établie).
La table "MATABLE" avec les champs "MONCHAMP1" (qui est un entier) et "MONCHAMP2" qui est une chaîne,
est alors créée.
- 210 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Form1->ADOTable1->FieldByName("MONCHAMP1")->Value = 5;
Form1->ADOTable1->FieldByName("MONCHAMP2")->Value = "VALEUR";
// Valide l'édition dans la base de données
Form1->ADOTable1->Post();
- 211 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
IBDatabase->DatabaseName = "127.0.0.1:C:\\data.gdb";
IBDatabase->SQLDialect = 3;
IBDatabase->Params->Clear();
IBDatabase->Params->Add("USER \"SYSDBA\"");
IBDatabase->Params->Add("PASSWORD \"masterkey\"");
IBDatabase->Params->Add("PAGE_SIZE 4096");
IBDatabase->LoginPrompt = true;
IBDatabase->CreateDatabase();
IBDatabase->Connected = true;
IBTransaction->DefaultDatabase = IBDatabase;
IBQuery->Database = IBDatabase;
IBQuery->Transaction = IBTransaction;
IBQuery servira ensuite pour créer les tables et autres éléments via les requêtes SQL.
- 212 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
BOOL fCreated;
fCreated = SQLConfigDataSource(NULL,
ODBC_ADD_DSN,
"Microsoft Access Driver (*.mdb)",
"CREATE_DB=C:\\Test.mdb General\0" );
Comment ouvrir une base de données Access vide sous OleADO sans Access ?
Auteurs : blondelle , virtuA , NoisetteProd ,
Variant vADO;
AnsiString Filename = "C:\\Documents and Settings\\blondelle\\Mes documents\\MySQL\\maBdd2.mdb";
AnsiString provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +Filename+";";
if (FileExists(Filename.c_str()))
{
MessageBox(Handle,"Ce fichier existe déja!" ,"ATTENTION",MB_OK|MB_ICONWARNING ) ;
vADO = Unassigned;
return;
}
vADO = Variant::CreateObject("ADOX.Catalog");
vADO.OleFunction("create", provider.c_str());
// on termine
vADO = Unassigned;
Variant v=Variant::CreateObject("JRO.JetEngine");
v.OleFunction("CompactDatabase", Provider1.c_str(), Provider2.c_str());
- 213 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
v = Unassigned;
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
AnsiString Base1="C:\\Documents and Settings\\Fernand Bartolo\\Dev\\Testxxxxxx\\Iris.mdb";
AnsiString psw1="";
if (FileExists(Base2))
DeleteFile(Base2);
CompactDatabase(Base1,psw1,Base2,psw2);
ShowMessage("OK!!");
}
- 214 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 215 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
La méthode OleCheck, appelée par GetActiveOleObject, déclenche une exception EOleSysError si aucun objet de la
classe spécifiée n'existe.
- 216 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
#include <utilcls.h>
lien : Comment fonctionne le pilotage OLE d'Excel avec Borland C++ Builder ?
Quel est l'équivalent de NULL pour les paramètres facultatifs en pilotage OLE ?
Auteurs : Ricky81 ,
Les paramètres facultatifs doivent être passés comme des Variants Unassigned.
Tout Variant est initialisé à Unassigned lorsqu'il est déclaré, et l'affectation de Unassigned à un Variant permet de
libérer la mémoire occupée.
Exemple :
- 217 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Pourquoi ai-je une erreur lorsque je passe un AnsiString comme paramètre dans un appel OLE ?
Auteurs : Ricky81 ,
Le pilotage OLE repose sur le type Variant, or le type AnsiString n'est pas supporté par le Variant. Vous pouvez par
exemple passer le pointeur sur votre AnsiString grâce à la méthode c_str()ou effectuer la conversion.
- 218 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
lien : Comment fonctionne le pilotage OLE d'Excel avec Borland C++ Builder ?
- 219 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vMSExcel;
vMSExcel = Variant::GetActiveObject("Excel.Application");
Variant vMSExcel;
vMSExcel = Variant::CreateObject("Excel.Application");
vMSExcel.OleFunction("Quit");
- 220 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > MS Office > Excel > Gestion de l'application > Paramétrage de l'application
Comment faire pour que mon application Excel ne soit pas visible par l'utilisateur ?
Auteurs : Ricky81 ,
A partir d'un Variant représentant l'instance d'Excel, nous allons définir la propriété Visible.
vMSExcel.OlePropertySet("Visible", false);
vMSExcel.OlePropertySet("Interactive", false);
vMSExcel.OlePropertySet("ScreenUpdating", false);
vMSExcel.OlePropertySet("ReferenceStyle", vReferenceStyle);
vReferenceStyle est une constante à choisir dans la classe XlReferenceStyle dont voici les valeurs :
xlA1 = 1
xlR1C1 = -4150
- 221 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Remarque : attention aux formules par exemple (elles sont modifiées lors de changement, mais il faut respecter le style
en cours lors de leur définition).
vMSExcel.OlePropertySet("Calculation", vValue);
Le Variant vValue doit avoir une valeur définie dans la classe XlCalculation dont voici les constantes :
xlCalculationAutomatic = -4105
xlCalculationManual = -4135
xlCalculationSemiautomatic = 2
Les 3 possibilités permettent respectivement de définir le recalcul automatique après toute modification, le recalcul
fait uniquement à la demande de l'utilisateur, et un mode intermédiaire dit semi-automatique où le recalcul se fait par
exemple lorsque le classeur est enregistré.
Remarque : il est intéressant, pour des raisons de performances, de désactiver le recalcul automatique le temps des
traitements.
Attention : pour pouvoir agir sur cette propriété, il est nécessaire d'avoir un classeur présent dans l'application.
lien : Comment lancer la recalculation lorsque celle ci n'est pas faite automatiquement ?
lien : Comment créer une nouvelle instance d'Excel ?
lien : Comment récupérer l'instance active d'Excel ?
Comment savoir quel est le répertoire par défaut lorsqu'on demande l'ouverture d'un fichier ?
Auteurs : Superstivix ,
A partir d'un Variant représentant l'instance d'Excel, nous allons définir la propriété DefaultFilePath.
AnsiString defFilePath;
defFilePath = vMSExcel.OlePropertyGet("DefaultFilePath");
Variant vPrinter;
- 222 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vPrinter = vMSExcel->OlePropertyGet("ActivePrinter");
vMSExcel.OlePropertySet("DisplayAlerts", false);
vMSExcel.OlePropertySet("DisplayFullScreen", true);
Attention à ne pas oublier de remettre le mode plein écran à sa valeur d'origine avant de fermer l'instance d'Excel.
Dans le cas contraire, la fenêtre sera toujours en plein écran à la prochaine ouverture d'Excel.
Variant vLSettings;
vLSettings = vMSExcel.OlePropertyGet("LanguageSettings");
int LanguageID = vLSettings.OlePropertyGet("LanguageID", vType);
Les valeurs pour le paramètre vType sont à choisir parmi les constantes de la classe MsoAppLanguageID :
msoLanguageIDExeMode = 4
msoLanguageIDHelp = 3
msoLanguageIDInstall = 1
- 223 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
msoLanguageIDUI = 2
msoLanguageIDUIPrevious = 5
L'entier obtenu en retour peut s'interpréter en consultant les constantes de la classe MsoLanguageID d'Excel.
Si vous souhaitez désactiver le second élément du menu 'Outils', vous utiliserez le code suivant :
Variant vSousElement;
vSousElement = Element.OlePropertyGet("Controls", 2);
vSousElement.OlePropertySet("Enabled", false);
vMSExcel.OlePropertySet("DecimalSeparator", vText);
vMSExcel.OlePropertySet("UseSystemSeparators", false);
La première ligne permet de spécifier la valeur que l'on veut pour nouveau séparateur décimal.
La seconde ligne désactive l'utilisation des séparateurs systèmes.
- 224 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSExcel.OlePropertySet("ThousandsSeparator", vText);
vMSExcel.OlePropertySet("UseSystemSeparators", false);
La première ligne permet de spécifier la valeur que l'on veut pour nouveau séparateur de milliers.
La seconde ligne désactive l'utilisation des séparateurs systèmes.
- 225 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > MS Office > Excel > Gestion de l'application > Recours aux fonctionnalités
Comment utiliser les fonctions intégrées d'Excel ?
Auteurs : Ricky81 ,
Cela se fait en 2 étapes : on récupère d'abord un Variant correspondant aux fonctions intégrées, puis on appelle une
fonction particulière.
Nous partons bien entendu d'un Variant représentant notre instance d'Excel.
Variant vSheetFunction;
vSheetFunction = vMSExcel.OlePropertyGet("WorksheetFunction");
int res = vSheetFunction.OleFunction("Max", 3, 4);
ExcelApplication1->Connect();
Variant file;
Variant title = StringToOleStr("Titre"); // titre à donner à la boite de dialogue
Variant multiselect = true; // selection multiple autorisée
file = ExcelApplication1->GetOpenFilename(EmptyParam, EmptyParam, title, EmptyParam,
multiselect, 0);
Le résultat est un Variant, mais il est nécessaire de faire la distinction pour le mode de sélection multiple. En effet, dans
ce cas, c'est un Variant de type tableau qui est renvoyé (même si un seul fichier est finalement sélectionné), lequel doit
être traité différemment. Dans le cas où c'est le bouton Annuler qui a été cliqué, un Variant simple ayant pour valeur
"False" est renvoyé.
if(file.IsArray())
{
for(int i=1 ; i<=file.ArrayHighBound(1) ; i++)
{
ShowMessage(file.GetElement(i));
}
}
else
{
ShowMessage(file);
}
- 226 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Attention : Comme le composant TOpenDialog, cette boite de dialogue n'effectue aucune opération d'ouverture. Elle
permet juste de sélectionner un ou plusieurs fichiers.
lien : Comment obtenir un nom de fichier avec la boite de dialogue enregistrer sous d'Excel ?
lien : Comment utiliser une boite de saisie Excel ?
Comment obtenir un nom de fichier avec la boite de dialogue enregistrer sous d'Excel ?
Auteurs : Bidou , Ricky81 ,
Cela n'est pas possible en pilotage OLE Excel (impossible de récupérer l'ensemble sélectionné car l'appel se fait par
une 'OleProcedure' qui par définition ne renvoie pas de résultat). Nous sommes obligés de passer par le composant
TExcelApplication :
ExcelApplication1->Connect();
Variant file;
Variant initFile = StringToOleStr("E:\\Ricky\\classeur.xls"); // fichier sélectionné au départ
Variant title = StringToOleStr("Titre"); // titre de la boite de dialogue
file = ExcelApplication1->GetSaveAsFilename(initFile, EmptyParam, EmptyParam, title, EmptyParam, 0);
Le résultat est un Variant valant en particulier "False" dans le cas d'un recours au bouton Annuler.
Attention : Comme le composant TSaveDialog, cette boite de dialogue n'effectue aucune opération de sauvegarde. Elle
permet juste de sélectionner un nom de fichier.
lien : Comment obtenir un nom de fichier avec la boite de dialogue ouvrir d'Excel ?
lien : Comment utiliser une boite de saisie Excel ?
ExcelApplication1->Connect();
Variant prompt = StringToOleStr("Texte"); // texte de la boite de saisie
Variant title = StringToOleStr("Titre"); // titre de la boite de saisie
Variant def = StringToOleStr("def"); // valeur par défaut
// positionnement
Variant left = 50;
Variant top = 100;
Variant answer;
answer = ExcelApplication1->InputBox(prompt, title, def, left, top, EmptyParam, EmptyParam,
EmptyParam, 0);
lien : Comment obtenir un nom de fichier avec la boite de dialogue ouvrir d'Excel ?
- 227 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
lien : Comment obtenir un nom de fichier avec la boite de dialogue enregistrer sous d'Excel ?
vMSExcel.OleProcedure("Calculate");
vWorkbook.OleProcedure("Activate");
vMSExcel.OlePropertySet("WindowState", vValue);
La valeur vValue est à choisir parmi les constantes suivantes appartenant à la classe XlWindowState
xlMaximized = -4137
xlMinimized = -4140
- 228 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
xlNormal = -4143
- 229 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > MS Office > Excel > Gestion de l'application > Fonctionnalités d'impression
Comment imprimer une feuille avec les options par défaut sans intervention utilisateur ?
Auteurs : Ricky81 ,
Nous allons travailler sur la feuille en question, matérialisée par le Variant vWorksheet.
vWorksheet.OleProcedure("PrintOut");
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("Zoom", vValue);
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("Orientation", vValue);
- 230 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("Order", vOrder);
Les valeurs possibles pour vOrder sont définies dans la classe XlOrder :
xlDownThenOver = 1
xlOverThenDown = 2
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("TopMargin", vValue);
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("LeftMargin", vValue);
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("RightMargin", vValue);
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("BottomMargin", vValue);
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("HeaderMargin", vValue);
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("FooterMargin", vValue);
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("CenterHeader", vText);
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("LeftHeader", vText);
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("RightHeader", vText);
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("CenterFooter", vText);
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("LeftFooter", vText);
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("RightFooter", vText);
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("CenterHorizontally", true);
- 231 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("CenterVertically", true);
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("PaperSize", vFormat);
Les valeurs possibles pour vFormat sont définies dans la classe XlPaperSize.
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("PrintGridlines", true);
Comment faire pour inclure les titres de colonnes et/ou de lignes à l'impression ?
Auteurs : Superstivix ,
Il faut agir sur l'objet PageSetup et sur ses propriétés PrintTitleRows et PrintTitleColumns.
Ces propriétés doivent être initialisées avec l'adresse d'une plage de valeurs définissant les lignes/colonnes à considérer.
Partant d'un Variant (vWorksheet) représentant une feuille, nous allons par exemple travailler sur un Variant vRange
correspondant à une plage de cellules.
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("PrintTitleRows",
vRange.OlePropertyGet("Address"));
Pour inclure les 2 premières colonnes, vous pourrez par exemple utiliser le code suivant :
vWorksheet.OlePropertyGet("PageSetup").OlePropertySet("PrintTitleColumns", "A1:B1");
vMSExcel.OlePropertyGet("ActiveWindow").OlePropertyGet("SelectedSheets").OleFunction("PrintPreview");
- 232 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSExcel.OlePropertySet("SheetsInNewWorkbook", nbSheets);
Variant vXLWorkbooks;
vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
Il est nécessaire de passer par cet objet même s'il n'y a pas de classeurs, par exemple pour ouvrir un classeur.
Variant vWorkbook;
// vXLWorkbooks représente l'ensemble des classeurs
// vFileName est un Variant sous la forme chaîne de caractères correspondant au fichier à ouvrir
vXLWorkbook =
vXLWorkbooks.OleFunction("Open",vFileName); // on récupère un Variant correspondant au classeur ajouté
- 233 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vWorkbook;
// vXLWorkbooks représente l'ensemble des classeurs
// vFileName est un Variant sous la forme chaîne de caractères correspondant au fichier à ouvrir
vWorkbook = vWorkbooks.OleFunction("Open", vFileName, Unassigned, Unassigned, vSeparator);
// vSeparator = valeur du séparateur
Variant vWorkbook;
// vXLWorkbooks représente l'ensemble des classeurs
vWorkbook = vWorkbooks.OleFunction("Open", vFileName, Unassigned, Unassigned, Unassigned, vPwd);
// vFileName est un Variant sous la forme chaîne de caractères correspondant au fichier à ouvrir
// vPwd = mot de passe
- 234 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vXLWorkbook;
// vXLWorkbooks représente l'ensemble des classeurs
vXLWorkbook =
vXLWorkbooks.OleFunction("Add"); // on récupère un Variant correspondant au classeur ajouté
Il est à noter que même si vous n'avez pas encore de classeur ouvert, vous devez nécessairement passer par l'objet
vXLWorkbook.
vXLWorkbook.OleProcedure("Save");
FileFormat peut prendre différentes valeurs suivant le format de sauvegarde désiré, ce qui
permet de charger un fichier sous un format et de le sauvegarder sous un autre format
- 235 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vXLWorkbook.OleFunction("Close");
Voici une seconde version qui permet de préciser si les modifications non enregistrées doivent être intégrées ou non.
vXLWorkbook.OleFunction("Close",
vSaveChanges); // vSaveChanges est un booléen (ou un Variant contenant true ou false)
Cette dernière version permet l'enregistrement dans un nouveau fichier (les modifications ne sont pas répercutées dans
le fichier en cours). Le nouveau fichier est créé (ou écrasé) uniquement si le fichier en cours a été modifié depuis la
dernière sauvegarde.
Malheureusement il n'est possible que de passer un entier en paramètre. Vous pourrez par exemple tester la propriété
Name des classeurs pour trouver le classeur recherché. Voici un exemple :
- 236 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
{
...
}
Le premier booléen indique que la protection doit être activée pour la structure du classeur, alors que le second concerne
les feuilles.
vWorkbook.OleProcedure("UnProtect", "motdepasse");
vXLWorkbook.OlePropertySet("Date1904", true);
- 237 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vWorksheets;
// vXLWorkbook est de type Variant
vWorksheets = vXLWorkbook.OlePropertyGet("Worksheets");
Variant vWorksheet;
// vXLWorkbook est de type Variant
vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", vWsName);
// vWsName est un Variant initialisé au nom de la feuille
Variant vWorksheet;
// vXLWorkbook est de type Variant
vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", vWsPos);
// vWsName est un Variant initialisé à la position (commence à 1)
Variant vWorksheet;
vWorksheet = vWorksheets.OleProdedure("Add");
- 238 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Excel donnera pour nom FeuilI (cas de la version française) où I est le plus petit nombre tel que FeuilI n'existe pas
encore. La feuille sera placée en première position.
// vSheet est un Variant correspondant à la feuille avant laquelle notre feuille doit être plaçée
vWorksheet.OleProcedure("Move", vSheet);
Exemple :
- 239 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vWorksheet.OleProcedure("UnProtect", "motdepasse");
vWorksheet.OleFunction("Delete");
Comment créer une nouvelle feuille (nouveau classeur) à partir d'une feuille d'un classeur (copie) ?
Auteurs : Ricky81 ,
Il nous faut travailler au niveau d'une feuille, par exemple définie par le Variant vWorksheet.
vWorksheet.OleFunction("Copy");
// la feuille que l'on souhaite précéder est représentée par le Variant vSheetBefore
vWorksheet.OleFunction("Copy", vSheetBefore);
vUsedRange = vWorksheet.OlePropertyGet("UsedRange");
- 240 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vLines;
vLines = vUsedRange.OlePropertyGet("Rows");
int i = vLines.OlePropertyGet("Count");
ou le nombre de colonnes :
Variant vCols;
vCols = vUsedRange.OlePropertyGet("Columns");
int i = vCols.OlePropertyGet("Count");
lien : Comment accéder à une cellule définie au format Excel (ex. A1 ou L1C1) ?
lien : Comment récupérer toutes les cellules d'une feuille ?
bool insertPermis;
// vWorksheet est de type Variant
- 241 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
insertPermis = vWorksheet.OlePropertyGet("Protection").OlePropertyGet("AllowInsertingHyperlinks");
Variant vLine;
vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1);
// pour les donnees (1, 1, 200, 100) il faut lire X, Y, X1, Y1
// X, Y point de depart de la ligne X1, Y1 point d'arrivee de la ligne
vLine = vWorksheet.OlePropertyGet("Shapes").OleFunction("AddLine", 1, 1, 200,100);
vLine.OlePropertyGet("Line").OlePropertySet("Weight", 8); // epaisseur de la ligne
vLine.OlePropertyGet("Line").OlePropertyGet("ForeColor").OlePropertySet("SchemeColor", 22); // couleur de la lig
vLine.OlePropertyGet("Line").OlePropertySet("Visible", false);
vLine.OlePropertyGet("Line").OlePropertySet("Visible", true);
- 242 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vRange.OleProcedure("Select");
// soit on fige soit on libere les volets
vMSExcel.OlePropertyGet("ActiveWindow").OlePropertySet("FreezePanes", true);
// pour liberer les volets remplacer "true" par "false"
// on active le classeur 1
vXLWorkbook =
vMSExcel.OlePropertyGet("Workbooks", 1); // ici on peut remplacer "1" par le nom du classeur "mon_classeur"
- 243 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vXLWorkbook.OleProcedure("Activate");
// on deselectionne la feuille
vWorksheet.OleProcedure("Select");
vWorksheet.OlePropertyGet("Range", "A1").OleProcedure("Select");
- 244 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vCells;
vCells = vWorksheet.OlePropertyGet("Cells");
lien : Comment déterminer la zone utile ou le nombre de lignes/colonnes utiles dans ma feuille ?
Variant vCell;
vCell = vMSExcel.OleFunction("Evaluate", "A1");
Remarque : c'est un raccourci intéressant vous évitant d'avoir à passer par les éléments intermédiaires que sont le
classeur et la feuille.
Attention : n'oubliez pas de tenir compte du format actuel de définition des cellules (A1 ou L1C1).
lien : Comment accéder à une cellule définie au format Excel (ex. A1 ou L1C1) ?
lien : Comment créer une nouvelle instance d'Excel ?
lien : Comment récupérer l'instance active d'Excel ?
lien : Comment définir/changer le mode d'affichage des feuilles (L1C1 ou A1) ?
Variant vCell;
vCell = vRange.OleFunction("Find", "ricky81"); // recherche de la valeur "ricky81"
La fonction renvoie donc la première cellule rencontrée contenant la valeur recherchée. Pour poursuivre la recherche,
il est nécessaire de faire appel à la fonction FindNext à laquelle on passe en paramètre la cellule à partir de laquelle
la recherche doit se faire.
Etant donné que la cellule passée en paramètre contient la valeur recherchée, il n'est pas nécessaire de la déclarer.
- 245 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Attention : lorsque FindNext a fini de parcourir la plage, il reprend au départ. Il est donc nécessaire de mémoriser la
cellule renvoyée par Find pour ne pas avoir une boucle infinie.
Pour insérer :
vCell.OleProcedure("Insert", shift);
Où shift correspond au décalage à effectuer. Il peut prendre les valeurs de la classe XlInsertShiftDirection :
xlShiftDown = -4121
xlShiftToRight = -4161
Pour supprimer :
vCell.OleProcedure("Delete", shift);
Où shift correspond au décalage à effectuer. Il peut prendre les valeurs de la classe XlDeleteShiftDirection :
xlShiftUp = -4162
xlShiftToLeft = -4159
Remarque : ces opérations peuvent bien entendu également être réalisées sur un plage de cellules, et plus
particulièrement une colonne ou une ligne.
- 246 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > MS Office > Excel > Gestion des cellules > Manipulation des cellules
Comment accéder à une cellule définie au format Excel (ex. A1 ou L1C1) ?
Auteurs : Ricky81 ,
Plaçons-nous au niveau de la feuille :
Variant vCell;
vCell = vWorksheet.OlePropertyGet("Range", vWsRange);
// vWsRange contient l'adresse sous forme d'un chaîne de caractères
Selon le format de définition des cellules en cours, pour récupérer la première cellule de votre feuille, vous aurez à
donner la valeur "A1" ou "L1C1" à vWsRange.
Variant vCell;
vCell = vWorksheet.OlePropertyGet("Cells", vX, vY);
lien : Comment accéder à une cellule définie au format Excel (ex. A1 ou L1C1) ?
lien : Comment accéder à un groupe de cellules délimité par 2 cellules ?
Comment accéder à un groupe de cellules défini au format Excel (ex. A1:B2 ou L1C1:L2C2) ?
Auteurs : Ricky81 ,
Plaçons-nous au niveau de la feuille
Variant vRange;
vRange = vWorksheet.OlePropertyGet("Range", vWsRange);
// vWsRange est un Variant contenant la chaîne de caractère correspondant à la plage recherchée
Selon le format de définition des cellules en cours, il faudra donner à vWsRange la valeur "A1:B2" ou "L1C1:L2C2"
pour récupérer les 4 premières cellules de la feuille.
lien : Comment accéder à une cellule définie au format Excel (ex. A1 ou L1C1) ?
lien : Comment accéder à un groupe de cellules délimité par 2 cellules ?
- 247 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vRange;
vRange = vWorksheet.OlePropertyGet("Range", vCell1, vCell2);
// vCell1 et vCell2 sont des Variants définissant chacun une cellule
lien : Comment accéder à un groupe de cellules défini au format Excel (ex. A1:B2 ou L1C1:L2C2) ?
lien : Comment accéder à une cellule à partir de ses coordonnées ?
lien : Comment accéder à une cellule définie au format Excel (ex. A1 ou L1C1) ?
Variant vValue;
vValue = vCell.OlePropertyGet("Value");
lien : Comment accéder à une cellule définie au format Excel (ex. A1 ou L1C1) ?
lien : Comment accéder à une cellule à partir de ses coordonnées ?
lien : Comment définir le contenu d'une cellule ?
lien : Comment récupérer les valeurs d'une plage de cellules dans un Variant ?
Remarque : si une même valeur doit être définie pour plusieurs cellules, l'opération précédente peut également être
appelée sur un Variant définissant un groupe de cellules.
lien : Comment accéder à une cellule définie au format Excel (ex. A1 ou L1C1) ?
lien : Comment accéder à une cellule à partir de ses coordonnées ?
lien : Comment récupérer le contenu d'une cellule ?
vCell.OlePropertySet("Formula", vValue);
// vValue est un Variant contenant la formule, par exemple "=A1+1"
- 248 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Attention, l'écriture de formules peut dépendre de la langue utilisée par Excel.Il existe 2 modes pour les formules : le
mode international (Formula) et le mode local (FormulaLocal). Il peut donc être intéressant d'en tenir compte et de
choisir entre les deux possibilités.
lien : Comment accéder à une cellule définie au format Excel (ex. A1 ou L1C1) ?
lien : Comment accéder à une cellule à partir de ses coordonnées ?
lien : Comment savoir si une formule est présente dans un groupe de cellules ?
bool contientFormule;
contientFormule = vRange.OlePropertyGet("HasFormula");
Si au moins une cellule du groupe contient une formule, cette propriété renverra la valeur true. S'il n'y en a aucune,
elle renverra false.
vRange.OleFunction("ClearContents");
Variant vValues;
vValues = vRange.OlePropertyGet("Value");
for(int i=1 ; i<=vValues.ArrayHighBound(1) ; i++)
{
for(int j=1 ; j<=vValues.ArrayHighBound(2) ; j++)
{
ShowMessage(vValues.GetElement(i,j));
}
}
- 249 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Dans le cas d'une plage de cellules, le Variant renvoyé est de type tableau. Le tableau est à 2 dimensions et le code
précédent permet de le parcourir.
Variant vCol;
vCol = vWorksheet.OlePropertyGet("Columns", vWsCol); // vWsCol correspond à l'indice de colonne
Variant vRow;
vRow = vWorksheet.OlePropertyGet("Rows",vWsRow); // vWsRow correspond à l'indice de ligne
- 250 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > MS Office > Excel > Gestion des cellules > Mise en forme des cellules
Comment masquer une ligne/colonne ?
Auteurs : Ricky81 ,
Agissons au niveau du Variant correspondant à la ligne ou la colonne en question.
Prenons l'exemple d'une colonne :
vCol.OlePropertySet("Hidden", true);
vRange.OleProcedure("Merge");
lien : Comment accéder à un groupe de cellules défini au format Excel (ex. A1:B2 ou L1C1:L2C2) ?
lien : Comment accéder à un groupe de cellules délimité par 2 cellules ?
lien : Comment dissocier des cellules ?
vCell.OleProcedure("UnMerge");
lien : Comment accéder à une cellule définie au format Excel (ex. A1 ou L1C1) ?
lien : Comment accéder à une cellule à partir de ses coordonnées ?
lien : Comment fusionner des cellules ?
- 251 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 252 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > MS Office > Excel > Gestion des cellules > Mise en forme des cellules > Contenu des
cellules
Comment récupérer un objet contenant les informations sur la police de caractères ?
Auteurs : Ricky81 ,
La police de caractères peut être récupérée, et par la suite traitée, que ce soit pour une cellule précise ou un groupe
de cellules.
Prenons l'exemple d'un groupe de cellules défini par le Variant vRange
Variant vFont;
vFont = vRange.OlePropertyGet("Font");
vFont.OlePropertySet("Bold", true);
Bien entendu, pour désactiver la mise en gras, il suffit de passer pour second paramètre le booléen false ou un booléen/
Variant initialisé à false.
lien : Comment récupérer un objet contenant les informations sur la police de caractères ?
lien : Comment mettre la police de caractères en italique ?
lien : Comment mettre la police de caractères en souligné ?
lien : Comment définir la taille de la police de caractères ?
lien : Comment modifier le type/nom de la police de caractères ?
lien : Comment modifier la couleur de la police de caractères ?
vFont.OlePropertySet("Italic", true);
- 253 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Bien entendu, pour désactiver la mise en italique, il suffit de passer pour second paramètre le booléen false ou un
booléen/Variant initialisé à false.
lien : Comment récupérer un objet contenant les informations sur la police de caractères ?
lien : Comment mettre la police de caractères en gras ?
lien : Comment mettre la police de caractères en souligné ?
lien : Comment définir la taille de la police de caractères ?
lien : Comment modifier le type/nom de la police de caractères ?
lien : Comment modifier la couleur de la police de caractères ?
vFont.OlePropertySet("Underline", true);
Bien entendu, pour désactiver le soulignement, il suffit de passer pour second paramètre le booléen false ou un booléen/
Variant initialisé à false.
lien : Comment récupérer un objet contenant les informations sur la police de caractères ?
lien : Comment mettre la police de caractères en gras ?
lien : Comment mettre la police de caractères en italique ?
lien : Comment définir la taille de la police de caractères ?
lien : Comment modifier le type/nom de la police de caractères ?
lien : Comment modifier la couleur de la police de caractères ?
vFont.OlePropertySet("Size", true);
Variant vSize;
vSize = vFont.OlePropertyGet("Size");
lien : Comment récupérer un objet contenant les informations sur la police de caractères ?
lien : Comment mettre la police de caractères en gras ?
lien : Comment mettre la police de caractères en italique ?
lien : Comment mettre la police de caractères en souligné ?
lien : Comment modifier le type/nom de la police de caractères ?
- 254 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vFont.OlePropertySet("Name", vName);
// vName contient une chaîne de caractères définissant la nouvelle police, par exemple vName="Arial"
Bien entendu, pour désactiver la mise en gras, il suffit de passer pour second paramètre le booléen false ou un booléen/
Variant initialisé à false.
lien : Comment récupérer un objet contenant les informations sur la police de caractères ?
lien : Comment mettre la police de caractères en gras ?
lien : Comment mettre la police de caractères en italique ?
lien : Comment mettre la police de caractères en souligné ?
lien : Comment définir la taille de la police de caractères ?
lien : Comment modifier la couleur de la police de caractères ?
vValue peut par exemple être un entier codant la couleur dont la représentation hexadécimale est bbggrr.
lien : Comment récupérer un objet contenant les informations sur la police de caractères ?
lien : Comment mettre la police de caractères en gras ?
lien : Comment mettre la police de caractères en italique ?
lien : Comment mettre la police de caractères en souligné ?
lien : Comment définir la taille de la police de caractères ?
lien : Comment modifier le type/nom de la police de caractères ?
vRange.OlePropertySet("HorizontalAlignment", vValue);
- 255 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vRange.OlePropertySet("VerticalAlignment", vValue);
La valeur de vValue est un entier dont les valeurs possibles sont les suivantes (définies dans la classe Constants d'Excel).
xlCenter = -4108
xlJustify = -4130
xlLeft = -4131
xlRight = -4152
lien : Comment accéder à une cellule définie au format Excel (ex. A1 ou L1C1) ?
lien : Comment accéder à une cellule à partir de ses coordonnées ?
Comment définir le format des données pour une cellule ou un groupe de cellules ?
Auteurs : Ricky81 ,
Plaçons nous par exemple au niveau d'une cellule définie par le Variant vCel.
vCel.OlePropertySet("NumberFormat", vValue);
Le Variant vValue correspond à une chaîne de caractères définissant le format (par exemple "Standard", "0,00", "@"
pour texte, "jj, mm, aaaa", ...).
Attention : certains formats (par exemple "jj, mm, aaaa") dépendent de la langue utilisée par Excel.
Astuce : Décrivez votre format dans Excel pour une cellule (par exemple la première, puis récupérer le avec le code
suivant) :
ShowMessage(vCell.OlePropertyGet("NumberFormat"));
- 256 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vRange.OlePropertyGet("Comment").OleProcedure("Delete");
- 257 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > MS Office > Excel > Gestion des cellules > Mise en forme des cellules > Taille des cellules
Comment forcer le contenu d'une cellule à s'adapter aux dimensions de celle-ci ?
Auteurs : Ricky81 ,
Plaçons-nous au niveau de la cellule ou du groupe de cellules représenté par le Variant vRange.
vRange.OlePropertySet("ShrinkToFit", true);
vRange.OlePropertySet("WrapText", true);
vCol.OleFunction("Autofit");
vRange.OlePropertySet("Orientation", vAngle);
vAngle est un nombre représentant la valeur en degrés de l'angle à former (sens anti-horaire).
- 258 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > MS Office > Excel > Gestion des cellules > Mise en forme des cellules > Manipulation de
bordures
Comment récupérer le cadre d'une cellule ou d'un groupe de cellules dans un objet ?
Auteurs : Ricky81 ,
Travaillons par exemple sur le Variant vCell correspondant à une cellule.
Variant vBorders;
vBorders = vCell.OlePropertyGet("Borders");
Attention : dans le cas d'un groupe de cellules, les délimitations des cellules entre elles seront comprises dans le résultat.
lien : Comment récupérer une seule partie des bordures d'un encadrement ?
lien : Comment définir le type de bordure pour un encadrement ou une partie d'encadrement ?
lien : Comment définir la couleur d'une bordure ?
lien : Comment définir l'épaisseur d'une bordure ?
Variant vBorder;
vBorder = vBorders.OlePropertyGet("Item",
vValue); // vValue identifie la partie du contour à extraire
Les valeurs possibles pour vValue sont définies dans la classe XlBorderIndex dont voici les constantes :
xlDiagonalDown = 5
xlDiagonalUp = 6
xlEdgeBottom = 9
xlEdgeLeft = 7
xlEdgeRight = 10
xlEdgeTop = 8
xlInsideHorizontal = 12
xlInsideVertical = 11
lien : Comment récupérer le cadre d'une cellule ou d'un groupe de cellules dans un objet ?
lien : Comment définir le type de bordure pour un encadrement ou une partie d'encadrement ?
lien : Comment définir la couleur d'une bordure ?
lien : Comment définir l'épaisseur d'une bordure ?
- 259 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vBorders.OlePropertySet("LineStyle", vValue);
Les valeurs possibles pour vValue sont définies dans la classe XlLineStyle dont voici les constantes :
xlContinuous = 1
xlDash = -4115
xlDashDot = 4
xlDashDotDot = 5
xlDot = -4118
xlDouble = -4119
xlLineStyleNone = -4142
xlSlantDashDot = 13
lien : Comment récupérer le cadre d'une cellule ou d'un groupe de cellules dans un objet ?
lien : Comment récupérer une seule partie des bordures d'un encadrement ?
lien : Comment définir la couleur d'une bordure ?
lien : Comment définir l'épaisseur d'une bordure ?
vBorder.OlePropertySet("Weight", vValue);
Les valeurs possibles pour vValue sont définies dans la classe XlBorderWeight dont voici les constantes :
xlHairline = 1;
xlMedium = -4138;
xlThick = 4;
xlThin = 2;
lien : Comment récupérer le cadre d'une cellule ou d'un groupe de cellules dans un objet ?
lien : Comment récupérer une seule partie des bordures d'un encadrement ?
lien : Comment définir le type de bordure pour un encadrement ou une partie d'encadrement ?
lien : Comment définir la couleur d'une bordure ?
Les valeurs possibles pour vLineStyle sont à rechercher dans la classe XlLineStyle et les valeurs possibles pour
vLineWeight dans la classe XlBorderWeight
- 260 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Remarque : Vous pouvez bien entendu vous limiter aux 2 premiers paramètres si le reste ne vous intéresse pas.
lien : Comment récupérer le cadre d'une cellule ou d'un groupe de cellules dans un objet ?
lien : Comment récupérer une seule partie des bordures d'un encadrement ?
lien : Comment définir le type de bordure pour un encadrement ou une partie d'encadrement ?
lien : Comment définir l'épaisseur d'une bordure ?
vBorder.OlePropertySet("Color", vValue);
vValue peut par exemple être un entier codant la couleur dont la représentation hexadécimale est bbggrr.
lien : Comment récupérer le cadre d'une cellule ou d'un groupe de cellules dans un objet ?
lien : Comment récupérer une seule partie des bordures d'un encadrement ?
lien : Comment définir le type de bordure pour un encadrement ou une partie d'encadrement ?
lien : Comment définir l'épaisseur d'une bordure ?
- 261 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > MS Office > Excel > Gestion des cellules > Plages de sélection
Comment associer un nom à une plage de cellule ?
Auteurs : Ricky81 ,
Travaillons directement sur le Variant représentant une plage de cellules.
vRange.OlePropertySet("Name", "ricky81");
Nous pouvons désormais retrouver notre plage par son nom au niveau du Variant vWorksheet correspondent à la feuille
sur laquelle nous travaillons.
Variant vOtherRange;
vOtherRange = vWorksheet.OlePropertyGet("Range", "ricky81");
Variant vNewRange;
vNewRange = vRange.OlePropertyGet("Resize", rowsize, columnsize);
Les variables rowsize et columnsize sont les tailles attendues pour la nouvelle plage.
Cette plage est obtenue en partant de la cellule supérieure gauche de la plage initiale.
- 262 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vNewRange;
vNewRange = vRange.OleProcedure("Offset", rowoffset, columnoffset);
Les variables rowoffset et columnoffset sont les déplacements attendus par rapport à la plage initiale.
vRange.OleProcedure("Copy", vCell);
// le Variant vCell représente le coin supérieur gauche destination
Union :
Variant vRange;
vRange = vMSExcel.OleFunction("Union", vCell1, vCell2, vCell3);
Intersection :
Remarque : il est possible de rajouter d'autres cellules/groupes de cellules en paramètre, la limite étant fixée à 30
paramètres.
lien : Comment accéder à une cellule définie au format Excel (ex. A1 ou L1C1) ?
lien : Comment accéder à une cellule à partir de ses coordonnées ?
lien : Comment accéder à un groupe de cellules défini au format Excel (ex. A1:B2 ou L1C1:L2C2) ?
lien : Comment accéder à un groupe de cellules délimité par 2 cellules ?
Variant vSelection;
- 263 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vSelection = vRange.OlePropertyGet("Address");
Le Variant vSelection contient alors la chaîne de caractères correspondant à la zone en question. Un exemple de retour
pourrait par exemple être "$A$1:$B$2".
lien : Comment accéder à une cellule définie au format Excel (ex. A1 ou L1C1) ?
lien : Comment accéder à une cellule à partir de ses coordonnées ?
lien : Comment accéder à un groupe de cellules défini au format Excel (ex. A1:B2 ou L1C1:L2C2) ?
lien : Comment accéder à un groupe de cellules délimité par 2 cellules ?
Le code suivant renvoie la plage en cours dans laquelle est l'objet Range. On entend par plage en cours, l'ensemble
des cellules limitées par une combinaison de lignes et de colonnes vides en partant du coin supérieur gauche défini par
la plage.
Variant vRegion;
vRegion = vRange.OlePropertyGet("CurrentRegion");
lien : Comment déterminer la zone utile ou le nombre de lignes/colonnes utiles dans ma feuille ?
Variant vBlankCells;
vBlankCells = vRange.OlePropertyGet("SpecialCells", xlCellTypeBlanks);
Variant vTextCells;
vTextCells = vRange.OlePropertyGet("SpecialCells", xlCellTypeConstants, xlTextValues);
Variant vNumbersCells;
vNumbersCells = vRange.OlePropertyGet("SpecialCells", xlCellTypeConstants, xlNumbers);
- 264 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vFormulaCells;
vFormulaCells = vRange.OlePropertyGet("SpecialCells", xlCellTypeFormulas);
Pour davantage d'éléments, les différentes valeurs possibles pour le second et le troisième paramètre sont respectivement
des constantes des classes XlCellType et XlSpecialCellsValue.
vWorksheet.OleProcedure("Activate");
- 265 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > MS Office > Excel > Gestion des macro Excel
Comment installer, exécuter, puis désinstaller une macro définies dans un fichier ?
Auteurs : blondelle ,
Soit un fichier contenant du code VBE :
Fichier testrows.txt
Sub essai()
Rows("10:11").Select
End sub
Les Variant vMSExcel et vXLWorkbook représentent respectivement une instance de l'application Excel et un classeur.
Il s'agit de manipuler un module VBE et de créer à la volée une macro à partir d'un fichier, puis de la supprimer après
execution.
Attention, le code suivant peut ne pas fonctionner selon votre configuration sécurité d'Excel (cf. Options de sécurité,
sécurité des macros).
Variant VBComp;
// installation du Module
VBComp = vXLWorkbook.OlePropertyGet("VBProject").OlePropertyGet("VBComponents");
VBComp.OleProcedure("Import", "c:\\testrows.txt");
// execution de la macro
vMSExcel.OleProcedure("Run", "essai");
// destruction de la macro
VBComp.OleFunction("Remove", VBComp.OleFunction("Item", "Module1"));
// à partir d'ici il n'y a plus de macro n'y Module
Attention, le code suivant peut ne pas fonctionner selon votre configuration sécurité d'Excel (cf. Options de sécurité,
sécurité des macros).
Variant VBComp;
// on cree un module pour du code VB
VBComp =
vXLWorkbook.OlePropertyGet("VBProject").OlePropertyGet("VBComponents").OleFunction("Add", 1);
vXLWorkbook.OlePropertyGet("VBProject").OlePropertyGet("VBComponents").OleFunction("Remove",
VBComp);
- 266 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Cette façon de faire est plutôt adaptée à l'execution de petites macros, voire de macros dont le code doit être rendu
dynamique (cf. changeant selon certains paramètres saisis dans votre application C++).
vMSExcel.OleProcedure("Run", "monClasseur.xls!MaMacro");
Le code ci-dessus va donc lancer la macro "MaMacro" définie dans le classeur ouvert nommé "monClasseur".
Remarques :
• Les éventuels paramètres de la macro sont à ajouter comme paramètres à la suite du nom de la macro dans l'appel
précédent
• Il vous est bien sûr possible d'appeler une macro définie dans une module en adaptant votre code
("monClasseur.xls!monmodule.MaMacro")
- 267 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 268 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Nous allons manipuler Word dans le cadre de son pilotage OLE, et donc tenter de récupérer l'instance active.
Le Variant vMSWord sera initialisé avec cette valeur et permettra par la suite de manipuler l'ensemble des éléments
propres à Word.
Variant vMSWord;
try
{
vMSWord = Variant::GetActiveObject("Word.Application");
}
catch(...)
{
vMSWord = Variant::CreateObject("Word.Application");
}
vMSWord.OlePropertySet("Visible", true); // ("Visible", false)
- 269 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vFileName;
vFileName = "c:\\book1.doc";
vWDocument.OleProcedure("Saveas", vFileName);
vWDocument.OleProcedure("Save");
Variant vMSWord;
vWDocuments.OleFunction("Close");
// on libere les Variants
vMSWord = Unassigned;
Variant vMSWord;
vMSWord.OleFunction("Quit");
// on libere les Variants
- 270 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSWord = Unassigned;
vWDocument.OleProcedure("PrintOut");
vMSWord.OleProcedure("PrintOut");
Procedure ImprimerPage
//InstanceDeWord.printout(copies := NbrCopie);
- 271 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vWDocument.OlePropertyGet("ActiveWindow").OlePropertyGet("View").OlePropertySet("Type", 2);
// ou
vWDocument.OlePropertyGet("ActiveWindow").OlePropertyGet("View").OlePropertySet("Type", 3);
Remarque : si on souhaite une entête, il faut chosir le mode 3. Pour les autres modes voir Comment avoir différents
modes d'affichage ?
//wdNormalView:
vWDocument.OlePropertyGet("ActiveWindow").OlePropertyGet("ActivePane").OlePropertyGet("View").
OlePropertySet("Type", 1);
//wdOutlineView:
vWDocument.OlePropertyGet("ActiveWindow").OlePropertyGet("ActivePane").OlePropertyGet("View").
OlePropertySet("Type", 2);
//wdPageView:
vWDocument.OlePropertyGet("ActiveWindow").OlePropertyGet("ActivePane").OlePropertyGet("View").
OlePropertySet("Type", 3);
//wdPrintPreview:
vWDocument.OlePropertyGet("ActiveWindow").OlePropertyGet("ActivePane").OlePropertyGet("View").
OlePropertySet("Type", 4);
//wdPrintPreview:
vWDocument.OlePropertyGet("ActiveWindow").OlePropertyGet("ActivePane").OlePropertyGet("View").
OlePropertySet("Type", 5);
//wdOnlineView:
vWDocument.OlePropertyGet("ActiveWindow").OlePropertyGet("ActivePane").OlePropertyGet("View").
OlePropertySet("Type", 6);
String version_word;
// connaître le numéro de version Word que l'on utilise
version_word = vMSWord.OlePropertyGet("Version");
- 272 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("Size", "18");
// on souligne le texte
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("Underline", 1);
// on retire le soulignement
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("Underline", 0);
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("Italic", "9999998");
- 273 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("Bold", "9999998");
- 274 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > MS Office > Word > Modifier la mise en page du document
Comment insérer un saut de page ?
Auteurs : blondelle , pottiez , firejocker ,
Cette procédure permet d'insérer un saut de page.
vMSWord.OlePropertyGet("Selection").OleProcedure("InsertBreak", 7);
vMSWord.OlePropertyGet("Selection").OlePropertyGet("ParagraphFormat").
OlePropertySet("RightIndent", 28.35);
vMSWord.OlePropertyGet("Selection").OlePropertyGet("ParagraphFormat").
OlePropertySet("LeftIndent", 28.35);
vMSWord.OlePropertyGet("Selection").OlePropertyGet("ParagraphFormat").
OlePropertySet("LineSpacing", 10);
vMSWord.OlePropertyGet("ActiveWindow").OlePropertyGet("ActivePane").OlePropertyGet("View").
- 275 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
OlePropertySet("SeekView", "0");
vWDocument.OlePropertyGet("ActiveWindow").OlePropertyGet("ActivePane").OlePropertyGet("View").
OlePropertySet("SeekView", "10");
vWDocument.OlePropertyGet("ActiveWindow").OlePropertyGet("ActivePane").OlePropertyGet("View").
OlePropertySet("SeekView", "9");
- 276 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
// à gauche
vMSWord.OlePropertyGet("Selection").OlePropertyGet("ParagraphFormat").OlePropertySet("Alignment", "0");
// centré
vMSWord.OlePropertyGet("Selection").OlePropertyGet("ParagraphFormat").OlePropertySet("Alignment", "1");
// à droite
vMSWord.OlePropertyGet("Selection").OlePropertyGet("ParagraphFormat").OlePropertySet("Alignment", "2");
// justifiée
vMSWord.OlePropertyGet("Selection").OlePropertyGet("ParagraphFormat").OlePropertySet("Alignment", "3");
Par exemple ("MoveUp", 5, 1) déplace le curseur vers le haut d'une ligne : ("MoveUp", ligne, count).
Pour un caractère ("MoveLeft", 1, 1) déplace le curseur vers la gauche d'un caractère : ("MoveLeft", caractere, count).
- 277 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSWord.OlePropertyGet("Selection").OleProcedure("Goto", 1, 2, 2);
// wdStory = 6
vMSWord.OlePropertyGet("Selection").OleProcedure("HomeKey", "6");
// wdStory = 6
vMSWord.OlePropertyGet("Selection").OleProcedure("EndKey", "6");
int i;
i = 0;
- 278 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
// wdLine = 5
vMSWord.OlePropertyGet("Selection").OleProcedure("HomeKey", "5");
// wdLine = 5
vMSWord.OlePropertyGet("Selection").OleProcedure("EndKey", "5");
// mode paysage
vWDocument.OlePropertyGet("PageSetup").OlePropertySet("Orientation", "1");
// mode portrait
vWDocument.OlePropertyGet("PageSetup").OlePropertySet("Orientation", "0");
// étiquettes de réexpédition
String Name = "C2160"; // type d'étiquette
String addr = "Dave Edson \r\n123 Skye St. \r\nOur Town \r\nWA 98004"; // adresse du destinataire
Variant AutoText = ""; // par défaut
Variant ExtractAddress = false; // par défaut
- 279 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSWord.OlePropertyGet("MailingLabel").OleFunction("CreateNewDocument", Name.c_str(),
addr.c_str(), WideString(AutoText), ExtractAddress);
// enveloppes
String addr = "Don Funk \r\n123 Skye St. \r\nOur Town \r\nWA 98040"; // destinataire
String AutoText = "";
String retaddr = "Karin Gallagher \r\n123 Main \r\nOther Town \r\nWA 98004"; // expediteur
vWDocuments.OleFunction("Add").OlePropertyGet("Envelope").OleFunction("Insert", false, addr.c_str(),
AutoText.c_str(), false, retaddr.c_str());
vMSWord.OlePropertyGet("ActiveWindow").OlePropertyGet("View").OlePropertySet("Type", 3);
- 280 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Sommaire > MS Office > Word > Insertion de texte venant de composants
Comment insérer du texte provenant d'un TEdit ?
Auteurs : blondelle , pottiez ,
Cette procédure permet d'insérer du texte en provenance d'un TEdit sur le document Word sélectionné.
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText", WideString(Edit1->Text));
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText", WideString(Memo1->Lines->Text));
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText", WideString(ListBox1->Items->Strings[0]));
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText", WideString(ComboBox1->Text));
- 281 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Cette procédure permet d'insérer du texte en provenance d'un TRichEdit sur le document Word sélectionné.
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText", WideString(RichEdit1->Lines->Text));
vWDocument.OlePropertyGet("Tables").OleFunction("Add", vMSWord.OlePropertyGet("Selection").
OlePropertyGet("Range"), cmptRows, cmptColumns, 1, 0);
- 282 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSword = Variant::GetActiveObject("Word.Application");
}
catch(...)
{
vMSword = Variant::CreateObject("Word.Application");
}
// on rend l'application Word visible
vMSword.OlePropertySet("Visible", true);
// on crée une page
vMSword.OlePropertyGet("Documents").OleFunction("Add");
// la nouvelle page est sélectionnée
Variant vSelect = vMSword.OlePropertyGet("Selection");
- 283 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Hyperlinks").
- 284 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
OleProcedure("Add", vMSWord.OlePropertyGet("Selection").OlePropertyGet("Range"),
"c:\\book1.doc");
vMSWord.OlePropertyGet("Selection").OleProcedure("PasteAndFormat", 0);
vMSWord.OlePropertyGet("Selection").OleProcedure("Copy");
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("ColorIndex", 5);
vMSWord.OlePropertyGet("Selection").OleFunction("TypeParagraph");
- 285 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSWord.OlePropertyGet("Selection").OleFunction("WholeStory");
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Fields").
OleFunction("Add", vMSWord.OlePropertyGet("Selection").OlePropertyGet("Range"), 33);
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Fields").
OleFunction("Add", vMSWord.OlePropertyGet("Selection").OlePropertyGet("Range"), 26);
- 286 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Fields").
OleFunction("Add", vMSWord.OlePropertyGet("Selection").OlePropertyGet("Range"), 31);
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Fields").
OleFunction("Add", vMSWord.OlePropertyGet("Selection").OlePropertyGet("Range"), 32);
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Fields").OleProcedure("Update");
Variant vFileName;
// chemin de l'image
vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\Mes images\\
041227165954_31.jpg";
// Voici comment procéder
vMSWord.OlePropertyGet("Selection").OlePropertyGet("InlineShapes").
OleProcedure("AddPicture", vFileName, LinkToFile:=False, SaveWithDocument:=True);
// le code correspondant
vMSWord.OlePropertyGet("Selection").OlePropertyGet("InlineShapes").
OleProcedure("AddPicture", vFileName, false, true);
- 287 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Shape = vMSWord.OlePropertyGet("Selection").OlePropertyGet("InlineShapes").OleFunction("AddPicture",
vFileName, false, true);
Shape.OlePropertySet("LockAspectRatio", true);
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Find").
OleFunction("Execute", "toto", false, true, false, false, false, true, false, false,
"tata", 2, false, false, false, false);
vWDocument.OlePropertyGet("ActiveWindow").OlePropertyGet("ActivePane").OlePropertyGet("View").OlePropertySet("S
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText", "écrire dans l'entête");
vWDocument.OlePropertyGet("ActiveWindow").OlePropertyGet("ActivePane").OlePropertyGet("View").OlePropertySet("Se
vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText", "écrire dans le pied de page");
Comment insérer, soit dans l'entête, soit dans le pied de page, le numéro de page ?
Auteurs : blondelle ,
Cette fonction permet d'ajouter une numérotation automatique dans l'entête ou le pied de page, de positionner cette
numérotation, et de sortir de l'entête ou du pied de page.
vWDocument.OlePropertyGet("ActiveWindow").OlePropertyGet("ActivePane").OlePropertyGet("View").OlePropertySet("S
// ajout de la numérotation de page automatique
- 288 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Fields").OleFunction("Add",
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Range"), 33); // ajout numéro page
// valeur de l'alignement centrer 1, droite 2, gauche 0
vWDocument.OlePropertyGet("ActiveWindow").OlePropertyGet("ActivePane").OlePropertyGet("View").OlePropertySet("S
- 289 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vWDocument.OlePropertyGet("Tables").OleFunction("Add", vMSWord.OlePropertyGet("Selection").
OlePropertyGet("Range"), 2, 6);
vWDocument.OlePropertyGet("Tables").OleFunction("Item", 1).OlePropertyGet("Range").OlePropertyGet("Paragraphs")
Comment sélectionner l'alignement d'une colonne quand le curseur est dans une cellule ?
Auteurs : blondelle , pottiez ,
Cette procédure permet de sélectionner l'alignement d'une colonne,
le curseur étant dans une case de cette colonne à aligner.
- 290 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 291 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Rows").
OleFunction("Item", "3").OleProcedure("SetHeight", 50, 0);
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Columns").
OleFunction("Item", "3").OleProcedure("SetWidth", 18, 0);
- 292 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
// bordure superieure
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Borders").
OleFunction("Item", "-1").OlePropertySet("LineStyle", 8);
// bordure gauche
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Borders").
OleFunction("Item", "-2").OlePropertySet("LineStyle", 8);
// bordure inferieure
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Borders").
OleFunction("Item", "-3").OlePropertySet("LineStyle", 8);
// bordure droite
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Borders").
OleFunction("Item", "-4").OlePropertySet("LineStyle", 8);
// lignes interieures
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Borders").
OleFunction("Item", "-5").OlePropertySet("LineStyle", 8);
// colonnes interieures
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Borders").
OleFunction("Item", "-6").OlePropertySet("LineStyle", 8);
// MiseEnFormeCoteCelluleTableau(Document,NumeroTableau,NumeroDeColonne,NumeroDeLigne,TypeBordure,StyleBord
- 293 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant nblignes;
Variant nbcolonnes;
- 294 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Comment sélectionner des cellules d'un tableau et les fusionner 2ème version ?
Auteurs : blondelle , pottiez ,
Cette procédure permet de selectionner des cellules d'un tableau et de les fusionner (2ème version).
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Rows").
OleFunction("Item", "3").OlePropertyGet("Cells").OlePropertyGet("Shading").
OlePropertySet("BackgroundPatternColorIndex", 9);
- 295 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Rows").
OleFunction("Item", "3").OleProcedure("Delete");
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Columns").
OleFunction("Item", "3").OlePropertyGet("Cells").OlePropertyGet("Shading").
OlePropertySet("BackgroundPatternColorIndex", "9");
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Columns").
OleFunction("Item", "3").OlePropertyGet("Shading").OlePropertySet("Texture", 125);
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Rows").
OlePropertyGet("Shading").OlePropertySet("BackgroundPatternColorIndex", "9");
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Rows").
- 296 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
OlePropertyGet("Shading").OlePropertySet("Texture", 125);
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Rows").
OleFunction("Item", "3").OlePropertyGet("Cells").OlePropertyGet("Shading").
OlePropertySet("BackgroundPatternColorIndex", "9");
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Rows").
OleFunction("Item", "3").OlePropertyGet("Shading").OlePropertySet("Texture", 125);
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Columns").
OleFunction("Item", "3").OleProcedure("Select");
vMSWord.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("Bold", 9999998);
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Rows").
- 297 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
OlePropertyGet("Range").OlePropertySet("Bold", 9999998);
Comment coller une image du presse-papier dans une cellule d'un tableau ?
Auteurs : blondelle , pottiez , firejocker ,
Cette procédure permet de coller une image du presse-papier dans une cellule du tableau.
// cette procédure permet de placer le curseur dans la case souhaitée d'un tableau
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OleFunction("Cell", 2, 3).
OlePropertyGet("Range").OleFunction("select");
- 298 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 299 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vWDocument.OlePropertyGet("Tables").OleFunction("Item", "1").OlePropertyGet("Rows").
OlePropertySet("Alignment", 1);
Comment insérer une formule "somme" dans la cellule de gauche d'une ligne d'un tableau ?
Auteurs : blondelle , pottiez ,
Cette procédure insèrt la formule somme, sur les nombres contenus dans une ligne, dans la cellule de gauche d'un
tableau du document Word sélectionné.
Comment insérer une formule "somme" dans la cellule du bas d'une colonne d'un tableau ?
Auteurs : blondelle ,
Cette procédure insère la formule somme, sur les nombres contenus dans une colonne, dans la cellule du bas d'un
tableau du document Word sélectionné.
- 300 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Comment insérer une formule "somme" dans la cellule du haut d'une colonne d'un tableau ?
Auteurs : blondelle , pottiez ,
Cette procédure insère la formule somme, sur les nombres contenus dans une colonne, dans la cellule du haut d'un
tableau du document Word sélectionné.
Comment insérer une formule "somme" dans la cellule de droite d'une ligne d'un tableau ?
Auteurs : blondelle , pottiez ,
Cette procédure insère la formule somme, sur les nombres contenus dans une ligne, dans la cellule de droite d'un tableau
du document Word sélectionné.
- 301 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSWord = Variant::CreateObject("Word.Application");
Attention, le code suivant peut ne pas fonctionner selon votre configuration sécurité de Word (cf. Options de sécurité,
sécurité des macros).
Variant VBComp;
// on crée un module pour du code VB
VBComp = vWordDoc.OlePropertyGet("VBProject").OlePropertyGet("VBComponents").OleFunction("Add", 1);
// on efface le module
vWordDoc.OlePropertyGet("VBProject").OlePropertyGet("VBComponents").OleFunction("Remove", VBComp);
// ici il n'y a plus aucune trace de notre macro
- 302 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Cette façon de faire est plutôt adaptée à l'exécution de petites macros, voire de macros dont le code doit être rendu
dynamique (c'est à dire changeant selon certains paramètres saisis dans votre application C++).
Cette procédure permet de lancer une macro connaissant son nom ici "laMacro".
vMSWord.OleProcedure("Run", "laMacro");
macro_essai.txt
Sub laMacro()
ActiveDocument.Content.Text = "Coucou"
End Sub
On lance Word, puis on ouvre le document, et on exécute sur le Variant VBComp la procédure d'importation comme
suit :
Appli = Variant::GetActiveObject("Word.Application");
vFileName = "C:\\book1.doc";
WordDocs = Appli.OlePropertyGet("Documents");
WordDoc = WordDocs.OleFunction("Open", vFileName);
VBComp = WordDoc.OlePropertyGet("VBProject").OlePropertyGet("VBComponents");
// on insère un code VB à partir d'un fichier
VBComp.OleProcedure("Import", "C:\\macro_essai.txt");
Attention, le code suivant peut ne pas fonctionner selon votre configuration sécurité de Word (cf. Options de sécurité,
sécurité des macros).
- 303 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
// on supprime la macro
VBComp.OleFunction("Remove", VBComp.OleFunction("Item", "Module1"));
- 304 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 305 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Arguments qu'il est possible de passer a la fonction suivante en fonction des dossiers que l'on ouvrir
3 = éléments supprimés
4 = boite d'envoi
5 = éléments envoyés
6 = boite de réception
9 = calendrier
10 = contacts
11 = boite de dialogue activer journal suivi messages
12 = notes
13 = taches
14 = rappels
15 = rappels
16 = brouillons
- 306 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vEspaceDeNom.OleFunction("Logoff");
vMSOutlook.OleFunction("Quit");
Variant vmyItem;
- 307 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
// piece jointe
chemin = "C:\\Classeur1.xls";
vobjNewMail.OlePropertyGet("Attachments").OleFunction("Add", chemin);
vobjNewMail.OleFunction("Send");
- 308 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 309 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vMSPowerPoint,NameSpace;
try
{
// on récupére l'instance active.
vMSPowerPoint = Variant::GetActiveObject("PowerPoint.Application");
}
catch(...)
{
// sinon on crée une nouvelle instance
vMSPowerPoint = Variant::CreateObject("PowerPoint.Application");
}
// on rend Visible l'instance d'Excel que nous avons défini
vMSPowerPoint.OlePropertySet("Visible", true);
vMSPowerPoint.OleFunction("Quit");
vMSPowerPoint = Unassigned;
Variant vMSPowerPoint;
- 310 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSPowerPoint.OlePropertyGet("ActivePresentation").OleFunction("Save");
vMSPowerPoint.OlePropertyGet("Presentations").OleFunction("Add", true);
String vNom_du_Diaporama =
vMSPowerPoint.OlePropertyGet("ActivePresentation").OlePropertyGet("Name");
vMSPowerPoint.OlePropertyGet("ActivePresentation").OlePropertyGet("Slides").OleFunction("Range", 3).OleFunction
int nb_pages =
vMSPowerPoint.OlePropertyGet("ActivePresentation").OlePropertyGet("Slides").OlePropertyGet("Count");
// parametrage de la visualisation
- 311 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSPowerPoint.OlePropertyGet("ActivePresentation").OlePropertyGet("SlideShowSettings").OlePropertySet("ShowType
vMSPowerPoint.OlePropertyGet("ActivePresentation").OlePropertyGet("SlideShowSettings").OlePropertySet("LoopUnti
vMSPowerPoint.OlePropertyGet("ActivePresentation").OlePropertyGet("SlideShowSettings").OlePropertySet("ShowWith
vMSPowerPoint.OlePropertyGet("ActivePresentation").OlePropertyGet("SlideShowSettings").OlePropertySet("ShowWith
vMSPowerPoint.OlePropertyGet("ActivePresentation").OlePropertyGet("SlideShowSettings").OlePropertySet("RangeTyp
vMSPowerPoint.OlePropertyGet("ActivePresentation").OlePropertyGet("SlideShowSettings").OlePropertySet("AdvanceM
vMSPowerPoint.OlePropertyGet("ActivePresentation").OlePropertyGet("SlideShowSettings").OlePropertyGet("PointerC
(255, 0, 0));
vMSPowerPoint.OlePropertyGet("ActivePresentation").OlePropertyGet("SlideShowSettings").OleFunction("Run");
vMSPowerPoint.OlePropertyGet("ActivePresentation").OlePropertyGet("SlideShowWindow").OlePropertyGet("View").Ole
// ici inserer une temporisation suffisante pour avoir le temps de visualiser les pages
}
vMSPowerPoint.OlePropertyGet("ActivePresentation").OlePropertyGet("SlideShowWindow").OlePropertyGet("View").Ole
vMSPowerPoint.OlePropertyGet("ActiveWindow").OleFunction("Close");
- 312 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 313 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
// fermeture d'Access
// on ferme la base
vMSAccess.OleProcedure("CloseCurrentDatabase");
// on quitte Access
vMSAccess.OleFunction("Quit");
// liberation memoire
vMSAccess = Unassigned;
- 314 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 315 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
6/ Les tests ont été faits avec Windows XP PRO Pack2 et OpenOffice 2.2 (dernière version à ce jour)
7/ un lien sur le site vers des exemples et explications en OOobasic
http://silkyroad.developpez.com/
8/ un lien vers la FAQ Delphi qui a servie de support
http://delphi.developpez.com/faq/?page=openoffice
Variant vOOoOpenOffice;
Variant vOOoDocument;
if (VarIsEmpty(vOOoOpenOffice))
{
vOOoOpenOffice = CreateOleObject("com.sun.star.ServiceManager");
}
2/ Se déconnecter d'OpenOffice.org
Positionner OpenOffice à Unassigned permet de libérer le Variant.
OpenOffice = Unassigned;
boolean vOOoConnect;
vOOoConnect = ! (VarIsEmpty(vOOoOpenOffice) || VarIsNull(vOOoOpenOffice));
- 316 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
{
vOOoOpenOffice = CreateOleObject("com.sun.star.ServiceManager");
}
catch (...)
{
// si on passe ici c'est qu'il y a une erreur
}
if (VarType(vOOoOpenOffice) == varDispatch)
vOOoDesktop = vOOoOpenOffice.OleFunction("createInstance", "com.sun.star.frame.Desktop");
int Bounds[2] = {0,0};
vOOoLoadParams = VarArrayCreate(Bounds, 1, varVariant);
vOOoPropertyValue =
vOOoOpenOffice.OleFunction("Bridge_GetStruct", "com.sun.star.beans.PropertyValue");
vOOoPropertyValue.OlePropertySet("Name", "ReadOnly"); // pour ReadOnly ou pour Hidden
vOOoPropertyValue.OlePropertySet("Value", true);
vOOoLoadParams.PutElement(vOOoPropertyValue, 0);
//ouverture fichier existant
// FilePath = "file://localhost/C:/essai.sxc" -- pour un fichier Calc
//ou
// FilePath = "file:///C:/essai.sxc" -- pour un fichier Calc
AnsiString FileName = "file:///C:/";
// FileName += ExtractFilePath(Application->ExeName);
FileName += "essai.sxc";
FileName = StringReplace(FileName,"<A href="file://\\","/",TReplaceFlags">\
\","/",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase);
Variant vFileName = StringToOleStr(FileName);
vOOoDocument = vOOoDesktop.OleFunction("LoadComponentFromURL",vFileName,"_blank",0,vOOoLoadParams);
- 317 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
try
{
vOOoOpenOffice = CreateOleObject("com.sun.star.ServiceManager");
}
catch (...)
{
// si on passe ici c'est qu'il y a une erreur qu'il faudra traiter
}
if (VarType(vOOoOpenOffice) == varDispatch)
vOOoDesktop = vOOoOpenOffice.OleFunction("createInstance", "com.sun.star.frame.Desktop");
int Bounds[2] = {0,-1};
vOOoLoadParams = VarArrayCreate(Bounds, 1, varVariant);
// ici on ouvre un nouveau document vierge calc
vOOoDocument = vOOoDesktop.OleFunction("LoadComponentFromURL", "private:factory/scalc", "_blank", 0,
vOOoLoadParams);
vOOoDocumentExist = !(VarIsEmpty(vOOoOpenOffice) || VarIsNull(vOOoOpenOffice)); // false
// ici on ferme le document ouvert sans sauvegarde comme décrit dans la FAQ delphi
vOOoDocument.OleFunction("dispose");
vOOoOpenOffice = Unassigned;
// la fermeture brutale
vOOoDesktop.OleFunction("terminate"); //
vOOoDesktop = Unassigned();
- 318 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 319 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vOOoMonClasseur;
int vOOoNombreDeFeuilles;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoNombreDeFeuilles = vOOoMonClasseur.OleFunction("GetCount");
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
// on protège la feuille
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
// ("GetByIndex", 0) donne la feuille ici la 1er feuille
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByIndex", 0);
vOOoMaFeuille.OleFunction("protect", "password");
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
// on déprotège la feuille
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
// ("GetByIndex", 0) donne la feuille ici la 1er feuille
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByIndex", 0);
vOOoMaFeuille.OleFunction("Unprotect", "password");
Boolean vOOoprotect;
- 320 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
// ("GetByIndex", 0) représente la 1er feuille
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByIndex", 0);
// on rend la feuille invisible
vOOoMaFeuille.OlePropertySet("IsVisible", false);
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
// ("GetByIndex", 0) représente la 1er feuille
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByIndex", 0);
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
- 321 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vOOoMonClasseur;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMonClasseur.OleFunction("RemoveByName", "Feuille1");
Variant vOOoMonClasseur;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
// "Feuille1" la feuille que l'on va déplacer
// 3 va placer la feuille trois emplacements plus loin
vOOoMonClasseur.OleFunction("copyByName", "Feuille1", 2);
Variant vOOoMonClasseur;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
// "Feuille1" la feuille que l'on va déplacer
// 3 va positionner la feuille à l'emplacement 3
vOOoMonClasseur.OleFunction("moveByName", "Feuille1", 3);
- 322 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vOOoMonClasseur;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
// "Nom_de_la_Nouvelle_Feuille", nom de la feuille que l'on va créer
// 0 emplacement de la feuille créée
vOOoMonClasseur.OleFunction("InsertNewByName", "Nom_de_la_Nouvelle_Feuille", 0);
Variant vOOoMonClasseur;
String vOOoNomDeLaFeuille;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
// 0 emplacement de la feuille dont on cherche le nom
vOOoNomDeLaFeuille = vOOoMonClasseur.OleFunction("getByIndex", 0).OleFunction("GetName");
Pour modifier le nom qui apparaît dans l'onglet de la feuille il suffit de modifier la propriété Name de la feuille :
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
// ("GetByIndex", 0) 0 represente la 1er feuille
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByIndex", 0);
vOOoMaFeuille.OlePropertySet("Name", "Nouveau_Nom_de_la_Feuille");
- 323 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
int vOOoresult;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoresult = vOOoMaFeuille.OleFunction("getCellByPosition", 0, 0).OleFunction("GetType");
switch (vOOoresult)
{
case 0 :
ShowMessage("Cellule Vide");
return;
case 1 :
ShowMessage("Cellule contenant un Nombre");
return;
case 2 :
ShowMessage("Cellule contenant une chaine de caractère");
return;
case 3 :
ShowMessage("Cellule contenant une formule");
return;
}
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoMaDestination;
Variant vOOoMaPlage;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoMaDestination =
vOOoOpenOffice.OleFunction("Bridge_GetStruct", "com.sun.star.table.CellAddress");
vOOoMaPlage = vOOoOpenOffice.OleFunction("Bridge_GetStruct", "com.sun.star.table.CellRangeAddress");
vOOoMaDestination.OlePropertySet("Sheet", 0);
vOOoMaDestination.OlePropertySet("Column", 5);
vOOoMaDestination.OlePropertySet("Row", 5);
vOOoMaPlage.OlePropertySet("Sheet", 0);
vOOoMaPlage.OlePropertySet("StartColumn", 0);
vOOoMaPlage.OlePropertySet("StartRow", 0);
vOOoMaPlage.OlePropertySet("EndColumn", 1);
vOOoMaPlage.OlePropertySet("EndRow", 1);
- 324 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoMaPlage;
Variant vOOoMaDestination;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoMaDestination =
vOOoOpenOffice.OleFunction("Bridge_GetStruct", "com.sun.star.table.CellAddress");
vOOoMaPlage = vOOoOpenOffice.OleFunction("Bridge_GetStruct", "com.sun.star.table.CellRangeAddress");
vOOoMaDestination.OlePropertySet("Sheet", 0);
vOOoMaDestination.OlePropertySet("Column", 5);
vOOoMaDestination.OlePropertySet("Row", 5);
vOOoMaPlage.OlePropertySet("Sheet", 0);
vOOoMaPlage.OlePropertySet("StartColumn", 0);
vOOoMaPlage.OlePropertySet("StartRow", 0);
vOOoMaPlage.OlePropertySet("EndColumn", 5);
vOOoMaPlage.OlePropertySet("EndRow", 5);
vOOoMaFeuille.OleFunction("moveRange", vOOoMaDestination, vOOoMaPlage);
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
if (vOOoMaFeuille.OleFunction("getCellRangeByName", "A1:B1").OleFunction("Getismerged"))
{
vOOoMaFeuille.OleFunction("getCellRangeByName", "A1:B1").OleFunction("merge", false); // ou false
}
else
{
vOOoMaFeuille.OleFunction("getCellRangeByName", "A1:B1").OleFunction("merge", true); // ou false
}
- 325 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoMaPlage;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoMaPlage = vOOoOpenOffice.OleFunction("Bridge_GetStruct", "com.sun.star.table.CellRangeAddress");
vOOoMaPlage.OlePropertySet("Sheet", 0);
vOOoMaPlage.OlePropertySet("StartColumn", 0);
vOOoMaPlage.OlePropertySet("StartRow", 0);
vOOoMaPlage.OlePropertySet("EndColumn", 5);
vOOoMaPlage.OlePropertySet("EndRow", 5);
vOOoMaFeuille.OleFunction("removeRange", vOOoMaPlage, 1);
Pour effacer simplement des colonnes il existe une autre technique qui ne nécessite pas la création d'une plage de cellules.
Nous allons utiliser la fonction RemoveByIndex(Indexdecolonne, NombredeColonne)
IndexDeColonne : est l'index de la première colonne effacée.
NombreDeColonne : Nombre de Colonnes que vous voulez effacer
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoMesColonnes;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoMesColonnes = vOOoMaFeuille.OleFunction("GetColumns");
vOOoMesColonnes.OleFunction("removeByIndex", 1, 1);
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoMesLignes;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoMesLignes = vOOoMaFeuille.OleFunction("GetRows");
- 326 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vOOoMesLignes.OleFunction("removeByIndex", 1, 1);
Comment insérer des cellules, des lignes, des colonnes dans une feuille OleOpenOffice ?
Auteurs : blondelle , pottiez , Atlantis ,
L'insertion de cellules dans une feuille de calcul se passe en 2 temps.
Dans un premier temps, nous devons définir la plage de cellules que nous voulons insérer à l'aide d'un objet de classe
com.sun.star.table.CellRangeAddress
Ensuite nous allons utiliser la fonction InsertCells(MaPlage, ModeDInsertion)
MaPlage correspond à l'objet dans lequel nous avons défini la plage de cellules
ModeDInsertion définit la manière dont se comporte le contenu des cellules sélectionnées sa valeur peut être :
1 : Déplace la plage de cellules vers le bas
2 : Déplace la plage de cellules vers la droite
3 : Insère des lignes entières
4 : Insère des colonnes entières
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoMaPlage;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoMaPlage = vOOoOpenOffice.OleFunction("Bridge_GetStruct", "com.sun.star.table.CellRangeAddress");
vOOoMaPlage.OlePropertySet("Sheet", 0);
vOOoMaPlage.OlePropertySet("StartColumn", 0);
vOOoMaPlage.OlePropertySet("StartRow", 0);
vOOoMaPlage.OlePropertySet("EndColumn", 5);
vOOoMaPlage.OlePropertySet("EndRow", 5);
vOOoMaFeuille.OleFunction("insertCells", vOOoMaPlage, 1);
Pour insérer simplement des colonnes il existe une autre technique qui ne nécessite pas la création d'une plage de cellules.
Nous allons utiliser la fonction InsertByIndex(IndexDeColonne, NombreDeColonne)
IndexDeColonne : est l'index de la première colonne insérée.
NombreDeColonne : Nombre de Colonnes que vous voulez insérer
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoMesColonnes;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoMesColonnes = vOOoMaFeuille.OleFunction("GetColumns");
vOOoMesColonnes.OleFunction("insertByIndex", 1, 1);
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoMesLignes;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoMesLignes = vOOoMaFeuille.OleFunction("GetRows");
- 327 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vOOoMesLignes.OleFunction("insertByIndex", 1, 1);
Variant vOOoCoreReflection;
Variant vOOoMaPlage;
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoCellule;
int vOOoresult;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoCellule = vOOoMaFeuille.OleFunction("getCellByPosition", 0, 0);
vOOoresult = vOOoCellule.OleFunction("GetValue");
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
int vOOoresult;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
- 328 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
La couleur d'arrière plan est stockée dans la propriété CellBackColor au format RVB (Rouge Vert Bleu) Si la cellule
ne doit pas contenir de couleur de remplissage, la propriété IsCellBackgroundTransparent, doit être basculée à True.
Exemple pour définir la couleur suivante :
- 329 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoCellule;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoCellule = vOOoMaFeuille.OleFunction("getCellByPosition", 0, 0);
vOOoCellule.OleFunction("setPropertyValue", "IsCellBackgroundTransparent", false);
- 330 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 331 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoCellule;
Variant vOOoprotection;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoCellule = vOOoMaFeuille.OleFunction("getCellByPosition", 0, 0);
vOOoprotection = vOOoOpenOffice.OleFunction("Bridge_GetStruct", "com.sun.star.util.CellProtection");
vOOoprotection.OlePropertySet("IsHidden", false);
vOOoprotection.OlePropertySet("IsPrintHidden", true);
vOOoprotection.OlePropertySet("IsLocked", true);
vOOoprotection.OlePropertySet("IsFormulaHidden", true);
vOOoCellule.OleFunction("setPropertyValue", "CellProtection", vOOoprotection);
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoCellule;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoCellule = vOOoMaFeuille.OleFunction("getCellByPosition", 0, 0);
vOOoCellule.OleFunction("SetValue", 123);
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoMaFeuille.OleFunction("getCellByPosition", 0, 0).OleFunction("SetValue", 123);
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoCellule;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
- 332 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoCellule;
Variant vOOoTextCursor;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoCellule = vOOoMaFeuille.OleFunction("getCellByPosition", 0, 0);
vOOoTextCursor = vOOoCellule.OleFunction("createTextCursor");
vOOoCellule.OleProcedure("insertString", vOOoTextCursor, "1er Ligne", false);
vOOoCellule.OleProcedure("insertControlCharacter", vOOoTextCursor, 0, false);
vOOoCellule.OleProcedure("insertString", vOOoTextCursor, "2em Ligne", false);
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoCellule;
Variant vOOoTextCursor;
Variant vOOoHyperlinkObj;
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoCellule = vOOoMaFeuille.OleFunction("getCellByPosition", 0, 0);
vOOoTextCursor = vOOoCellule.OleFunction("createTextCursor");
vOOoHyperlinkObj = vOOoDocument.OleFunction("createInstance", "com.sun.star.text.TextField.URL");
vOOoHyperlinkObj.OleFunction("setPropertyValue", "URL", http://www.developpez.com/");
vOOoHyperlinkObj.OleFunction("setPropertyValue", "Representation", "Visiter Developpez.com");
vOOoCellule.OleFunction("insertTextContent", vOOoTextCursor, vOOoHyperlinkObj, false);
- 333 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 334 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Définit la langue utilisée par le correcteur orthographique pour corriger la partie sélectionnée du texte saisi.
Variant vOOoMonClasseur;
Variant vOOoMaFeuille;
Variant vOOoLocale;
Variant vOOoCellule;
Variant vOOoCoreReflection;
Variant vOOoOpenOffice;
vOOoCoreReflection =
vOOoOpenOffice.OleFunction("createInstance","com.sun.star.reflection.CoreReflection");
vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
vOOoCellule = vOOoMaFeuille.OleFunction("getCellByPosition", 0, 0);
vOOoCellule.OleFunction("setPropertyValue", "CharFontName", "Arial");
vOOoCellule.OleFunction("setPropertyValue", "CharHeight", 10);
vOOoCellule.OleFunction("setPropertyValue", "CharWeight", 150);
vOOoCellule.OleFunction("setPropertyValue", "CharPosture",
vOOoCoreReflection.OleFunction("forName", "com.sun.star.awt.FontSlant").OleFunction("getField", "ITALIC").OleFu
vOOoLocale = vOOoOpenOffice.OleFunction("Bridge_GetStruct", "com.sun.star.lang.Locale");
vOOoLocale.OlePropertySet("Country", "FR");
vOOoLocale.OlePropertySet("Language", "fr");
vOOoLocale.OlePropertySet("Variant", "fr");
vOOoCellule.OleFunction("setPropertyValue","CharLocale", vOOoLocale);
- 335 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
vMSWIACommonDialog = Unassigned;
vMSWIAVector = Unassigned;
}
Variant vMSWIAImageProcess;
String sWIAFiltres, sWIADescriptFiltres;
int iMSWIAnbFiltreDispo;
- 336 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
// redimensionner Image
- 337 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 338 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
else
{
Largeur = vMSWIAImageFile2.OlePropertyGet("Width");
}
Hauteur = vMSWIAImageFile1.OlePropertyGet("Height") + vMSWIAImageFile2.OlePropertyGet("Height");
- 339 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
// couper Image
// application du filtre
vMSWIAImageFile = vMSWIAImageProcess.OleFunction("Apply", vMSWIAImageFile);
- 340 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Comment contrôler qu'une image GIF est animée ou standard à l'aide de WIA ?
Auteurs : blondelle ,
Pour savoir si l'image GIF chargé est animé, il suffit de tester la propriété IsAnimated de cette image :
Variant vMSWIAImageFile;
// chargement de l'image
vMSWIAImageFile.OleFunction("LoadFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images
\\YourBmpHere1.gif");
if(vMSWIAImageFile.OlePropertyGet("IsAnimated"))
{
ShowMessage("Gif animé");
}
else
{
ShowMessage("Gif standard");
- 341 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
Comment modifier le TAG (Titre, Commentaire, Auteur,...) d'une image à l'aide de WIA ?
Auteurs : blondelle ,
Pour modifier les TAG d'une image il suffit de procéder de la manière suivante :
// chargement de l'image
vMSWIAImageFile.OleFunction("LoadFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images
\\Grue_Atelier.jpg");
// sauvegarde de l'image
vMSWIAImageFile.OleFunction("SaveFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images
\\fourmiz_Test_EXIF.JPG");
- 342 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/
Les réponses à vos questions sur BCB
- 343 -
Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune
reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
http://cpp.developpez.com/faq/bcb/