Перейти к содержанию
  • 0
Alexander Samosyuk

Создание дополнительного дочернего компонента

Вопросы

Создаю свой компонент с визуализацией Label в Edit, см. рис.

При компиляции появляется еще одни Label. А при отрисовке формы нельзя скопировать готовый компнонент - выдает ошибку.

Подскажите, как избавиться от дубликата.

t

type

   TShowLabel = (Show, Hide);
  TEditVisualLabel = class(TEdit)
  private
  TextLabel : TLabel;
  FloatVErt : TFloatAnimation;
  FloatSize : TFloatAnimation;
  FloatColor : TColorAnimation;
    FLabCAp : string;
    function GetSHow: TShowLabel;
    Procedure SetShow(Value : TShowLabel);
    function GetLabelCaption: string;
    Procedure SetLabelCaption(Value : string);
    function GetLabelFontColor: TAlphaColor;
    Procedure SetLabelFontColor(Value : TAlphaColor);
    function GetStopValue : Single;
    procedure SetStopValue(Value : Single);
    function GetStartValue: Single;
    procedure SetStartValue(Value : Single);
    function GetStopFont: Single;
    procedure SetStopFont(Value : Single);
    function GetStartFont: Single;
    procedure SetStartFont(Value : Single);
    { Private declarations }
  protected

    procedure Enter(Sender : TObject);
    procedure Exi(Sender : TObject);
    { Protected declarations }
  public   { Public declarations }
  published

  property LabelFontColor : TAlphaColor read GetLabelFontColor write SetLabelFontColor;
 property LabelCaption: string read GetLabelCaption write SetLabelCaption;
  property LabelPositionStop : Single read GetStopValue write SetStopValue;
  property LabelPositionStart : Single read GetStartValue write SetStartValue;
  property LabelSizeStopFont : Single read GetStopFont write SetStopFont;
  property LabelSizeStartFont: Single read GetStartFont write SetStartFont;
  property LabelVisible : TShowLabel read GetSHow write SetSHow default TShowLabel(1);
  constructor Create(aowner: TComponent);override;
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TEditVisualLabel]);
end;

constructor TEditVisualLabel.Create(aowner: TComponent);
var
Del: TLabel;
Family,Style,FontColor : TStyledSetting;
begin
 inherited Create(AOwner);
  TextLabel := TLabel.create(Self);
  TextLabel.Parent := self;                       // Скорее всего, что именно здесь весь затык, почему оно выполняется дважды
  TextLabel.StyledSettings := [Family];
  TextLabel.Align := TAlignLayout(2);
  TextLabel.TextSettings.FontColor := TAlphaColorRec.Silver;
  TextLabel.TextSettings.Font.Size := 14;
  TextLabel.SetSubComponent(true);

  FloatVErt := TFloatAnimation.Create(TextLabel);
  FloatVErt.Parent :=  TextLabel;
  FloatVErt.PropertyName := 'Position.Y';
  FloatVErt.StopValue := -20;
  FloatVErt.StartValue := 0;

  FloatSize := TFloatAnimation.Create(TextLabel);
  FloatSize.Parent :=   TextLabel;
  FloatSize.PropertyName := 'TextSettings.Font.Size';
  FloatSize.StopValue := 11;
  FloatSize.StartValue := 14;

  FloatColor := TColorAnimation.Create(TextLabel);
  FloatColor.Parent :=   TextLabel;
  FloatColor.PropertyName := 'TextSettings.FontColor';
  FloatColor.StartValue := TAlphaColorRec.Silver;


  LabelFontColor := TAlphaColorRec.Black;
  LabelVisible := TShowLabel(0);
  TextLabel.Align := TAlignLayout(2);
  //TextLabel.Width := 5000;
  //FloatColor.StopValue := LabelFontColor;

  OnExit := Exi;
  OnEnter := Enter;
  end;

procedure TEditVisualLabel.Enter(Sender : TObject);
begin
   inherited;
  if TextLabel.Position.Y<>FloatVErt.StopValue then
