Domanda

Ho bisogno di aggiornare gli elementi attorno a una casella di modifica quando cambia dimensione.

TEdit non ha eventi OnResize .

Una casella di modifica può essere ridimensionata in vari momenti, ad esempio:

  • modifica larghezza / altezza nel codice
  • modulo ridimensionato per il ridimensionamento DPI
  • font modificato

E sono sicuro che altri non lo so.

Ho bisogno di un singolo evento per sapere quando una casella di modifica ha cambiato la sua dimensione. Esiste un messaggio di Windows che posso sottoclassare la casella di modifica e prendere?

È stato utile?

Soluzione

OnResize è dichiarato come proprietà protetta di TControl. Potresti esporlo usando un cosiddetto "cracker" classe. È un po 'un trucco, tuttavia.

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;

Altri suggerimenti

Hai provato qualcosa del genere:

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.

o questo:

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.

Gestisci il messaggio wm_Size . Sottoclasse un controllo assegnando un nuovo valore a WindowProc proprietà; assicurati di archiviare il vecchio valore in modo da poter delegare altri messaggi lì.

Vedi anche: wm_WindowPosChanged

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top