سؤال

أنا أكتب عنصر تحكم في الشبكة استندت إلى tcustomControl حتى أتمكن من التعامل مع جميع الهيكل والرسم والتنقل بنفسي. الشيء الذي لا يمكنني اكتشافه هو:

في مركزي ، قمت بتعيين السيطرة على هذا:

ControlStyle := ControlStyle + [csCaptureMouse, csClickEvents,
    csDoubleClicks, csNeedsBorderPaint, csPannable];

الفكرة هي أنه إذا كان التحكم يتعامل مع أحداث الماوس ، فيمكنني القيام بأشياء مثل اختيار المجموعة وما إلى ذلك. لاحظت أن عنصر التحكم لا يتلقى التركيز أبدًا. تصادف أن لديّ tcombobox على النموذج ويتم تركيزه بوضوح عند إنشاء النموذج. بغض النظر عن عدد المرات التي نقر فيها داخل الشبكات ، يبقى التركيز على combobox.

هذا بالطبع له آثار على التعامل مع أحداث لوحة المفاتيح أيضًا.

لذا فإن السؤال هو ، كيف يتم تحديد أن التركيز يجب أن يتحول إلى عنصر تحكم عند النقر فوقه؟

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

المحلول

يجب على CustomControl استدعاء setFocus على نفسه عند النقر عليه.

procedure TMyCustomControl.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  inherited;

  if not (csDesigning in ComponentState) and CanFocus then
    SetFocus;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top