begin
FloatVErt.Inverse := false;
FloatVErt.Start;
FloatSize.Inverse := false;
FloatSize.Start;
FloatColor.Inverse := false;
FloatColor.Start
end;
end;

procedure TEditVisualLabel.Exi(Sender: TObject);
begin
  inherited;
 if (Self.Text='') and (TextLabel.Position.Y<>0) then
begin
FloatVErt.Inverse := true;
FloatVErt.Start;
FloatSize.Inverse := true;
FloatSize.Start;
FloatColor.Inverse := true;
FloatColor.Start
end;
end;

function TEditVisualLabel.GetLabelCaption: string;
begin
result := TextLabel.Text;
end;

function TEditVisualLabel.GetLabelFontColor: TAlphaColor;
begin
Result := FloatColor.StopValue;
end;

function TEditVisualLabel.GetSHow: TShowLabel;
begin
if TextLabel.Visible then

Result := TShowLabel(0)
else
 Result := TShowLabel(1);
end;

function TEditVisualLabel.GetStartFont: Single;
begin
Result := FloatSize.StartValue;
end;

function TEditVisualLabel.GetStartValue: Single;
begin
Result := FloatVErt.StartValue;
end;

function TEditVisualLabel.GetStopFont: Single;
begin
Result := FloatSize.StopValue;
end;

function TEditVisualLabel.GetStopValue: Single;
begin
Result := FloatVErt.StopValue;
end;


procedure TEditVisualLabel.SetLabelCaption(Value: string);
begin
TextLabel.Text := Value;
end;


procedure TEditVisualLabel.SetLabelFontColor(Value: TAlphaColor);
begin
FloatColor.StopValue :=value;
end;

procedure TEditVisualLabel.SetShow(Value: TShowLabel);
begin
if Value = TShowLabel(0) then
    TextLabel.Visible := true
  else
   TextLabel.Visible := False;
end;

procedure TEditVisualLabel.SetStartFont(Value: Single);
begin
FloatSize.StartValue := Value;
TextLabel.TextSettings.Font.Size := Value;
end;

procedure TEditVisualLabel.SetStartValue(Value: Single);
begin
FloatVert.StartValue := Value;
end;

procedure TEditVisualLabel.SetStopFont(Value: Single);
begin
FloatSize.StopValue := Value;
end;

procedure TEditVisualLabel.SetStopValue(Value: Single);
begin
FloatVert.StopValue := Value;
end;
end.

1.jpg

2.jpg

3.jpg

Отредактировал Alexander Samosyuk

Поделиться сообщением


Ссылка на сообщение

Рекомендуемые сообщения

  • 1

для вручную создаваемых контролов внутри компонентов, нужно ставить

<Control>.Stored := false;

а для самого компонента 

Self.Stored := true;

 

