Question

J'essaie d'obtenir quelque chose de très subtil au travail, ça a l'air vraiment affreux en ce moment. J'essaie de peindre l'arrière-plan d'un TGroupBox dont j'ai surchargé la fonction de peinture afin que les angles soient visibles jusqu'à leur objet parent. J'ai un tas de groupes imbriqués qui ont l'air très décent sans XPThemes.

Existe-t-il un moyen de peindre une partie d'un fond transparent lors de l'exécution? Je programme le générateur de formulaire, sans utiliser la vue de conception Delphi.

Était-ce utile?

La solution

J'essaie de reproduire ce problème en procédant comme suit:

1 - Définissez le thème sur Windows XP par défaut

2 - Déposez un TGroupBox sur un formulaire vide (align = alNone)

3 - Déposez deux TGroupBoxes dans le premier, avec align = alBottom et align = alClient

Mais visuellement, ça me va très bien.

Pouvez-vous fournir des informations supplémentaires sur la manière dont vous avez conçu le formulaire? Certains codes collés à partir du fichier .DFM conviendraient.

Voici la partie pertinente de mon DFM:

  object GroupBox1: TGroupBox
    Left = 64
    Top = 56
    Width = 481
    Height = 361
    Margins.Left = 10
    Caption = 'GroupBox1'
    ParentBackground = False
    TabOrder = 0
    object GroupBox2: TGroupBox
      Left = 2
      Top = 254
      Width = 477
      Height = 105
      Align = alBottom
      Caption = 'GroupBox2'
      TabOrder = 0
    end
    object GroupBox3: TGroupBox
      Left = 2
      Top = 15
      Width = 477
      Height = 239
      Align = alClient
      Caption = 'GroupBox3'
      TabOrder = 1
    end
  end

Autres conseils

quand j’ai eu une telle situation, j’ai travaillé avec TGroupBox au départ, mais j’ai ensuite décidé d’utiliser TPaintBox (appelé pb dans cet exemple) et de simuler la partie graphique de TGroupBox à la place.

procedure TfraNewRTMDisplay.pbPaint(Sender: TObject);
const
  icMarginPixels=0;
  icCornerElipsisDiameterPixels=10;
begin
  pb.Canvas.Pen.Color:=clDkGray;
  pb.Canvas.Pen.Width:=1;
  pb.Canvas.Pen.Style:=psSolid;
  pb.Canvas.Brush.Color:=m_iDisplayColor;
  pb.Canvas.Brush.Style:=bsSolid;
  pb.Canvas.RoundRect(icMarginPixels,
                      icMarginPixels,
                      pb.Width-icMarginPixels*2,
                      pb.Height-icMarginPixels*2,
                      icCornerElipsisDiameterPixels,
                      icCornerElipsisDiameterPixels);
end;

Ha, c'était nul, je devais simplement ne pas définir ParentBackground: = false dans mon constructeur et peindre l'intérieur de la zone de groupe, le cas échéant.

  

Ha, c'était nul, je devais juste ne pas définir ParentBackground: = false dans mon constructeur et peindre l'intérieur de la zone de groupe, le cas échéant.

Peut-être y a-t-il quelque chose que je ne sais pas mais, dans mon expérience récente, ce n'est pas aussi simple que cela en a l'air à cause des thèmes & amp; sachant exactement quel domaine peindre. Même TCanvas.FloodFill ne fonctionne pas de manière fiable pour ce travail probablement, car parfois, le système d'exploitation n'a pas besoin de tout repeindre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top