Перейти к содержанию
  • Регистрация
  • 0
Авторизация  
Dozent

Создать в рантайме перетаскиваемый компонент

Вопрос

Вообщем столкнулся с такой бедой и не знаю как решить!

Мне нужно сделать в какой-то контейнер накидать лайауты, кнопки, имейджи, лейблы и тд.

Потом нужно чтобы это всё можно было таскать по скролбоксу и создавать копию такого же контейнера! Казалось бы всё можно сделать но тут я в тупике, почему? 

Я кинуть TCalloutRectangle на форму в нём расположил как мне нужно элементы и научил его двигаться в скролбоксе!! Сижу я тут такой радуюсь смотрю на код)

procedure TForm1.crtPhaseMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
  zX := X;
  zY := Y;
  zIsDragging := true;
  (Sender as TControl).BringToFront;
  (Sender as TShape).Fill.Color := TAlphaColorRec.Lightblue;
  (Sender as TShape).Root.Captured := (Sender as TShape);
end;

procedure TForm1.crtPhaseMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
begin
  if zIsDragging and (ssLeft in Shift) then
  begin
    (Sender as TControl).Position.X := (Sender as TControl).Position.X + X - zX;
    (Sender as TControl).Position.Y := (Sender as TControl).Position.Y + Y - zY;
    // (Sender as TShape).Fill
  end;
end;

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

procedure TForm1.Button1Click(Sender: TObject);
var
  Layout: TButton;
begin
  Layout := TButton.Create(GridLayout1);
  Layout.Parent := GridLayout1;
  Layout.StyleLookup := 'MainStyle3';
  Layout.Position.X := Layout1.Position.X + 10;
  Layout.Position.Y := Layout1.Position.Y + 10;
  Layout.Visible := true;
  GridLayout1.Height := GridLayout1.Height + Layout.Height;

end;

Сижу и думаю вот контрол сделал он по форме таскается круто шас ещё и научу его многожить)))

Но тут горячая обезьянка подкидывает сурпрайз)

У TCalloutRectangle  и ему подобным нет свойства LoockupStyle. А это значит что стиль я ему предать не могу) Но он хорошо передвигается по форме)

Ок делаю кнопку он вроде как стиль применяет, корява но это возмно мой касяк) Но он не передвигается по форме, а при клике по нему выдаёт ошибку

 

First chance exception at $773ADAE8. Exception class EInvalidCast with message 'Invalid class typecast'. Process RPScenarioEditor.exe (4084)

Чта делать я в замешательстве!!! Подскажите пожалуйста....

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


Ссылка на сообщение
Поделиться на другие сайты

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

  • 0
28 минут назад, Dozent сказал:

Ок делаю кнопку он вроде как стиль применяет

1). Что значит "применяет стиль"? TCalloutRectangle (как и TShape) не являются стилизованными объектами. Соответственно, понятие "стиль" (в контексте FMX) к ним не относится. 
Если нужен стилизованный объект, используйте TCalloutPanel.
2). TButton не является TShape, поэтому возможно из-за этого ошибка преобразования класса (Sender as TShape).
По приведенным фрагментам не понятно, что откуда вызывается. Приложите рабочий пример (п.2.2.5).

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


Ссылка на сообщение
Поделиться на другие сайты
  • 2
procedure TForm1.Label7Click(Sender: TObject);
var
  Phase: TCalloutRectangle;
begin
  Phase := crtPhase.Clone(ScrollBox1) as TCalloutRectangle;
  Phase.OnMouseDown := crtPhaseMouseDown;
  Phase.OnMouseMove := crtPhaseMouseMove;
  Phase.Parent := ScrollBox1;
  Phase.Position.X := crtPhase.Position.X + 10;
  Phase.Position.Y := crtPhase.Position.Y + 10;
  Phase.Visible := true;
end;

Замените у себя эту процедуру и удалите Button1 (как я и сказал выше, TButton не является TShape - поэтому и ошибка).

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


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

Авторизация  

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

    • От Алиса Романец
      Доброго времени суток, форумчане.
      Столкнулась с очень странной проблемой при попытке редактирования FMX стиля в RAD Studio 10.3 (но проблема, по крайней мере у меня, тащится ещё с 10.2) - при нажатии на любой элемент стиля в его структуре - она заменяется на структуру формы и выбранный элемент не отображается в инспекторе. При этом, нужно именно тыкнуть на элемент стиля, раскрытие групп работает и структура остаётся на месте. Единственный способ добраться до свойств элемента стиля - через Edit Custom Style на компоненте, что не очень удобно, да и не даёт целиком возможности редактировать стиль.
      Может я чего-то делаю не так или так и должно быть? Надеюсь на вашу помощь, ибо эти стили уже в печёнках сидят. Видео с последовательностью действий (youtube).
       
    • От SIARHEI RAHOUSKI
      Как изменить сам Header, скролы ? Я открывал стайл блок, но всё что смог изменить там это цвет полей и всё.

    • От Barbanel
      Всем привет!
      Корректируем стиль мобильного приложения для iOS, для этого дорабатываем png стиля и грузим его обратно в StyleBook.
      Дорабатываем только для Scale = 2,0 т.к. минимально поддерживаемый телефон - 5S (или просто 5).
      В редакторе форм отображается интерфейс так, как он выглядел бы для Scale = 1,0 но 1,0 нас не интересует вообще, мы его даже не рисуем.
      Вопрос: можно ли как-то видеть в редакторе форм интерфейс приложения для Scale = 2,0 ?

    • От Leandro Inacio
      Como posso definir o estilo de cada item do ListBox com uma imagem e nome diferente. Que estão no banco de dados.
    • От striker
      Всем привет!
      Я новичок в FMX.
      Сталкиваюсь с проблемами различий с VCL.
      Некоторые проблемы:
      1) Текст в edit мышью невозможно выделить, выделение скачет.
      Думаю связано с заточкой под тач, как починить и возможно ли - нигде не нашёл.
      2) Покрасить грид (строчку) в зависимости от значения можно?
      В VCL это делается OnDrawColumnCell
      Спасибо!
    • От ingword
      Здравствуйте.
      Подскажите пожалуйста.
      Можно ли с помощью стилей создать кнопку в которой размер текста будет меняться автоматически вместе с размером кнопки, так что бы текст "правильно" и "красиво" вписывался в размер кнопки, с учетом WordWrap и без него.
    • От Dozent
      Добрый день подскажите как побороть БАГУ!!!!
       
      XE8  стоит только изменить положение компонента или изменить его размер на форме как все элементы на форме становиться на видимыми!!!
       
      Допустим кинул кнопку на форму она сразу не видимая только очертания остаются. Необходимо F12 нажать 2 раза и компоненты появляются! 
       
      Начинаешь что-нить двигать всё пропадает!
       
      Как-то лечится?
    • От Dozent
      Добрый день!
       
      Создал в палитре стилей кнопку с картинкой!
      Указал у кнопки этот стиль в свойстве StyleLookup.
      Как мне теперь картинку туда положить?

    • От estra
      Можно ли изменить цвет TProgressBar?
    • От Andrey Efimov
      Знаю, что стили лежат тут:
      C:\Program Files\Embarcadero\RAD Studio\n.n\Redist\styles\Fmx\ C:\Users\Public\Documents\RAD Studio\12.0\Styles\ , но в папке «Android» есть только AndroidDark.fsf, a мне же нужен AndroidLight.fsf.
       
      Заранее спасибо.
  • Последние посетители   0 пользователей онлайн

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

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