P.S. прочтите что означает это свойство

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От СергейК
      Добрый день!
      Почему в Embarcadero нет текстового компонента с подсветкой синтеза? 
    • От лёля
      Создание ссылки из TLabel.
      Приклике на label нечего не проиходит.
      label1.Font.Style:= fsUnderline - не работает.  Есть еще варианты?
    • От SIARHEI RAHOUSKI
      Как изменить цвет Label?  не работает
      Label1.Color := clBlue;  
    • От SIARHEI RAHOUSKI
      При нажатии на Label действия не происходят
      procedure TForm2.Label11Click(Sender: TObject);
      begin
      Button1.visible:= true;
      {label7.Font.Style:= [];
      label8.Font.Style := [];
      label9.Font.Style := [];
      //label11.Font.Style := [fsbold];
      label10.Font.Style := [];  }

        GroupBox12.Visible := false;
        GroupBox13.Visible := false;
        GroupBox14.Visible := false;
        GroupBox15.Visible := true;
        GroupBox16.Visible := false;
      end;
    • От Wovan2
      Здравствуйте.
      Пишу на Delphi 7. И все было нормально пока не у нас не появился терминал сбора данных на Androide. На Delphi 10 написал простенькое приложение. Но тут встала проблема с занесением данных в поле ввода со сканера штрихкода. В инете нашел, что это дело просто решается интентами. Вообще в windows я подобное делал: вешал процесс, следящий за com-портом, и при появлении данных на нем пересылал их куда надо. В Android должно быть не сложнее. Но я запутался во всей этой куче параметров и функций, передаваемых и получаемых "намерениями".
      В общем вот что мы имеем на данный момент.
      В настройках сканера прописано:
       
      Intent output - android.intent.ACTION_DECODE_DATA Intent string extra - barcode_string На просторах нашел запуск BroadcastReceiver.
      На событие получения сообщения повесил 
      ed.Text := JStringToString(csIntent.getExtras.getString(TJIntent.JavaClass.EXTRA_INTENT)); где csIntent параметр из  BroadcastReceiverOnReceive(csContext: JContext; csIntent: JIntent); Но ничего не выходит. 
      Я подозреваю, что данные из сканера где-то в структуре csIntent. Но, к сожалению, в отладке дальше адреса этой переменной пробраться не получилось.
      Причем строка ed.Text := JStringToString(csIntent.getAction); возвращает в Text название интента: "android.intent.ACTION_DECODE_DATA".
      Помогите разобраться со структурой JIntent. Спасибо.
       
       
    • От Вячеслав Холод
      Проблема такая, создаю динамически Label и нужно выровнять текст внутри по центру самой метки. 
      Пробовал: 
          with LabelG do
          begin
            StyledSettings := [];
            LabelG.TextSettings.Font.Family:='Century Gothic';
            LabelG.TextSettings.Font.Size:=14;
            LabelG.TextSettings.FontColor:=TAlphaColorRec.Aliceblue;
       -->  LabelG.TextSettings.HorzAlign.taCenter; (И :=taCenter и что только не пробовал)
          end;
       
      Помогите пожалуйста.
    • От striker
      Всем привет!
      Я новичок в FMX.
      Сталкиваюсь с проблемами различий с VCL.
      Некоторые проблемы:
      1) Текст в edit мышью невозможно выделить, выделение скачет.
      Думаю связано с заточкой под тач, как починить и возможно ли - нигде не нашёл.
      2) Покрасить грид (строчку) в зависимости от значения можно?
      В VCL это делается OnDrawColumnCell
      Спасибо!
    • От Rusland
      Имеется форма с Edit, в котором набран IP-адрес 192.168.1.12
      Если попробовать долгим тапом выделить весь текст (для копирования), то выделяется только какая-то одна цифра. Весь текст никак не выделить. Тоже самое будет, если вместо точек поставить любые другие знаки препинания или пробел. Как решить эту проблему?
       
    • От Error
      Я создал данную тему чтобы выяснить наличие спроса на кастомные FMX компоненты. При наличии спроса будут появляться новые FMX компоненты.
       
      TEsImageSelection

      Начну с компонента позволяющего выделать часть изображения или фотографии, может быть полезно для создания аватарки в вашем приложении, графических редакторах, и подобном. Предусмотрен режим контроля границ, пропорционального выделения - к примеру для квадратной\круглой аватараки.
      Интересно наличие спроса на данный компонент за цену в $8? (+вы получаете поддержку и новые версии в течении года)
    • От Alesk
      Фрагмент кода:
      nad[g]:= tlabel.Create(tabbedwithnavigationform.label1); nad[g].BeginUpdate; nad[g].Size.height:=24; nad[g].Size.Width:=350; nad[g].Text:=we; nad[g].position.y:=-99; nad[g].Align:=talignlayout.Top; nad[g].FontColor:=$FFFEFEFE; nad[g].EndUpdate; nad[g].Parent:= pod[g]; где nad[g] - массив из tlabel, а pod[g] - массив из tlistview
      Нужно чтобы при создании цвет текста становился белым, но почему-то не работает, цвет остается черным
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...