Il s'agit juste de changer les paramtres. Ceci va donner un dégradé de gauche à droite.
LOCAL lnRow ThisForm.ScaleMode = 3 ThisForm.DrawWidth = 1 FOR lnRow = 0 TO ThisForm.width ThisForm.ForeColor = RGB(0,0,255-255*lnRow/ThisForm.width) ThisForm.Line(lnRow, 0,lnRow,ThisForm.height) NEXT lnRow
le 01/12/2004, Robert Plagnard a écrit : C'est pas super. Créez une forme avec ce code dans l'init. Puis ajoutez un bouton. Run. Si vous passez sur le bouton avec la souris, la forme redevient grise. C'est pas sympa. De plus si vous retaillez la forme c'est pas sympa non plus. Bref sous Windows, ce genre de comportement se met en réponse à l'évenement Paint, pas dans l'Init.
le 01/12/2004, Mike Gagnon a écrit : >>Créez une forme avec ce code dans l'init. Puis ajoutez un bouton. Run.
Le titre indique bien "le formulaire" et non le controles.
>>De plus si vous retaillez la forme c'est pas sympa non plus.
En tant que programmeur, il s'agit d'écrire une fonction qui s'occupe du resize. --------------------------------------------------------------------------------
le 01/12/2004, Robert Plagnard a écrit : Malheureusement, dans le Paint des formes FoxPro, on ne fait pas ce que l'on veut, on n'a pas accès aux couches basses de windows qui permettraient de peindre la fenêtre avec une brush sur le DC (Device contexte). J'ai peur qu'il n'y ai pas de solution dans FoxPro. C'est pas sympa du tout.
le 01/12/2004, Mike Gagnon a écrit : >>> on n'a pas accès aux couches basses de windows qui permettraient de peindre la fenêtre avec une brush sur le DC (Device contexte). <<<
Voila un commentaire surprennant venant de vous! D'apres votre profile, vous utiliser Foxpro depuis 'le début'. Que fait-on des appels API pour aller chercher le DC d'un formulaire?
DECLARE INTEGER GetActiveWindow IN user32 DECLARE INTEGER GetWindowDC IN user32 INTEGER hWnd LOCAL hWindow, hDC hWindow = GetActiveWindow() hDC = GetWindowDC(hWindow)
le 02/12/2004, Robert Plagnard a écrit : Oui c'est vrai, on a bien accès aux couches basses. GetActiveWindow() ne donne pas vraiment ce que l'on cherche, mais depuis quelques versions les forms exposent la propriété HWnd, qui est justement ce qu'il nous faut pour obtenir le DC. On arrive bien a dessiner dans la forme mais les controles ne sont pas clippés, contrairement à ce qui se passe en C# ou en Delphi. J'ai testé le Paint d'une forme FoxPro, d'une forme C# et d'une forme Delphi : Ces paints dessinent une grosse diagonale rouge. Mettez un bouton et un texte sur la diagonale. Dans le paint d'une forme VFP : declare integer GetDC in win32api Integer hWnd declare integer ReleaseDC in win32api Integer hWnd, integer hDC declare integer CreatePen in win32api Integer fnPenStyle, integer nWidth, integer crColor declare integer SelectObject in win32api integer HDC, integer hGDIObj declare integer DeleteObject in win32api Integer handle declare integer LineTo in win32api integer hDC, integer iX, integer iY declare integer MoveToEx in win32api integer hDC, integer iX, integer iY, string @lpPoint #define PS_SOLID 0 local hWnd, hDC, hPen, hBrush local sPoint as string sPoint = Replicate(Chr(0),8) hWnd = Thisform.HWnd hDC = GetDC( hWnd ) hPen = CreatePen( PS_SOLID, 10, Rgb(255,0,0) ) SelectObject( hDC, hPen ) MoveToEx( hDC, 0, 0, @sPoint ) LineTo( hDC, 1000,1000 ) DeleteObject( hPen ) ReleaseDC( hWnd, hDC )
Dans le paint d'une forme Delphi procedure TForm1.FormPaint(Sender: TObject); begin with Canvas do begin Pen.Width := 10; Pen.Color := rgb(255,0,0); MoveTo(0,0); LineTo(1000,1000); end; end;
Dans le paint d'une forme C# private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics Canvas = e.Graphics; System.Drawing.Pen pen = new Pen( System.Drawing.Color.Red ,10); Canvas.DrawLine( pen, 0,0, 1000, 1000 ); }
Ca marche bien en C# et en Delphi, ca ne marche pas en VFP (bien que ClipControls soit .T.) ou alors c'est vraiment compliqué, il faudrait jouer avec les clipping regions et sauter les controles. Bref, pour obtenir un effet graphique de ce genre je préfere dessiner dans word un rectangle avec un gradient de couleur, le capturer avec PaintShop, le sauver en jpeg et le mettre dans la forme avec une image en arrière plan. Ca marche bien, les controles sont respectés, il n'y a pas de code, mais c'est moins riche, on ne peut pas tout avoir!
le 02/12/2004, Mike Gagnon a écrit : >>On arrive bien a dessiner dans la forme mais les controles ne sont pas clippés,<<
Le problème vient du fait que les formes et controles de VFP sont des 'représentations' plutot que de objects Windows. Je ne crois pas que cela change bientot.
Super comme jeux maintenant il faire le dégradé dans le senes vertical ...