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

Rusland

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

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

  • Посещение

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

    26

Активность репутации

  1. Like
    Rusland отреагировална ENERGY в Печать с планшета   
    А это читали? Google CloudPrint
    https://community.embarcadero.com/blogs/entry/printing-from-an-android-device-using-firemonkey-272
  2. Like
    Rusland получил реакцию от Kitty в [Андроид]контроль интревала времени в сервисе   
    Стандартный TTimer использовать нельзя. Тут посмотрите 
  3. Like
    Rusland отреагировална Mars M в 2D<>3D координаты   
    Есть такие функции LocalToAbsolute3D и AbsoluteToLocal3D 
    С первой разобрался(пример), со второй тоже в принципе ясно.
    Осталось только разобраться как это применить
    PS: пример честно скопипастил отсюда  у него там есть и другие интересные проекты.
    https://github.com/LUXOPHIA/Sketch3D
     
    Projects.rar
  4. Like
    Rusland отреагировална Mars M в 2D<>3D координаты   
    Спасибо, гляну, может что и найду там
    Вот тут тогда тоже может быть то чего нету в примерах 
    https://sourceforge.net/p/radstudiodemos/code/HEAD/tree/trunk/Object Pascal/
  5. Like
    Rusland отреагировална ENERGY в 2D<>3D координаты   
    Кстати на гитхабе есть ветка с примерами программ, которых нет в  Samples в последних версиях Delphi (часть примеров удалили в новых версиях), и там встречаются интересные примеры, втч. и связанные с 3D.
    Может это вам поможет. https://github.com/FMXExpress/Firemonkey/tree/master/Embarcadero
     
    Я бы на вашем месте скачал все примеры, распаковал их, а затем в Total Commander запустил бы поиск по тексту в *.pas файлах, например 'TViewport3D'
  6. Like
    Rusland получил реакцию от erden1 в [Android] Проблема с MediaPlayer   
    Проверьте, есть ли файл по этому пути с помощью FileExists()
    Может быть из-за символа # деплой не срабатывает.
  7. Like
    Rusland отреагировална Pavel Vasilev в Аналог GLScene для Firemonkey   
    Только с тех пор адрес и название сменилось для поддержки OpenVX  на
    https://sourceforge.net/p/glscene/code/HEAD/tree/branches/VXScene/
  8. Like
    Rusland отреагировална Pavel Vasilev в Возможно ли работать с OpenGL в FireMonkey?   
    Да, можно, пример использования OpenGL 
    в FireMonkey есть  по адресу  
    https://github.com/tothpaul/Delphi.
    Там в демосе CubeMan3D используется модуль Execute.CrossGL.pas с реализацией кросс-платформенного 
    контекста для Windows, MacOSX, Android и Linux.
    Также в проекте VXScene (https://sourceforge.net/p/glscene/code/HEAD/tree/branches/VXScene/Source/Basis/) 
    подключен модуль VKS.OpenGLFMX для работы 
    с OpenGL в FireMonkey под Win32/Win64.
  9. Like
    Rusland отреагировална ENERGY в Доступ к Объекту в TListBox   
    Создаете свой стиль для ListBox (точнее редактируете на основе стандартного). Там можно все визуально настроить как на обычной форме. Указываете этот StyleBook форме.
    Имена объектов указываете в StyleName каждого объекта.
    Чтобы менять картинку просто указывая image index для ListBox Item'a (vItem.ImageIndex ) картинка TGlyph  должна иметь имя 'glyphstyle'.
    Далее обращаетесь к ним по StyleName именам так:
    vItem.Text := vCampaign.Name; vItem.StylesData['descript'] := fCore.Settings.LoadCampaignDescr(vCampaign.Name); vItem.StylesData['details'] := ''; vItem.ImageIndex := 3; В моем случае descript и details - это TText.
    А вот так работать можно с любыми контролами:
    vItem.NeedStyleLookup; vItem.ApplyStyleLookup; // without this, FindStyleResource will return nil vSwitch := vItem.FindStyleResource('switch') as TSwitch; Assert(vSwitch <> nil); vSwitch.IsChecked := vCampaign.Enable; vSwitch.OnClick := DoOnClickCampaignSwitch;  
    ну и на всякий случай: 
    vItem := TListBoxItem.Create(nil); vItem.Parent:= Listbox; Listbox.AddObject(vItem); vItem.StyleLookup := 'CampaignItem';
     
  10. Like
    Rusland отреагировална Mars M в Узнать размер видеопамяти   
    Подниму тему. CUDA конечно хорош(а?), но только для nvidia.
    Наткнулся тут на работу с OpenCL в делфи http://www.delphisources.ru/forum/showthread.php?t=28188
    Там по ссылке в первом сообщение в принципе все есть что нужно. Кому оттуда не удобно перезалил все файлы https://yadi.sk/d/t3mPqlJT3HnfiX
    Вот пример использования https://yadi.sk/d/bmDKXZ0k3Hnfny
    Проверял на картах nvidia и ati, конечно же карты должны поддерживать OpenCL.
    Если в MyOpenCL.pas чего то не хватает, можно взять это в CL.pas из GLScene https://sourceforge.net/p/glscene/code/HEAD/tree/trunk/Source/ParallelAPIs/
    Я например добавил константу   CL_DEVICE_LOCAL_MEM_SIZEэ
    А можно использовать родные CL.pas и CL_Platform.pas, в первом архиве есть пример использования.
    В архиве как раз есть рабочий пример вычислений 
  11. Like
    Rusland отреагировална Евгений Корепов в Проблема с сохранением объекта в TagObject   
    Потому что это служебное поле, за которое объект-владелец не в ответе. Для иного вы можете использовать Image2.AddObject() - в этом случае Image2 будет знать о своих "детях" (Image2.Children в количестве Image2.ChildrenCount) и при самоубийстве покарает и детей. А в случае TagObject он проигнорирует содержащийся там объект  и возникнет утечка памяти. Воспринимайте TagObject как средство хранения ссылки на реально существующий в приложении объект, а не как место хранения самого объекта.
  12. Like
    Rusland отреагировална Евгений Корепов в Проблема с сохранением объекта в TagObject   
    Ага, разобрался - все дело в объявлении TagObject как "слабой" ссылки: [Weak] FTagObject: TObject, т.е. присвоение этому полю не увеличивает счетчик ссылок и объект будет жив только в пределах вашей процедуры. Грубо говоря в "слабой" мы храним объект до тех пор, пока он хранится где то еще.
    Вам НЕОБХОДИМО создавать ГЛОБАЛЬНУЮ структуру для хранения этих объектов. К примеру сохранит картинки в TObjectList (модуль System.Generics.Collections), и после этого уже присваивать их в Image2.TagObject
    Вот работающий вариант вашего кода:
    unit copystream; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects, System.Generics.Collections; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; SaveBut: TButton; LoadBut: TButton; procedure SaveButClick(Sender: TObject); procedure LoadButClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } FImageStore : TObjectList<TMemoryStream>; public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin FImageStore:=TObjectList<TMemoryStream>.Create; end; procedure TForm1.LoadButClick(Sender: TObject); begin if Assigned(Image2.TagObject) then Image2.Bitmap.LoadFromStream(Image2.TagObject as TMemoryStream); end; procedure TForm1.SaveButClick(Sender: TObject); Var LStream : TMemoryStream; begin LStream:=TMemoryStream.Create; FImageStore.Add(LStream); try Image1.Bitmap.SaveToStream(LStream); finally Image2.TagObject:=LStream; end; end; end.  
  13. Like
    Rusland отреагировална Евгений Корепов в Проблема с сохранением объекта в TagObject   
    Действительно с TMemoryStream не работает, хотя вот так работает превосходно:
    procedure TForm1.LoadButClick(Sender: TObject); begin if Assigned(Image2.TagObject) then Image2.Bitmap.Assign(Image2.TagObject as TBitmap); end; procedure TForm1.SaveButClick(Sender: TObject); begin Image2.TagObject:=Image1.Bitmap; end; Насколько критично для вас использовать прокладку в виде TMemoryStream? С TMemoryStream счетчик Image2.TagObject.RefCount по какой то причине обнуляется при выходе из процедуры SaveButClick. Не понятно.
  14. Like
    Rusland отреагировална ENERGY в Кнопки у ListVew ItemAppearance   
    Есть еще один альтернативный способ доступа к объектам.
    Вместо AItem.Objects.FindDrawable('TextButton16')  можно обращаться по индексам. Это гораздо быстрее. Т.к. не нужно перебирать все объекты и сравнивать их строковые имена. К примеру в моем случае их аж 16, и у каждого есть имя. Каждое строковое имя нужно перебрать и сравнить с искомым. При этом в OnUpdateObjects это может делаться несколько раз на каждый List item.
    Сделать это можно так:
     
    aItem.View.ViewList[x]
    Напр:
    aItem.View.ViewList[10].Height := 30;
    Список можно посмотреть так: 
    В инспекторе объектов, найдите ListView, в нем Item. Выберите его, и в списке свойств нажмите Objects- это и будет полные список объектов. Начинается он с нуля. Отсчитаете нужный, и можно работать с ним.
    Upd:
    Также можно  изменять объекты TListItem'a по индексу вместо Data['name']. Там тоже используется FindDrawable.
    Для этого сначала нужно добавить один раз значение через Data для любого из объектов чтобы создать нужны структуры (обычно для первого Object'a ), а затем уже заполнять по индексу остальные Objects в любой последовательности (не обязательно подряд).
     vItem.Data['T']  := 'Text'  // Data['T'] - это текст ListItem, так он стандартно обозначен
    Дальше уже добавляем текст в объекты через индекс: 
    (vItem.View.Drawables[5] as TListItemText).Text := 'Text 5';  
    (vItem.View.Drawables[1] as TListItemText).Text := 'Text 2';  
     
  15. Like
    Rusland отреагировална ENERGY в Кнопки у ListVew ItemAppearance   
    Ребята, если вам нужна кнопка с картинкой на ListView, то это можно сделать скомбинировав  картинку  с кнопкой  . 
    Сначала добавляете TTextButtonObjectAppearance, затем TImageObjectAppearance и устанавливаете картинку поверх кнопки.
     
    Чтобы определить по какому элементу Item'a кликнул юзер: 
     
    procedure TForm1.ListView1ItemClickEx(const Sender: TObject; ItemIndex: Integer; const LocalClickPos: TPointF; const ItemObject: TListItemDrawable); begin   if ItemObject = nil then exit;   ShowMessage('Name: ' + ItemObject.Name + sLineBreak + 'Text: ' + (ItemObject as TListItemText).Text); end;
     
  16. Like
    Rusland отреагировална dnekrasov в Как использовать CopyFromBitmap   
    Маленький примерчик
     
    CopyFromBitmap.zip
  17. Like
    Rusland отреагировална krapotkin в Исключить устройства с Intel Atom как не поддерживаемые   
    там стоит заглушка, которая выводит надпись "ваша платформа не поддерживается, до свидания"
    но факт в том, что на большом кол-ве интел стоит библиотека houdini которая поддерживает запуск программ, написанных для ARM
    в результате и ваша программа тоже имеет шанс запуститься. поэтому, убрав эту птицу, вы можете "без программирования", как это принято в RAD Studio ))) получить хороший результат )))
  18. Like
    Rusland отреагировална Равиль Зарипов (ZuBy) в XE10.2 Tokyo есть запись вебинара от 28.03.2017?   
    это просто печенька для разрабов, чтобы не сваливали со студии. Мол всё будет, но "завтра"
  19. Like
    Rusland отреагировална Pavel Vasilev в Компонент TLang   
    Да, теперь всё работает и в рантайме. Не нашел Autotranslate  в инспекторе в свойствах меню, а могли бы туда и добавить, чтобы не писать в коде лишнего.
    Тест исправлен.  
    TestTLang_Menu.rar
  20. Like
    Rusland отреагировална enatechno в Компонент TLang   
    Ваша ошибка, что вы пытаетесь перевести текущий текст, который отображается. Нужно переводить английский (английские слова как бы являются индексом для перевода). В этом случае TransManually не нужен. Например вместо MenuItemFile.Text := TransManually(MenuItemFile.Text); нужно писать:
    MenuItemFile.Text := Translate('File'); Или более простой способ, задать один раз (например в Create):
     
    MenuItemFile.AutoTranslate := true;  
  21. Like
    Rusland отреагировална enatechno в XE10.2 Tokyo есть запись вебинара от 28.03.2017?   
    Похоже первый hotfix . 
     


     
  22. Like
    Rusland отреагировална ElenaS. в Новая версия FastReport FMX   
    Добрый день. Теперь у продукта универсальный установщик, вместо отдельных для каждой версии. На сайте поменяли.
  23. Like
    Rusland отреагировална Fedor K в Как отключить TLang на форме/компоненте?   
    Дело в том, что TComboBox лишь контейнер, вам нужно обращаться именно к списку элементов в ListBox. Чтобы запретить перевод можно поступить так:
    var i, count : integer; begin count := cbbFiles.Count - 1; for i := 0 to count do cbbFiles.ListBox.ListItems[i].AutoTranslate := False; end;  
  24. Like
    Rusland отреагировална Евгений Корепов в [Статья] Настройка пуш уведомлении через сервис Firebase для ANDROID и IOS [Часть 2]   
    Равиль, сразу извиняюсь, готов понести наказание, но запощу решение. 
    Как уже говорил все просто, если у вас 4345 сообщений, то делим массив токенов и отправляем 4 раза по 1000, и один раз 345. Не забывайте что вы программисты, и во всех языках программирования это делается одинаково просто. Вот код, писал прямо в гитхабе, естественно не проверял, если что то упустил, прошу прощения (а упустил я анализ результата).
    function pushSendOver1000($title, $text, $tokens, $server_key) { $Count_Success = 0; $DeviceCountMax = 1000; $DeviceCountIndex = 0; $DevicesTokenPacketArray = array(); while ($DeviceCountIndex<=count($tokens)) { $DevicesTokenPacketArray = array_slice($tokens, $DeviceCountIndex, $DeviceCountMax); pushSend($title, $text, $DevicesTokenPacketArray, $server_key); $DeviceCountIndex = $DeviceCountIndex + $DeviceCountMax; } } Запостил также на гитхаб. Можете ручками добавить функцию в конец https://github.com/rzaripov1990/PUSHTestFCM/blob/master/pushTest/push.php и соответственно вызывать не pushSend, а pushSendOver1000
  25. Like
    Rusland отреагировална ENERGY в Разрешение/запрет гасить экран   
    Вот вариант, его можно применять в любом месте (обычно в OnCreateForm), не обязательно в DPR. 
    Флаг можно добавлять и удалять.     
    Для обычного запрета выключать экран нужен только лишь флаг FLAG_KEEP_SCREEN_ON, остальные не нужны.
     
    Для Tokyo и возможно поздних версий, CallInUIThread не нужен.
    {$IFDEF ANDROID}   procedure TurnOnAndKeepScreenAndroid(aEnable: boolean);   var     vFlags: integer;   begin     vFlags := TJWindowManager_LayoutParams.JavaClass.FLAG_TURN_SCREEN_ON or         TJWindowManager_LayoutParams.JavaClass.FLAG_DISMISS_KEYGUARD or         TJWindowManager_LayoutParams.JavaClass.FLAG_SHOW_WHEN_LOCKED or         TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON;     if aEnable then     begin       CallInUIThread (   // uses FMX.Helpers.Android       procedure       begin         TAndroidHelper.Activity.getWindow.setFlags (vFlags, vFlags);       end );     end     else       CallInUIThread (       procedure       begin         TAndroidHelper.Activity.getWindow.clearFlags (vFlags);       end );   end;   {$ENDIF}
     
×
×
  • Создать...