J'essaie d'utiliser Canvas pour peindre une forme de type dialogue. Je peux y mettre des bordures arrondies et un rectangle arrondi comme en-tête/titre. Je ne veux remplir que le titre avec un pinceau.Delphi 7 - Comment remplir un rectangle arrondi avec une brosse?
Cependant, je me bats pour remplir ce titre. Lorsque vous utilisez FillRect
, tout le formulaire est repeint. J'ai essayé de chercher ici, donc si j'ai raté, il suffit de me montrer où aller. Sinon, comment puis-je le faire? En utilisant Delphi 7, événement OnPaint.
procedure TCustomDialog.FormPaint(Sender: TObject);
var
Rect: TRect;
BorderColor: TColor;
BrushColor: TColor;
begin
// Rect for Form's borders;
Rect.Left := 0;
Rect.Top := 0;
Rect.Right := ClientWidth;
Rect.Bottom := ClientHeight;
BorderColor := HtmlToTColor('#ffffff');
BrushColor := HtmlToTColor('#ffffff');
// Here I set the colors of Canvas.Pen (border) and Canvas.Brush (Filling),
// similar to Bootstrap themes/classes (Default, Success, Warning, Danger);
case DialogType of
dtInformation:
begin
BorderColor := HtmlToTColor(Header_Color_Pen_Information);
BrushColor := HtmlToTColor(Header_Color_Brush_Information);
end;
dtSuccess:
begin
BorderColor := HtmlToTColor(Header_Color_Pen_Success);
BrushColor := HtmlToTColor(Header_Color_Brush_Success);
end;
dtWarning:
begin
BorderColor := HtmlToTColor(Header_Color_Pen_Warning);
BrushColor := HtmlToTColor(Header_Color_Brush_Warning);
end;
dtError:
begin
BorderColor := HtmlToTColor(Header_Color_Pen_Error);
BrushColor := HtmlToTColor(Header_Color_Brush_Error);
end;
end;
with Canvas do
begin
Pen.Color := BorderColor;
Pen.Width := Form_Pen_Width;
// Draw rounded borders for Form;
RoundRect(1, 1, Rect.Right - 1, Rect.Bottom - 1, Form_Border_Radius - 1, Form_Border_Radius - 1);
// Rect for Dialog's Header;
Rect.Left := Component_Gutter;
Rect.Top := Component_Gutter;
Rect.Right := ClientWidth - Component_Gutter;
Rect.Bottom := Form_Header_Height;
RoundRect(Component_Gutter, Component_Gutter, ClientWidth - Component_Gutter, Form_Header_Height,
Form_Border_Radius - 2, Form_Border_Radius - 2);
Brush.Color := BrushColor;
FillRect(Rect);
end;
end;
Votre lien d'image est court en. Merci de ne pas héberger d'images sur des sites externes. StackOverflow a son propre hébergement d'image. Veuillez télécharger votre image directement sur StackOverlow. –
@RemyLebeau Édité. –
Dans les préparations pour dessiner le rectangle arrondi, définissez 'Brush' à la couleur que vous voulez qu'il soit rempli. À partir de doc: * Utilisez RoundRect pour dessiner un rectangle arrondi à l'aide de Pen et remplissez-le avec Brush *. Si je comprends votre code, déplacez la ligne 'Brush.Color: = BrushColor;' avant l'appel 'RoundRect()' et supprimez l'appel 'FillRect()'. –