выведен сокращенным ?
Есть функция для TLabel которая позволяет определить , что текст выведен сокращенным
function TFrmMain.IsTextTruncated(Lbl: TLabel): Boolean;
begin
// Получаем ширину текста без многоточия
// Сравниваем ширину текста с шириной самого Label
Result := Lbl.Canvas.TextWidth(Lbl.Caption) > Lbl.Width;
end;
Как подобное сделать для TSkLabel (Skia)?
Пока нашёл такое решение function TFrmMain.IsTextTruncatedSk(Lbl: TSkLabel): Boolean; var SkLbl: TSkLabel; begin SkLbl := TSkLabel.Create(Nil); SkLbl.AutoSize := true; SkLbl.TextSettings.Font.Size := Lbl.TextSettings.Font.Size; SkLbl.Caption := Lbl.Caption; Result := SkLbl.Width > Lbl.Width; SkLbl.Free; end;
Теперь возникает другой вопрос не зашкварно создавать Объект и удалять Объект, если эта фукция будет вызываться тысячи раз?
создай один раз в начале. в конце один раз удали )
вариант с запоминанием предыдущей ширины, затем автосайз, и сравнение новой ширины с предыдущей не катит? с последующим возвратом ширины на место ) все на том же лейбле, не создавая нового
Мерцать будет, а когда на форме сотня label будет светомузыка 😁
Обсуждают сегодня