Вверх ↑
Разработчик
Ответов: 26066
Рейтинг: 2120
#1: 2022-04-12 04:29:22 ЛС | профиль | цитата
Кажется я добился при пустой строке исходного размера. Можно, конечно, сделать сохранение размера для любого текста при включенном Autosize, но я считаю это не правильно. Если включен Autosize, то размер должен меняться и при запуске.

unit hiLabel;

interface

uses Kol, Share, Win;

type
THILabel = class(THIWin)
private
fAutosize: boolean;
procedure SetAutoSize(Value: boolean);
procedure SetAlignment(Value: TTextAlign);
procedure SetVerticalAlign(Value: TVerticalAlign);
procedure _OnClick(Sender: PObj);
protected
procedure _onMouseEnter(Sender: PObj); override;
procedure _onMouseLeave(Sender: PObj); override;
public
_event_OnClick: THI_Event;
_prop_ColorHover: integer;
_prop_Underline: boolean;
_prop_Caption: string;
_prop_CaptionOnClick: boolean;
_data_Text: THI_Event;

procedure _work_DoText(var Data: TData; Index: word);
procedure _work_doAlignment(var Data: TData; Index: word);
procedure _work_doVerticalAlign(var Data: TData; Index: word);
procedure _var_Caption(var Data: TData; Index: word);

constructor Create(Parent: PControl);
procedure Init; override;
property _prop_AutoSize: boolean read fAutosize write SetAutoSize;
property _prop_Alignment: TTextAlign write SetAlignment;
property _prop_VerticalAlign: TVerticalAlign write SetVerticalAlign;
end;

implementation

constructor THILabel.Create;
begin
fAutosize := false;
inherited Create(Parent);
Control := NewLabel(Parent, '');
Control.OnClick := _OnClick;
end;

procedure THILabel.Init;
begin
inherited;
Control.Caption := _prop_Caption;
if fAutosize then
begin
if _prop_Caption = '' then
begin
Control.Width := _prop_Width;
Control.Height := _prop_Height;
end;
fDefTop := Control.Top;
fDefLeft := Control.Left;
fDefRight := Control.Parent.Width - (Control.Left + Control.Width);
fDefBottom := Control.Parent.Height - (Control.Top + Control.Height);
fDefWidth := Control.Width;
fDefHeight := Control.Height;
end;
if (_prop_ColorHover <> 0) or _prop_Underline then
begin
Control.onMouseEnter := _OnMouseEnter;
Control.onMouseLeave := _OnMouseLeave;
end;
Control.Invalidate;
end;

procedure THILabel._OnClick;
begin
if _prop_CaptionOnClick then
_hi_OnEvent(_event_OnClick, Control.Caption)
else
_hi_OnEvent(_event_OnClick);
end;

procedure THILabel._OnMouseEnter;
begin
inherited;
if _prop_ColorHover <> 0 then
Control.Font.Color := _prop_ColorHover;
if _prop_Underline then
Control.Font.FontStyle := Control.Font.FontStyle + [fsUnderline];
end;

procedure THILabel._OnMouseLeave;
begin
inherited;
if _prop_ColorHover <> 0 then
Control.Font.Color := _prop_Font.Color;
if _prop_Underline then
Control.Font.FontStyle := Control.Font.FontStyle - [fsUnderline];
end;

procedure THILabel._work_DoText;
begin
Control.Caption := ReadString(Data, _data_Text);
if fAutosize then
begin
fDefTop := Control.Top;
fDefLeft := Control.Left;
fDefRight := Control.Parent.Width - (Control.Left + Control.Width);
fDefBottom := Control.Parent.Height - (Control.Top + Control.Height);
fDefWidth := Control.Width;
fDefHeight := Control.Height;
end;
end;

procedure THILabel._work_doAlignment;
begin
Control.TextAlign := TTextAlign(ToInteger(Data));
end;

procedure THILabel._work_doVerticalAlign;
begin
Control.VerticalAlign := TVerticalAlign(ToInteger(Data));
end;

procedure THILabel.SetAlignment;
begin
Control.TextAlign := Value;
end;

procedure THILabel.SetVerticalAlign;
begin
Control.VerticalAlign := Value;
end;

procedure THILabel.SetAutoSize;
begin
Control.AutoSize(Value);
fAutosize := Value;
end;

procedure THILabel._var_Caption;
begin
dtString(Data, Control.Caption);
end;

end.


Убери условие if _prop_Caption = '' then и исходный размер сохранится при любом тексте при старте.

--- Добавлено в 2022-04-12 04:46:39

Добавил новое свойство AutosizeAtStart и выложил отдельным архивом.
карма: 22

0
файлы: 1hiLabel_AutosizeAtStart.zip [1.8KB] [286]
Редактировалось 3 раз(а), последний 2022-04-12 04:46:39