Venez participer à la FAQ Delphi !
Bonjour,
Comme vous le savez, la FAQ Delphi contient les questions fréquemment posées sur les forums Delphi et Delphi et bases de données. Malgré nos efforts, elle peut néanmoins contenir des erreurs, nous vous remercions donc de nous les signaler si vous en trouvez.
Par ailleurs, si vous avez des Questions/Réponses (QRs) intéressantes à proposer dont vous êtes l'auteur, vous pouvez les poster à la suite de ce topic en respectant le format donné ci-après. Ces questions doivent être relatives à des problèmes précis que vous avez rencontrés lors du développement de votre application ou alors une question frequemment posée sur le forum. Il vous est demandé, par conséquent, de préciser la version de Delphi, les composants que vous utilisez (éditeurs, gratuits, personnels) ainsi que la section dans laquelle vous souhaitez voir votre QR publiée.
La FAQ Delphi aimerait rester la plus technique possible.
Nous encourageons donc les developpeurs (débutants ou expériementés) à consulter l'aide afin d'utiliser les fonctions standards qui résolvent bien des problèmes avant de proposer une QR.
Pour soumettre une QR, il vous est demandé de la présenter de cette façon :
Citation:
[QR]Comment bien présenter une nouvelle QR ?
Vous devez présenter le titre en couleur comme ci-dessus et écrire le texte de votre QR ici. Soyez clair et précis sans écrire un livre. Une QR est une réponse simple à une question courante.
Vous pouvez ajouter des liens dans votre texte en utilisant la balise URL.
Dans le texte si vous citez une fonction de Delphi, mettez la déclaration en gras. Exemple : pour connaitre la position de la souris utiliser la fonction
GetCursorPos(). Bien sur dans les balises code il ne faut pas mettre de mise en forme. La coloration est faite au moment de la publication sur le site.
Vous pouvez utiliser le
gras l'
italique ou le
souligné mais pas les tailles de polices ni la couleur.
De même ne mettez pas de smiley dans le texte.
Code:
1 2 3 4 5 6 7 8 9 10
| // Le code doit toujours être entre les balises CODE
// Indenter correctement votre code afin de nous éviter une reprise
// manuelle ensuite
Begin
ShowMessage('Hem.');
ShowMessage('Avez-vous compris ?');
If Reponse='OUI'
Then ShowMessage('OK')
Else ShowMessage('Relisez tout');
End; |
En fin de QR, vous pouvez ajouter les liens qui peuvent être utiles en complément.
Ensuite, vous pourrez éventuellement ajouter vos remarques. Si la QR est fournie avec des fichiers (par exemple, un projet présentant le fonctionnement du code) veuillez les placer dans un fichier .zip et nous communiquer le lien où on pourra le télécharger.
Il est également possible d'envoyer votre QR par mail (avec éventuellement en pièces jointes les sources) à l'adresse faqdelphi _AT_ redaction-developpez.com
:merci:
Taille en pixels d'un texte (encore une...)
Roland Chastain : intégré dans la nouvelle FAQ, merci pour cette contribution
Obtenir la largeur et/ou la hauteur en pixels d'un texte, dans une fonte donnée, et dans un contrôle fenêtré donné.
Fonctions sans instanciations d'objets VCL, donc rapides.
Plateforme Windows uniquement, enfin je crois...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| function GetTextSize (const AControl : TWinControl;
const AFont : TFont;
const AText : string): TSize;
var DC: HDC;
begin
DC := GetWindowDC(AControl.Handle);
Result.cx := 0;
Result.cy := 0;
SelectObject(DC,AFont.Handle);
GetTextExtentPoint32(DC,PChar(AText),Length(AText),Result);
ReleaseDC(AControl.Handle,DC);
end;
function GetTextWidth (const AControl : TWinControl;
const AFont : TFont;
const AText : string): Integer;
begin
Result := GetTextSize(AControl,AFont,AText).cx
end;
function GetTextHeight(const AControl : TWinControl;
const AFont : TFont;
const AText : string): Integer;
begin
Result := GetTextSize(AControl,AFont,AText).cy
end; |
Comment obtenir un handle de fenêtre (HWND) de console
Roland Chastain : intégré dans la nouvelle FAQ, merci pour cette contribution
J'ai trouvé ça par hasard et je ne l'ai pas trouvé dans la FAQ (enfin j'ai trouvé ceci Comment cacher la fenêtre d'une application console ? mais il me semble intéressant de rajouter ça à part)
http://support.microsoft.com/kb/124103/fr
Le but est d'obtenir le Handle de la fenêtre de l'application console.
Pour ce faire on va générer un titre unique et chercher la fenêtre qui à ce titre.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| function GetConsoleHwnd : HWND ;
var
NewWindowTitle : string ;
OldWindowTitle : string ;
begin
SetLength(NewWindowTitle, 1024) ;
// Récupère le titre courant
GetConsoleTitle(PChar(OldWindowTitle), 1024);
NewWindowTitle := Format('%d/%d', [GetTickCount, GetCurrentProcessId]);
// Change le titre
SetConsoleTitle(PChar(NewWindowTitle));
// Attend pour que le titre de la fenêtre soit changé
Sleep(40);
// Charche le nouveau titre
Result := FindWindow(nil, PChar(NewWindowTitle)) ;
// Restore le titre originnal.
SetConsoleTitle(OldWindowTitle);
end ; |
Comment formater un entier avec la fonction format
Alcatîz : QR ajoutée à la nouvelle FAQ, merci pour cette contribution
La FAQ donne un exemple de formatage d'un nombre réel mais il n'y a rien sur les nombres entiers. Pour formater un nombre entier en utilisant les séparateurs de millier, on doit utiliser l'astuce de convertir notre entier en nombre flottant et n'afficher que la partie entière. La fonction format permet de réaliser cela très facilement.
Il existe deux formes d'utilisation de la fonction format.
Il est possible d'utiliser une variable locale pour spécifier le séparateur de millier ou le séparateur décimal.
Voici un exemple
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
procedure AfficheEntierFormate;
var
i:integer;
setting:Tformatsettings;
begin
i:=10000000;
//première forme de l'utilisation de la fonction format
//L'astuce consiste à diviser l'entier par 1 pour obtenir un nombre flottant
//et utiliser le caractère de type de conversion n au lieu de d.
//On fixe le nombre de décimale à zéro avec le spécificateur facultatif de précision .0
//On affiche donc une nombre flottant sans afficher les décimales
//La fonction format utilisera les paramètres locaux pour formater le nombre
showmessage(format('le nombre est %.0n ',[i/1]));
//Si le séparateur de millier est l'espace notre valeur sera 10 000 000
//mais rien nous garantie que le séparateur de millier est celui que nous voulons
//Si on désire contrôler les paramètres de formatage, il faut déclarer une variable
//de type Tformatsetting et utiliser la deuxième forme de la fonction format
//On initialise notre variable avec les paramètres régionaux fixés par l'usager
GetLocaleFormatSettings(SysLocale.DefaultLCID, setting);
//On modifie la valeur ou les valeurs qui nous intéressent
setting.ThousandSeparator:=',';
showmessage(format('le nombre est %.0n ',[i/1], setting));
//Notre valeur sera affichée à coup sur selon notre désir 10,000,000
end; |
De cette façon on ne modifie pas les variables globales et on ne risque pas d'effet de bord dans les traitements subséquents.:yaisse2:
Salutations
BeTuLa
Comment récuperer les liens dans une page HTML ?
Alcatîz : remarque ajoutée dans la QR, merci pour cette contribution
Bonjour seulement j'ai remarqué qu'il n'est pas dit qu'il faut ajouter StrUtils dans la caluse Uses pour la fonction PosEx, et j'ai un problème de compilation ( identificateur non déclaré ) pour le BeginPos , la question dans la Faq c'est :
Comment récuperer les liens dans une page HTML ?
Voici le lien
[EDI BDS2005,BDS2006 ...] une Aide plus efficace
Fatigué de me battre avec une aide de BDS2006 un peu 'floue', nostalgique de l'aide si complète de D7 et désespérant avoir un jour une mise à jour , j'ai trouvé une petite pepite chez CodeGear . Voici une proposition de Question/Réponse , a retravailler :P car le lien ne fonctionne pas tout le temps et on doit être enregistré il y a a aussi Delphi Praxis Help Booster qui pourrait être cité
[QR] ajouter de l'aide à mon EDI
Citation:
il est possible d'utiliser un ancien fichier d'aide Delphi avec votre nouveau EDI . Si vous avez la chance d'avoir une version plus ancienne D3..D7 :
télechargez et installez
Delphi7helpforBDS
Ctrl+F1 et Shift+F1 seront alors vos touches d'aides supplémentaires