Salut !
Je ne sais pas si les versions ultérieures à BCB3 ont prévu ce type de manipulation ?
Par contre, il existe une possibilité en s'appuyant sur la méthode GetFormImage qui permet
de récupérer le bitmap image d'une form (zone client, sans la barre de titre et sans la barre
de menus (peut-être pas avec les versions ultérieures ???)).
A partir de là ça peut devenir très compliqué mais à la base, l'idée est de copier ce bitmap
dans un autre bitmap, pixel par pixel en appliquant une rotation (ici cette rotation est simple):
On admet que Form2 va devenir l'inverse de Form1 :
On aura déclaré dans Unit1.cpp (Form1) :
1 2
| Graphics::TBitmap *Image = new Graphics::TBitmap;
Graphics::TBitmap *Temp; |
Au moment de visualisualisation (chez moi, c'est trop long pour l'idée que je me fais
du "Temps réel") :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Form2->SetBounds(Left, Top, ClientWidth, ClientHeight);
Image->Width = ClientWidth;
Image->Height = ClientHeight;
Temp = GetFormImage();
int we = ClientWidth-1;
int he = ClientHeight-1;
for(int y = 0; y < Height; y++)
{
for(int x = 0; x < Width; x++)
{
Image->Canvas->Pixels[x][y] = Temp->Canvas->Pixels[we-x][he-y];
}
}
delete Temp;
Form2->Show(); |
Il ne faudra pas oublier dans la OnPaint de Form2 :
En sachant que l'on aura déclaré dans Unit2.cpp (Form2):
extern Graphics::TBitmap *Image;
La complication arrive très vite s'il faut donner l'illusion que l'on travaille sur cette
form, car Form2 n'a que l'apparence graphique de Form1. Il faut dans ce cas gérer depuis
Form2 toutes les actions de la souris afin de solliciter les événementielles de Form1 à
l'emplacement supposé des objets !!! Et s'il faut faire écho d'un résultat (texte) dans ce
cas, il faut prévoir une fonte logique... voir la fonction API : CreateFont
A noter que dans ce cas, toutes les opérations graphiques devront se faire sur le bitmap
Image et non directement sur la form (Form2->Canvas ne donne pas d'écho persistant
d'autant plus que la OnPaint effacera tout !!)
A plus !
Partager