كيفية رسم المربعات مجموعة دلفي لديهم خلفيات شفافة

StackOverflow https://stackoverflow.com/questions/154387

سؤال

وأنا أحاول الحصول على شيء دقيق جدا للعمل، فإنه يبدو مروعا جدا في الوقت الحالي. أحاول أن ترسم خلفية TGroupBox التي أشرت طاقتها وظيفة الطلاء من ذلك أن زوايا وتظهر من خلال من وجوه آبائهم. لقد حصلت على مجموعة من صناديق مجموعة متداخلة التي تبدو لائقة جدا دون XPThemes.

هل هناك طريقة لرسم جزء من خلفية شفافة في وقت التشغيل. أنا برمجة مولد النموذج، لا تستخدم دلفي طريقة عرض التصميم.

هل كانت مفيدة؟

المحلول

وأنا أحاول أن تكرار هذه المشكلة مع الخطوات التالية:

1 - تعيين موضوع التقصير ويندوز XP

2 - إسقاط TGroupBox على نموذج فارغ (محاذاة = alNone)

و3 - إسقاط اثنين TGroupBoxes داخل أول واحد، مع محاذاة = alBottom ومواءمة = alClient

ولكن بصريا يبدو على ما يرام بالنسبة لي.

هل يمكنك تقديم بعض مزيد من المعلومات حول بالضبط كيف كنت قد صممت على شكل؟ أن بعض التعليمات البرمجية لصق من .DFM يكون على ما يرام.

وهنا الجزء ذي الصلة من بلدي 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

نصائح أخرى

وعندما كان لي مثل هذا الوضع، عملت مع TGroupBox في البداية ولكن بعد ذلك قرر استخدام TPaintBox (وتسمى برميل في هذه العينة) ومحاكاة الجزء رسومية من TGroupBox بدلا من ذلك.

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;

وها، التي كانت عرجاء، وكنت بحاجة فقط لعدم وضع ParentBackground := false في بلدي منشئ والطلاء داخل مربع المجموعة عند الاقتضاء.

<اقتباس فقرة>   

وها، التي كانت عرجاء، وكنت بحاجة فقط لعدم وضع ParentBackground: = كاذبة في بلدي منشئ والطلاء داخل مربع المجموعة عند الاقتضاء

وربما هناك شيء أنا لا أعرف ولكن في تجربتي الأخيرة، انها ليست بسيطة كما يبدو بسبب الموضوعات ومعرفة بالضبط ما منطقة لطلاء. حتى TCanvas.FloodFill لا تعمل بشكل صحيح لهذا العمل ربما لأن في بعض الأحيان، لا يحتاج نظام التشغيل لإعادة رسم كل شيء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top