سؤال

أحاول إنشاء مكون موروث من TLabel باستخدام دلفي، مع إضافة بعض الرسومات المخصصة إليه على TLabel.Paint.أريد أن تكون الرسومات على الجانب الأيسر من النص، لذلك قمت بتجاوز GetClientRect:

function TMyComponent.GetClientRect: TRect;
begin
  result := inherited GetClientRect;
  result.Left := 20;
end;

يحتوي هذا الحل على مشكلة كبيرة أود حلها:ليس من الممكن النقر فوق "منطقة الرسومات" لعنصر التحكم، فقط منطقة التسمية.إذا كانت التسمية التوضيحية عبارة عن سلسلة فارغة، فليس من الممكن تحديد المكون في المصمم بالنقر فوقه على الإطلاق.أيه أفكار؟

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

المحلول

في البداية أعذرني على لغتي الإنجليزية السيئة.
أعتقد أن هذه ليست فكرة جيدة قم بتغيير ClientRect الخاص بالمكون.يتم استخدام هذه الخاصية/المعلومات للعديد من الأساليب والإجراءات الداخلية في المكون ويمكنك تغيير وظيفة/عملية المكون.

أعتقد أنه يمكنك تغيير النقطة لكتابة النص (20 بكسل في DoDrawText الإجراء -في المثال-) ويمكن للمكون الاستجابة للأحداث في منطقة الرسم.

procedure TGrlabel.DoDrawText(var Rect: TRect; Flags: Integer);
begin
  Rect.Left := 20;
  inherited;
end;

procedure TGrlabel.Paint;
begin
  inherited;

  Canvas.Brush.Color := clRed;
  Canvas.Pen.Color := clRed;
  Canvas.pen.Width := 3;
  Canvas.MoveTo(5,5);
  Canvas.LineTo(15,8);

end;

نصائح أخرى

ما هي الأساليب/الوظائف التي تحصل عليها من TLabel والتي تحتاج إلى هذا المكون للقيام بها؟

هل من الأفضل أن تصنع سليلًا لـ (على سبيل المثال، TImage) وترسم النص الخاص بك كجزء من طريقة الرسم الخاصة به؟

إذا كان من المفترض حقًا أن يكون سليل TLabel (مع كل ما يستلزمه ذلك)، فأعتقد أنك ستظل عالقًا في مشكلة وقت التصميم هذه، حيث ألا يواجه TLabel هذه المشكلة على أي حال عندما تكون التسمية التوضيحية فارغة؟

سأكون مهتمًا بالإجابات الأخرى التي تحصل عليها!:-)

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