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

Виктор

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

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

  • Посещение

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

    2

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

  1. Доброго дня, комрады.
    Как в listview сделать перетаскивание конкретного item, а в частности его изображения?

     

    Создали item-ы, загрузили изображения.

    Bitmap:=TBitmap.Create(120,120);
    Bitmap.LoadThumbnailFromFile(Memo1.Lines[Count-1],120,120);
    ListItem:=listview1.Items.AddItem;
    ListItem.Bitmap.Assign(Bitmap);
    

    Отключили в listview все кнопки и надписи. Остались только изображения и скрол. А автоматическом режиме, не получается выделить item, и переносит сразу весь listview

  2. Допустим есть несколько копий приложения запущенных с разных компьютеров не в локальной сети. Расскажите как лучше всего организовать обмен информацией между ними? Какими компонентами лучше воспользоваться, как все построить? Предположим есть два варианта, у нас есть отдельно стоящий компьютер выполняющий роль сервера, и вариант когда такого компьютера нет. Для справки допустим что мы создаем самый простой аркадный Примитивный космический симулятор, для некой ролевой игры.

  3. Для этого надо найти ближайшего родителя у элемента класса, нужного класса (прошу прощения за тавтологию). С помощью вот такой вот универсальной функции.

    Item := TListBoxItem(FindItemParent(Sender as TFmxObject,TListBoxItem));
    
    function FindItemParent(Obj: TFmxObject; ParentClass: TClass): TFmxObject;
    begin
      Result := nil;
      if Assigned(Obj.Parent) then
        if Obj.Parent.ClassType = ParentClass then
          Result := Obj.Parent
        else
          Result := FindItemParent(Obj.Parent, ParentClass);
    end;
    
  4. Доброго дня.

    Что бы получить дочерний item зная его индекс надо воспользоваться функцией ItemByIndex самого ListBox-а:

    var
      Item: TListBoxItem;
      Index: Integer;
    begin
      Item := ListBox1.ItemByIndex(Index);
    end;
    
  5. Если у вас на клики по элементам ListView не будет больше никаких действий, то правильней будет если пользователь будет иметь возможность кликнуть в любую часть строки (для этого обработку клика надо делать всей строки, а элементам отключать HitTest). Галочек как и полос прокрутки на мобильных девайсах стоит по возможности избегать, по ним неудобно попадать. В качестве места для расположения редактора времени я бы предложил невидимую до нажатия панельку, это ускорит работу ибо не потребуются ресурсы на создания окна. Уточню, что я не в курсе как там дела именно на android-е, и можно ли там отрисовать панельку поверх других элементов формы. Но если можно это на мой взгляд лучший вариант. А область за панелькой просто затемнить в момент её появления, что бы сконцентрировать внимание пользователя на ней.
     

  6. Доброго дня. 
     

    Суть вопроса в следующем. Мне надо создать директорию, в название которой надо положить путь к другой директории. Разумеется надо обойти проблему недопустимых символов / и : . И длину. В win путь не может превышать 255 символов. Таким образом мне надо еще и ужать путь хотя бы до максимум 100 символов. Не подскажите как средствами языка реализовать подобное?

  7. Реализовать данные события можно через стили. Находишь в стиле элемент клик на который должен вызывать раскрытие или закрытие дочернего элемента (плюсик, стрелочка и т.д.). Как правило это элемент класса TButton или TButtonStyleObject, что бы мог изменять состояние при нажатии автоматически. Создаешь процедуру которая будет присваивать элементу стиля обработчик нажатия.

    procedure TFForder.TreeView2ApplyStyleLookup(Sender: TObject);
    var
      Item: TTreeViewItem;
    begin
      Item := TTreeViewItem(Sender);
      Item.StylesData['button'] := TValue.From<TNotifyEvent>(Click);
    end;
    

    При создании дочернего элемента TTreeView:

    It.OnApplyStyleLookup := Treeview2.OnApplyStyleLookup;

    И пишешь саму процедуру при нажатии на элемент стиля где выясняешь надо свернуть или развернуть элемент:

    function FindItemParent(Obj: TFmxObject; ParentClass: TClass): TFmxObject;
    begin
      Result := nil;
      if Assigned(Obj.Parent) then
        if Obj.Parent.ClassType = ParentClass then
          Result := Obj.Parent
        else
          Result := FindItemParent(Obj.Parent, ParentClass);
    end;
    procedure TFForder.Click(Sender: TObject);
    var
     Item: TTreeViewItem;
    
    begin
      TreeView2.BeginUpdate;
      Item := TTreeViewItem(FindItemParent(Sender as TFmxObject,TTreeViewItem));
    
      if Item <> nil then
        if Item.IsExpanded = False then 
        begin
          //здесь пишешь то что надо сделать при разворачивании элемента
          Item.Expand;
        end 
        else 
        begin
          //здесь пишешь что надо сделать при сворачивании элемента
          Item.Collapse;
        end;
      TreeView2.EndUpdate;
    end;
    
  8. Добрый день.

     

    Берем XE6. Берем дефолтный дизайнер, дефолтный стиль. Генерим тест Faremonkey style. Пытаемся максимизировать окно кнопкой на заголовке формы. Кнопка меняет свой стиль, а вот окно не максимизируется. Тоже самое происходит и если в stylebook положить стиль для формы. Новые бордюры и кнопки отрисовываются, а вот оно перестает максимизироваться. Однако если запустить тот же дефолтный стиль под тестом VCL, то окно спокойно увеличивается. 

    Как побороть сей казус?

  9. Resize дает плохой результат. При уменьшении размеров форма в начале уменьшается, а потом увеличивается, в результате мерцание. Раньше вроде было событие onCanResize которое срабатывало перед изменениями размеров, но счас такого не нашел.

  10. Не, не, Optimus работает только с win 7 и выше. Я говорю про стандартные общие настройки. Регулировка настроек приложения с просмотром. Там есть галочка "согласно настройкам приложения" когда её отключаешь и выкручиваешь качество на максимум вроде сглаживание появляется. Отсюда делаем вывод, что приложение просто не сообщает что его надо сглаживать.

  11. Во слышу, объективную речь.

    Тут дело вот в чем, в настройках NVIDIA зачастую стоит "как указанно в приложении" по крайней мере там где я тестировал, так вот приложение не сообщает что его надо сглаживать. А вот если выставить настройки видеокарты в максимум, то кое какое сглаживание начинает появляться. На рабочем компе у вас просто наверно на макс. выставлено.

    В инете говорят, что сглаживание на ХР то появлялось то исчезало от ХЕ2 до ХЕ6, от обновления к обновлению и все не могли нормально сделать. Ме поверю, что нельзя подкрутить что бы сглаживание заработало.

  12. Оу... у меня то давно "более современная ось", а вот у пользователей программ, а они не сотрудники предприятия, а рядовые граждане доля XP существенна.

    Однако судя по комменатриям в инете в XE6 на ХР сглаживание работает....

  13. ЧуднО не поддерживать винду доля которой 30%( И ладно бы сама студия не запускалась бы на XP это понятно, но программы скомпилированные в ней должны же работать на 30% машин как надо((

    Ладно, политику Embarcadero можно обсуждать долго и бесполезно. Хотя бы подскажите как можно нашаманить, что бы было сглаживание в программах под ХР?

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

    И так что мы имеем по кнопке создается новая форма, если убрать строку: 

    Form5:=Button1.Parent as TForm5;
    

    Из модуля второй формы то вылетит с ошибкой. Почему так?

    Кроме этого если у второй формы убрать системные иконки, то задать ей размеры при создании не получится, она будет создана с размерами заданными в дизайнере, и не центруется по центру объекта родителя. Если задать parent в ручную при создании, то форма отцентруется, но опять же заданные в oncreate размеры не применяться. Как это побороть?

    Projects.zip

  15. Речь в данном случаи идет о стиле для combobox. Он состоит из общего ButtonStyleObject на котором расположены шрифт, контент и прочие, так же не нам расположен и еще один ButtonStyleObject на который повешена текстура стрелочки вниз. Везде Hittest:=False. Соотвественно контрол обрабатывает клик по всему элементу что полностью устраивает, однако во втором ButtonStyleObject при нажатии не меняется текстура с Normal на pressed, а надо что бы менялась. Я конечно сделал как предложено в дефолтном варианте с текстурами загруженными в основной контейнер ButtonStyleObject, но хотелось бы знать на будущие как можно реализовать нажатие на внутренний элемент стиля при условии что Hittest:=False.

    Предложенный вариант не сработал:
    [dcc32 Error] FotoOrder.pas(452): E2010 Incompatible types: 'IControl' and 'TFmxObject'
    В строке:
     

    StyleObjectControl := IControl(StyleObject);
    
    StyleObjectControl := IControl(StyleObject as IControl);
    

    При этом код заработал, но эффекта не произвел.

  16. Ну что вам посоветовать. Правильно сказал товарищ выше, 100% нет. Да, есть над чем поработать и Embarcadero и программистам поизвращаться. Но честно говоря firemonkye стала для меня приятным сюрпризом, и как это принято говорить произвела wow-эффект. 

    Так что если есть желание развиваться вместе с современными технологиями, то конечно же стоит работать в firemonkey. Хотя Embarcadero уверяет что они не забросят VCL, но совершенно очевидно что темпы развития замедляться, именно faremonkye будет обеспечивать продвижение продукта на рынке. Ну а для глюков и трудностей есть этот форум. За что отдельно спасибо Ярославу Бровину.

  17. Хочу спросить вот что:

    Может взгляд совсем замылился, но создаю форму (в автосоздании убрано все кроме главной и data модуля), после создания пытаюсь обратиться к созданной форме из её же unit-а, и вылетает с ошибкой. Переменная пуста.

    FFOrder:=TFFOrder.Create(Form1);
    
    FFOrder.Parent:=Form1;
    FFOrder.Name:='FFOrder';
    FFOrder.ShowModal;
    FFOrder.Free;
    
    // в модуле Order обращаемся в форме и ошибка
    
    FForder.Width:=DataM.Formwidth;
    

    Костыль от этого я придумал, но совсем уж какой-то костыльный (FForder:=Panel1.Parent as TFForder )
    Далее. Пытаюсь выставить размеры созданной формы в oncreate. Если в настройках формы отключить borderIcons то в модуле FMX.forms мы попадем в процедуру Recreate  которая перерисует форму и выставит начальные размеры указанные в дизайнере. Как этого избежать?

     

    Projects.zip

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