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