Перейти к содержанию
Fire Monkey от А до Я

d7d1cd

Пользователи
  • Постов

    277
  • Зарегистрирован

  • Посещение

  • Победитель дней

    7

Сообщения, опубликованные d7d1cd

  1. Понятно, что костыль. Но что делать...

    По поводу Вашего метода: думаю, что мой метод лучше тем, что в нем используется только одна анимация, а так же минимум кода. Я, кстати, всегда стараюсь писать как можно меньше кода, ибо есть золотое правило: чем сложнее механизм, тем более вероятно, что он сломается. Хотя может я и не прав :)

  2. Все это можно сделать при помощи одной анимации.

    В инспекторе объектов:

    FloatAnimation1.PropertyName = "Scale.X";

    FloatAnimation1.StartValue = 1;

    FloatAnimation1.StopValue = 3;

    FloatAnimation1.Inverse = true;

    procedure TForm1.Panel1MouseEnter(Sender: TObject);
    begin
    FloatAnimation1.Inverse = not FloatAnimation1.Inverse;
    FloatAnimation1.Start;
    end;
    
    procedure TForm1.Panel1MouseLeave(Sender: TObject);
    begin
    Panel1MouseEnter(this);
    end;
    
    

    Но только топикстартеру похоже это уже не надо.

  3. ...при наведении мыши на контрол управления в панели(допустим кнопка) соотвественно панель сворачивается. По логике работы всё верно, но "оно мне так не надо".

    Хм... А как Вам надо? И почему у Вас по логике верно, что при наведении мыши на контрол, панель должна свернуться? Как я понимаю, в обычном состоянии панель у Вас не должна быть видна. Тогда вопрос: куда надо навести курсор мыши, чтобы панель появилась? А если панель в обычном состоянии видна, то по Вашей "верной логике работы" при наведении на нее мыши панель свернется. Как же тогда на ней нажать кнопку?

  4. - Откройте Notepad++

    - загрузите в него Ваш стиль (*.style)

    - найдите любой ....button и сделайте копию этого блока

    - назовите его иначе (StyleName = '___buttonstyle')

    - сохраните файл и откройте его в проекте - увидите вашу "новую" кнопку "___buttonstyle"

    - меняйте ее как Вам угодно...

    вот вы получите новый стиль кнопки

     

    это просто самый быстрый вариант создать "унаследованный" вариант кнопки, но со своим стилем)

     

    Вообще вариантов много...

    Спасибо за совет. А подскажите еще как изменить картинку кнопки на какую-то свою?

  5. все делается кодом, то что вы в инспекторе поставили не значит, что оно по волшебству работает. так что не ленитесь и делайте

    Понятно, что кодом можно сделать все. Я думал можно через инспектор... Значит буду делать. Спасибо всем!

  6.  

    rustam_d, Ваше решение хорошо подходит для того случая, когда количество кнопок постоянно. Однако в моей программе количество кнопок не будет постоянным. 

    )) по вашему тут на форуме везде примеры из реальных программ? вообще все стараются по проще, доходчивее...а динамика то ваш удел... и в моем примере можно )

     

    И как же в Вашем примере можно сделать то, что мне надо?

  7. это делается так

    • TLayout = Top\Bottom
    •      TLayout = Center
    •            Button1 = Left\Right
    •            Button2 = Left\Right
    •            Button3 = Left\Right
    •            Button4 = Left\Right
    •            Button5 = Left\Right

    attachicon.gifcenter_demo.zip

    В этом случае, при скрытии одной или нескольких кнопок, остальные кнопки будут прижаты к одному краю (левому или правому). При этом группа видимых кнопок будет уже не по центру окна. Здесь есть решение: нужно ширину второго Layout-а всегда устанавливать равной суммарной ширине видимых кнопок. Но вот хотелось бы решение, когда настроил в инспекторе объектов и забыл, так сказать.

  8. rustam_d, спасибо за ответ и за картинки. Хочу обратить Ваше внимание на то, что я знаю что такое Margins. Кроме этого хочу сказать, что Ваше решение хорошо подходит для того случая, когда количество кнопок постоянно. Однако в моей программе количество кнопок не будет постоянным. Некоторые из них будут скрываться (отображаться) изменением свойства Visible. При этом группа кнопок, из какого бы количества она не состояла, должна оставаться в центре.

  9. Приложил тестовый проект. Задача: настроить свойство кнопок 1, 2, 3 так, чтобы при изменении размеров окна, а так же при изменении видимости каждой из кнопок группа этих кнопок всегда была в центре. Размер кнопок меняться не должен, расстояние между кнопками меняться не должно.

    Test.zip

  10. Ну если ваши кнопки должны растягиваться и расстояние должно оставаться между ними ровно 20 пикселей, то сделайте у всех кнопок align=client и margin(top=5,bottom=5,right/left=10 кроме первого и последнего).

    Нет, кнопки не должны растягиваться. Вот если необходимо чтобы кнопки были, например, справа и расстояние между ними 20, то я делаю у всех кнопок Align = Right, Margin->Left = 20. В результате они все аккуратненько стоят друг за другом в правой части родителя (TLayout). Если же сделать Align = Center, то все кнопки располагаются в центре друг на друге. При выравнивании справа, слева, сверху и снизу такого нет: они располагаются друг за другом. Почему выравнивание в центре располагает компоненты друг на друге?

  11. Думаю, вам поможет TGridPanelLayout. Делаете один ряд с 5 колонками по 20% шириной. и внутри у каждого своего элемента делаете align=center и фиксированный размер 40х40. Это если я вас правильно понял.

    Ваш совет хорош. Однако расстояние между кнопками не равно 20 пикселей. При разных размерах формы оно разное.

  12. Доброго времени суток! На форме расположен TLayout. Установлены следующие свойства: Align = Bottom, Height = 50. Далее на него помещаются 5 кнопок все одинакового размера 40х40. Возможно ли только установкой свойств в инспекторе объектов сделать так, чтобы кнопки расположились горизонтально с равными промежутками в 20 пикселей и равномерно относительно центра TLayout? При изменении размеров формы указанное выравнивание должно сохраняться.

  13. Не знаю, конечно, как остальным, но как по мне - так ссылка крайне неудачная... Отпадает желание смотреть.

    Это точно! До просмотра, наверное, никто не дождался.

  14. Взять и привести TControl к вашему классу фрейма.

    У меня будет несколько фреймов. Соответственно классы у них разные. Кроме этого, переменная TControl может указывать не на фрейм, а на объект типа TScrollBox.

    Ваш совет хорош, сам думал над ним. В TControl есть переменная TagString. Там можно хранить имя класса объекта, указатель на который сейчас хранит сама переменная типа TControl. Но как привести указатель в TControl к классу в текстовой переменной?

    TControl *Control = new TFrame1(this);
    Control->TagString = L"TFrame1";
    
    // Как теперь создать переменную класса, хранящегося в Control->TagString?
    // Возможно ли это?
    
  15. Глубочайше извиняюсь, что запутал всех. Приведенный в моем вопросе код немножко не такой. В качестве указателя на фрейм у меня используется глобальная переменная типа TControl:

    // MainUnit.h
    TControl *Frame;
    
    void __fastcall TMainForm::Button1(TObject *Sender)
    {
     Frame = new TFrame1(this);
     Frame->Parent = this;
    }

    Именно поэтому через эту переменную я не могу напрямую "достать" кнопку.

  16. Наверное я не правильно выразился. Фрейм я создаю в системе (File->New->Other->C++Builder Files->FireMonkey Frame). Располагаю на нем кнопку и удаляю фрейм из автоматически создаваемых (Project->Options->Forms). Это для того, чтобы фрейм не занимал оперативную память, когда он не выведен на экран. Для вызова фрейма в главном окне нажимается кнопка. При нажатии для фрейма выделяется память, меняется надпись на кнопке и фрейм выводится на экран.

    Как Вы понимаете, это тестовый проект.

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