كيفية الانتقال إلى عنصر التحكم التالي داخل الإطار ؟

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

  •  08-07-2019
  •  | 
  •  

سؤال

في شكل واحد من بلدي التطبيق ، نضيف مجموعات من البيانات عن طريق إضافة إطارات إلى النموذج.لكل إطار ، نحن نريد أن تكون قادرة على الانتقال من تحرير (ديف التعبير عن المحررين) التحكم التالي عن طريق الضغط على مفتاح Enter.حتى الآن, لقد حاولت أربعة أساليب مختلفة في التحكم بضغطة و KeyUp الأحداث.

  1. SelectNext(TcxCurrencyEdit(Sender), True, True); // also base types attempted

  2. SelectNext(Sender as TWinControl, True, True);

  3. Perform(WM_NEXTDLGCTL, 0, 0);

  4. f := TForm(self.Parent); // f is TForm or my form c := f.FindNextControl(f.ActiveControl, true, true, false); // c is TWinControl or TcxCurrencyEdit if assigned(c) then c.SetFocus;

أيا من هذه الأساليب يعملون في دلفي 5.يمكن لأي شخص أن توجه لي من أجل الحصول على هذا العمل ؟ شكرا

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

المحلول

هذا يعمل في دلفي 3 و 5 و 6:

تعيين النموذج KeyPreview الخاصية إلى True.

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  If (Key = #13) then
  Begin
    SelectNext(ActiveControl as TWinControl, True, True);
    Key := #0; 
  End;
end;

نصائح أخرى

لقد وجدت واحدة المشروع القديم الذي يمسك CM_DIALOGKEY رسالة عندما يضغط المستخدم المفتاح Enter وبعد ذلك الحرائق VK_TAB مفتاح .أنه يعمل مع عدد من عناصر مختلفة.

interface
... 
  procedure CMDialogKey(var Message: TCMDialogKey);message CM_DIALOGKEY;

implementation
...

procedure TSomeForm.CMDialogKey(var Message : TCMDialogKey);
begin
  case Message.CharCode of
    VK_RETURN : Perform(CM_DialogKey, VK_TAB, 0);
    ...
  else
    inherited;
  end;
end;

الحدث onKeyPress هو trigered مثل أي شكل آخر.

المشكلة هي أن هذا الإجراء إجراء(wm_nextdlgctl,0,0) أسفل العمل داخل الإطار.

يجب أن تعرف التحكم النشط إلى triger المناسبة لهذا الحدث.

procedure TFrmDadosCliente.EditKeyPress(Sender: TObject; var Key: Char);
var
  AParent:TComponent;
begin
  if key = #13 then
  begin
    key := #0;

    AParent:= TComponent(Sender).GetParentComponent;

    while not (AParent is TCustomForm) do
      AParent:= AParent.GetParentComponent;

    SelectNext(TCustomForm(AParent).ActiveControl, true, true);
  end;
end;

يمكنك وضع TButton على شكل تجعل الصغيرة و الاختباء تحت بعض التحكم الأخرى.تعيين الافتراضي الخاصية إلى true (أن يجعل الحصول على المفتاح Enter) و مكان التالية في الحدث OnClick:

SelectNext(ActiveControl, true, true);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top