J'ai créé un nouveau composant qui hérite de TCornerButton pour ajouter une option de menu déroulant.Dessiner sur la toile d'un TCornerButton se trompe de position
Première question ...
Pourquoi ai-je besoin de remplacer la méthode « AfterPaint » plutôt que la méthode « Paint » comme décrit dans la documentation. Surcharger la "Peinture" n'a pas abouti à un dessin.
deuxième question ...
Lorsque j'utilise la méthode « AfterPaint » pour dessiner un peu plus bas flèche pointant vers son décalage à droite d'environ 5 pixels jusqu'à ce que le bouton se concentrer. Juste survoler le bouton ne semble pas résoudre le problème (comme vous vous attendez à ce qu'un repaint se produise). J'ai lié ceci avec et sans le "ScalePoint" dans le code et chaque fois c'est faux. Il apparaît également dans la mauvaise position au moment du design. Dès que le bouton est mis au point à l'exécution, la flèche se déplace vers la position attendue. Quand il perd le focus, il revient à la mauvaise position. FYI. La "largeur" ne change pas - j'ai testé pour cela.
procedure TLFButton.AfterPaint;
var
down_arrow: TPolygon;
x, y: Extended;
begin
inherited;
if FDropDownButton then
begin
Canvas.Fill := TText(FindStyleResource('text')).Fill;
x := Width - 12;
y := (Height/2) - 3;
SetLength(down_arrow, 3);
down_arrow[0] := ScalePoint(PointF(x, y), Scale.X, Scale.Y);
down_arrow[1] := ScalePoint(PointF(x+8,y), Scale.X, Scale.Y);
down_arrow[2] := ScalePoint(PointF(x+4,y+6), Scale.X, Scale.Y);
Canvas.FillPolygon(down_arrow, 255);
end;
end;
Je peux voir comment c'est ainsi que les choses devraient être faites. Cela signifierait cependant de modifier tous les styles que je prévois de distribuer avec le produit correct? Cela semble désordonné d'essayer de maintenir les styles. Lorsque Embarcadero publie une mise à jour avec des modifications aux styles standards, que doit-on faire? – Martin
Fusionnez votre propre style dans un style par défaut. Modifier un style par défaut est désordonné. Voici un exemple de fusion de styles: http://stackoverflow.com/questions/7788440/correct-way-to-create-styles-for-custom-components/7811201#7811201 –
Je n'ai jamais eu de réponse d'Embarcarero à ce sujet un mais la méthode de style est certainement le moyen de le faire. – Martin