دلفي :منع ظهور تلميح TPageControl على العناصر المضمنة
سؤال
لدي نموذج يحتوي على المكونات التالية:أ TPageControl
تحتوي على واحد TTabSheet
, ، تحتوي على أ TEdit
.
أريد عرض تلميح "مرحبًا" عندما أقوم بالماوس فوق علامة التبويب التحكم في الصفحة، و لا يتم عرض التلميح عندما أقوم بالماوس فوق TEdit.
ال PageControl
لديه hint= "Hello"
, ، و showhint = true
.هذا يعمل كما هو متوقع.
ال TEdit
لديه showhint = false
, parentshowhint = false
, ، و hint
فارغ.
ولكن، ما زلت أحصل على تلميح "مرحبًا" عندما أقوم بالماوس فوق TEDit.كيف يمكنني التوقف عن هذا؟
إليك ملف .dfm، إذا كنت مهتمًا.
object Form65: TForm65
Left = 0
Top = 0
Caption = 'Form65'
ClientHeight = 258
ClientWidth = 290
OldCreateOrder = False
ShowHint = True
TextHeight = 13
object PageControl1: TPageControl
Left = 0
Top = 0
Width = 290
Height = 258
Hint = 'Bar'
ActivePage = TabSheet1
Align = alClient
TabOrder = 0
object TabSheet1: TTabSheet
Caption = 'TabSheet1'
object Edit3: TEdit
Left = 72
Top = 67
Width = 121
Height = 21
ParentShowHint = False
ShowHint = False
TabOrder = 0
Text = 'tab1'
end
end
end
end
المحلول
قم بإضافة عنصر تحكم TApplicationEvents إلى النموذج الخاص بك، واستخدم الحدث OnShowHint:
procedure TForm1.ApplicationEvents1ShowHint(var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);
begin
CanShow := HintInfo.HintControl <> Edit1;
end;
إذا لم يكن لديك كائن TApplicationEvents في (على سبيل المثال.إذا كنت تستخدم إصدارًا قديمًا جدًا من دلفي)، فيمكنك استخدامه (في FormCreate، على سبيل المثال)
Application.OnShowHint := ApplicationEvents1ShowHint
لتعيين معالج الحدث يدويًا.
تحديث
إذا كان لديك أكثر من عنصر تحكم واحد في TTabSheet، فقد تواجه نفس المشكلة معهم جميعًا.ثم قد تكون مهتمة
procedure TForm1.ApplicationEvents1ShowHint(var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);
begin
CanShow := not SameStr(HintStr, PageControl1.Hint) or (HintInfo.HintControl = TabSheet1);
end;
تحديث 2
إذا كان لديك العديد من أوراق TTabSheets في TPageControl، وتريد أن تعرض جميع الأوراق التلميح، ولكن ليس عناصر التحكم التابعة، فيمكنك القيام بذلك
CanShow := not SameStr(HintStr, PageControl1.Hint) or
((HintInfo.HintControl is TTabSheet) and
(TTabSheet(HintInfo.HintControl).PageControl = PageControl1));
بدلاً من.