| auteur : Geronimo | 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.
Canvas- > MoveTo (0 , 0 );
Canvas- > LineTo (ClientWidth, ClientHeight);
|
Ce code dessinera une ligne en diagonale de la fiche.
|
| auteur : Geronimo | 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 :
HDC ScreenSrc = GetWindowDC (0 );
|
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,
0 ,
0 ,
Screen- > Width,
Screen- > Height,
ScreenSrc,
0 ,
0 ,
SRCCOPY);
|
Enfin, pour libérer le DC de l'écran (bureau), utilisez la méthode ReleaseDC :
ReleaseDC (GetDesktopWindow (), ScreenSrc);
|
Si vous souhaitez directement enregistrer votre capture d'écran, voici un exemple de code :
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;
|
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.
|
| auteur : Geronimo | 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 :
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 (...)
{
}
}
else
{
}
}
|
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.
|
| auteurs : Geronimo, Greybird, Ricky81 | 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 :
void __fastcall TForm1:: Button1Click (TObject * Sender)
{
if (OpenPictureDialog1- > Execute ())
{
Image1- > Picture- > LoadFromFile (OpenPictureDialog1- > FileName);
}
}
|
Ensuite, dans l'évènement OnMouseMove de l'image, placez le code suivant :
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);
}
|
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.
|
| auteur : Alacazam | 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).
|
Consultez les autres F.A.Q.
|
|