Einzelnen Beitrag anzeigen

Carsten Hölscher

Registriert seit: 29. Jul 2008
77 Beiträge
 
Delphi 11 Alexandria
 
#1

WM_SIZE löst nicht aus

  Alt 16. Sep 2021, 10:11
Ich wollte mir eine kleine Komponente schreiben, die einen Dateinamen ggf. verkürzt anzeigt, wenn der Label zu schmal ist.
Wenn das Formular vergrößert wird, soll der Name neu berechnet werden, um sich an die neue Breite des Labels anzupassen.
Nach meinem Verständnis müßte das unten funktionieren, allerdings wird TLabelDateiname.WMSize(var Message: TWMSize); nicht aufgerufen, wenn ich das Fenster vergrößere (der Label ist recht sund links verankert), das beep ist zum Testen, wann die procedure ausgeführt wird.
Wenn ich in der Anwendung das OnResize-Event des Labels abfrage, dann wird das ausgeführt.
Hat jemand eine Idee (Delphi 10.4.2)?


Code:
unit LabelDateiname;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.StdCtrls, FileCtrl, Messages;

type
  TLabelDateiname = class(TLabel)
  private
    { Private-Deklarationen }
    FDateiname:string;
    procedure SetzeDateiname(s:string);
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
    property Dateiname:string read FDateiname write SetzeDateiname;
    property OnResize;
  end;

procedure Register;

implementation

procedure TLabelDateiname.WMSize(var Message: TWMSize);
begin
  inherited;
  beep;
  Caption:=MinimizeName(FDateiname, canvas, Width);
end;

procedure TLabelDateiname.SetzeDateiname(s:string);
begin
  Caption:=MinimizeName(s, canvas, Width);
  FDateiname:=s;
end;


procedure Register;
begin
  RegisterComponents('Eigenes', [TLabelDateiname]);
end;

end.
Carsten
  Mit Zitat antworten Zitat