FAQ C++ BuilderConsultez toutes les FAQ
Nombre d'auteurs : 60, nombre de questions : 670, dernière mise à jour : 21 novembre 2010 Ajouter une question
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.
Commentez cette FAQ : Commentez
- 8.4.6.1. TChart (12)
Pour dessiner des lignes sur la fiche, il suffit de faire appel aux méthodes de l'objet Canvas : MoveTo et LineTo. Il faut savoir que vous ne dessinez pas directement sur la fiche mais sur le Canvas de la fiche. C'est une surface spécialement destinée au dessin qui contient toutes les méthodes et propriétés nécessaires au dessin.
Code c++ : | Sélectionner tout |
1 2 | Canvas->MoveTo(0, 0); Canvas->LineTo(ClientWidth, ClientHeight); |
Il faut récupérer le DC (Device Context) de l'écran grâce à la fonction GetWindowsDC. Cette fonction prend pour argument le Handle de la fenêtre dont on veut le DC. Ici, nous souhaitons celui de tout l'écran. Le Handle de l'écran (Bureau) est 0.
D'où le code suivant :
Code c++ : | Sélectionner tout |
HDC ScreenSrc = GetWindowDC(0);
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | 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 |
Code c++ : | Sélectionner tout |
ReleaseDC(GetDesktopWindow(), ScreenSrc);
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | Graphics::TBitmap *Bitmap = new Graphics::TBitmap; Bitmap->Height = Screen->Height; Bitmap->Width = Screen->Width; HDC ScreenSrc = GetWindowDC(0); BitBlt(Bitmap->Canvas->Handle, 0, 0, Screen->Width, Screen->Height, ScreenSrc, 0, 0, SRCCOPY); Bitmap->SaveToFile(ExtractFilePath(Application->ExeName)+"Bitmap.bmp"); ReleaseDC(GetDesktopWindow(), ScreenSrc); delete Bitmap; |
Il peut être parfois utile de charger une image à partir du presse-papiers. Pour ce faire, il convient d'utiliser un objet Clipboard. Le code suivant montre comment faire. Pour cela, placez un composant TImage sur une fiche ainsi qu'un bouton. Voici le gestionnaire d'évènements OnClick de ce bouton :
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | void __fastcall TForm1::Button1Click(TObject *Sender) { TClipboard *PressePapiers = Clipboard(); if (PressePapiers->HasFormat(CF_BITMAP)) { try { Image1->Picture->Bitmap->LoadFromClipboardFormat(CF_BITMAP, PressePapiers->GetAsHandle(CF_BITMAP), 0); } catch (...) { // Le contenu du presse-papier n'est pas un image valide } } else { // Le contenu du presse-papier n'est pas une image; } } |
Il existe trois macros nommées GetRValue, GetBValue et GetGValue qui donnent respectivement les composantes rouges, bleues et vertes d'une couleur au format RGB, et donc en particulier pour un objet TColor. Voici un exemple concret d'utilisation : nous passons la souris sur une image que l'utilisateur peut changer et les valeurs des différentes composantes de la couleur située sous le pointeur est affichée dans un TLabel. Placez donc sur votre fiche un composant TImage, TLabel, TButton et TOpenPictureDialog. Dans l'évènement OnClick du bouton, placez le code suivant :
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 | void __fastcall TForm1::Button1Click(TObject *Sender) { if (OpenPictureDialog1->Execute()) { Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName); } } |
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { BYTE nRed = GetRValue(ColorToRGB(Image1->Canvas->Pixels[X][Y])); BYTE nBlue = GetBValue(ColorToRGB(Image1->Canvas->Pixels[X][Y])); BYTE nGreen = GetGValue(ColorToRGB(Image1->Canvas->Pixels[X][Y])); Label1->Caption = "Rouge : " + IntToStr(nRed) + " Vert :" + IntToStr(nGreen) + " Bleu :" + IntToStr(nBlue); } |
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.
Lorsque vous souhaitez modifier un attribut couleur, à la création d'un composant, vous avez le choix entre une valeur prédéfinie (clBlue, clRed, clBtnFace ...) ou une valeur de cette forme 0x00RRGGBB (valeur hexadécimale de 4 octets).
Pour choisir "visuellement" une couleur, et en obtenir le code hexadécimal :
- dans l'Inspecteur d'Objets, double-cliquez sur un attribut Color (de votre Form par exemple)
- faites ensuite "Définir les couleurs personnalisées"
- après avoir choisi votre couleur, cliquez "Ajouter aux couleurs personnalisées" et validez.
Vous obtenez finalement quelque chose de ce type 0x00BBGGRR (valeurs Blue, Green, Red, remarquez l'inversion).
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.