سؤال

أحتاج إلى تحديث العناصر الموجودة حول مربع التحرير عندما يتغير حجمه.

TEdit لا يوجد لديه OnResize حدث.

يمكن تغيير حجم مربع التحرير في أوقات مختلفة، على سبيل المثال:

  • تغيير العرض/الارتفاع في الكود
  • تم تغيير حجم النموذج لقياس DPI
  • تم تغيير الخط

وأنا متأكد من الآخرين الذين لا أعرفهم.

أحتاج إلى حدث واحد لمعرفة متى تغير حجم مربع التحرير.هل هناك رسالة Windows يمكنني أن أصنفها ضمن مربع التحرير وأمسك بها؟

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

المحلول

تم الإعلان عن OnResize كملكية محمية لـ TControl.يمكنك كشفه باستخدام ما يسمى بفئة "المفرقع".إنه نوع من الاختراق، على الرغم من ذلك.

type
  TControlCracker = class(TControl);

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  TControlCracker(Edit1).OnResize := MyEditResize;
end;

procedure TForm1.MyEditResize(Sender: TObject);
begin
  Memo1.Lines.Add(IntToStr(Edit1.Width));
end;

نصائح أخرى

هل حاولت شيئا مثل هذا:

unit _MM_Copy_Buffer_;

interface

type
  TMyEdit = class(TCustomEdit)
  protected
    procedure Resize; override;
  end;

implementation

procedure TMyEdit.Resize;
begin
  inherited;
  if not (csLoading in ComponentState) then
  begin
    // react on new size
  end;
end;

end.

أو هذا:

unit _MM_Copy_Buffer_;

interface

type
  TCustomComboEdit = class(TCustomMaskEdit)
  private
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
  end;

implementation

procedure TCustomComboEdit.WMSize(var Message: TWMSize);
begin
  inherited;
  if not (csLoading in ComponentState) then
  begin
    // react on new size
  end;
  UpdateBtnBounds;
end;

end.

التعامل مع wm_Size رسالة.فئة فرعية لعنصر تحكم عن طريق تعيين قيمة جديدة له WindowProc ملكية؛تأكد من تخزين القيمة القديمة حتى تتمكن من تفويض الرسائل الأخرى هناك.

أنظر أيضا: wm_WindowPosChanged

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