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

AngryOwl

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

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

  • Посещение

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

    45

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

  1. Like
    AngryOwl отреагировална Brovin Yaroslav в Не удается перетащить (Drag and Drop) итем TListBoxItem между двумя TListBox   
    Я думаю, что пока предварительная информация доступна в виде тем тут: http://delphitour.ru/ Ждать осталось не долго, так что уже в скором времени будет доступна полная информация об этом. Еще у Embarcadero есть программа закрытого бета-тестирования, на которой даются ранний доступ к новым версиям среды. Я думаю, что для вас это будет актуально в будущем. В этом случае вы будите в полном курсе, какая работа идет и что новое появляется между каждыми версиями беты.
  2. Like
    AngryOwl получил реакцию от Kitty в [Android] Изменить вид кнопки по умолчанию   
    Извините, не правильно Вас понял.
    Нет, не надо конечно. Стиль грузится в контейнер TStyleBook и лежит в "бинарнике" соответственно.
    Нужно только в том случае, если Вы хотите в процессе работы программы менять стили (например - дать выбор стиля пользователю программы).
  3. Like
    AngryOwl отреагировална Andrey Efimov в [Android] Не удается использовать класс Camera.Size из Android API для изменения параметров камеры?   
    Вот сырое решение, проверено на демке «Mobile Snippets\CameraComponent»:
    Открываем FMX.Media.Android.pas, находим procedure TAndroidVideoCaptureDevice.DoStartCapture;
    После
      if TPlatformServices.Current.GlobalFlags.ContainsKey(EnableGlassFPSWorkaround) and     TPlatformServices.Current.GlobalFlags[EnableGlassFPSWorkaround] then   begin     Params.setPreviewFpsRange(30000, 30000);     Camera.setParameters(Params);   end добавляем необходимые настройки:
      Params.setPreviewSize(800, 480);   Camera.setParameters(Params); Сохраняем, запускаем демо, и картинка отображается и сохраняется из TBitmap с разрешением 480x800.
      Картинку в демке сохранял так: imgCameraView.Bitmap.SaveToFile(TPath.Combine(TPath.GetPicturesPath, 'test.png')); Очень важно не забывать, что камеры в устройствах поддерживают только определённые списки разрешений. Например, у моей камеры минимальное разрешение 640x480, 800x480, и т.д. по возрастанию.
  4. Like
    AngryOwl отреагировална estra в Несколько окон приложения в панели задач   
    Как на счет такого варианта?
    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} uses Unit2; procedure TForm1.Button1Click(Sender: TObject); begin Form2.Show; end; end. unit Unit2; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls; type TForm2 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.fmx} uses FMX.Platform.Win, Windows; var FHandle: THandle; procedure TForm2.FormCreate(Sender: TObject); begin FHandle := WindowHandleToPlatform(Form2.Handle).Wnd; SetWindowLong(FHandle, GWL_EXSTYLE, GetWindowLong(FHandle, gwl_exstyle) or WS_EX_APPWINDOW or WS_EX_ACCEPTFILES); end; end. Demo.zip
  5. Like
    AngryOwl получил реакцию от sviat9440 в Можно ли задать минимальные размеры для формы?   
    Я думаю со мной согласится абсолютное большинство, что ограничение размеров формы - это проблема!
    Причем проблема с "большой буквы".
    Как это сделать в VCL - все в курсе.
    Предвидя ответ, что это можно сделать самому "ручками", спрошу - почему все должны лезть в исходники Firemonkey и править "родные" модули, дабы достичь нужного результата?
    Вроде это самые элементарные свойства (предопределение минимальных/максимальных размеров формы).
    Поэтому очень хотелось бы вынести это "обсуждение"/проблему на рассмотрение Embarcadero. И, конечно, хотелось бы чтобы они эту проблему решили и решили в срочном порядке.
     
    Согласитесь (думаю и наши уважаемые гуру согласятся), что этот вопрос относится к элементарным и основным проблемам.
    Представьте себе любого начинающего FMX-прогера, который в первом же своем FMX-проекте столкнется с данной проблемой...
     
    P.S. Как крайний вариант - рассматриваю коллективное обсуждение и решение этой задачи с публикацией кода.
  6. Like
    AngryOwl получил реакцию от zairkz в Как программно добавить анимацию к TListBoxItem   
    "Height - не работает"
    а в Вашем TListBox, в котором Вы меняете Item'ы, свойство ItemHeight случаем <> 0 ?
    В смысле - если ItemHeight <> 0, то изменение свойства Height для любого TListBoxItem работать не будет
     
    P.S. Вот простой пример, который только-что опробовал и он прекрасно работает именно так, как Вам нужно
    (удаляет выбранный элемент списка с анимацией)
    ... TListBoxItem(TListBox(Sender).Selected).AnimateFloat('Opacity', 0, 0.3); TListBoxItem(TListBox(Sender).Selected).AnimateFloatWait('Height', 0, 0.3); TListBox(Sender).Items.Delete(TListBox(Sender).Selected.Index); ... P.P.S. проверил - все работает и на Windows и на Android. корректно и с анимацией
  7. Like
    AngryOwl отреагировална Kikoma в [TRESTClient] Использование кодировок в TRESTClient   
    Проблема решена с использованием UTF8EncodeToShortString
     
    Вот код:
    RESTRequest1.Params.AddItem( UTF8EncodeToShortString(edParam.Text), UTF8EncodeToShortString(edValue.Text), TRESTRequestParameterKind.pkGETorPOST,[poDoNotEncode] ); Всем спасибо.
  8. Like
    AngryOwl отреагировална Kikoma в [Android] Изменить вид кнопки по умолчанию   
    Как получилось у меня:
    1.То что вы открыли в Блокноте я полностью скопировал этот
    object TLayout
        StyleName = 'donetoolbutton'
      ...
    end
     
    Сохранил его в отдельный файл, при этом поменял StyleName = 'mydonetoolbutton'
    2. На форму бросил StyleBook1, щелкнул на нем два раза попал в редактор. По кнопке Load... выбрал выше созданный файл и его немного подредактировал: добавил Rectangle (Fill.Kind := None; Stroke (рамка) уже есть)
     

     
    Немного повозился с размерами и выравниванием. После кнопка Apply and Close
    3. Бросаю две SpeedButton, у одного набираю в StyleLookUp = mydonetoolbutton, у другого из списка выбираю StyleLookUp = donetoolbutton.
     

     
    Результат достигнут. На непоколебимость данного варианта не претендую, хотелось бы узнать мнение гуру.
  9. Like
    AngryOwl получил реакцию от Kitty в [Android] Изменить вид кнопки по умолчанию   
    Приношу свои извинения за то, что вероятно ошибся со стилем (так как он под XE5)
    Рекомендую Вам скачать архив для XE6 (http://cc.embarcadero.com/item/29808)
    Там есть стили под все ОС.
    AndroidDiamond
    AndroidJet
    AndroidSterling
     
    Судя по Вашим скринам и в целом - Вам нужен AndroidSterling. Хотя можете попробовать и другие.
    Вот там точно есть то что Вам нужно.
     
    P.S. Хотя и скачанный Вами AndroidLight.vsf тоже можно загрузить и сохранить как .style
    Проблема у него в том, что он не совсем совместим с XE6. Его можно подправить "ручками", чтобы он грузился. Но это уже другая история)...
  10. Like
    AngryOwl получил реакцию от Kitty в [Android] Изменить вид кнопки по умолчанию   
    О чем и говорилось в ролике, который Вы процитировали (https://www.youtube.com/watch?v=eqrVYWZ8SPk)
  11. Like
    AngryOwl получил реакцию от Kitty в [Android] Изменить вид кнопки по умолчанию   
    Эти стили есть тут (http://cc.embarcadero.com/item/29701)
    Не уверен, что тут можно выложить этот архив или стили, так как согласно лицензионному соглашению, насколько я понял, - они бесплатны, их можно использовать в своих продуктах, но нельзя сохранять в проекте эти стили в виде отдельных файлов (в качестве встроенного ресурса - не вопрос).
    Так-что в смысле "выложить их тут" - это скорее к нашим гуру (владельцам данного форума).
    Если Вы имеете лицензионную копию XE5-6, то по данной ссылке можете скачать их без проблем.
  12. Like
    AngryOwl получил реакцию от Kitty в [Android] Изменить вид кнопки по умолчанию   
    Ну вариантов два.
    1. Создать собственный стиль.
    1.1. Можете скопировать (создать дубль) в редакторе donetoolbutton или подобный (например ButtonStyle), обозвать его на свой лад (например donetoolMYbutton)


     
    1.2. Сохранить файл и загрузить его в контейнер TStyleBook
    1.3. Исправить в Вашем варианте то что Вам требуется (добавить элементы, заменить, и т.д. и т.п.)
    1.4. Применить изменения
    и пользовать для кнопок свой стиль (например donetoolMYbutton)
     
    так Вам не потребуется конструировать большую часть элементов кнопки, если таковые есть...
     
    2. Раз Ваш проект под Android, то можно загрузить стиль KitKatStyle_XE5, а именно AndroidDark.style или AndroidLight.style
    Там уже есть стиль donetoolbutton и Вам потребуется сделать его дубль и соответствующие изменения,
    либо изменить просто его так как Вам требуется
     
    P.S. Ответ "нарисовал" примерно, не особо вдаваясь в детали. Но думаю, что все будет понятно.
  13. Like
    AngryOwl получил реакцию от zairkz в Как программно добавить анимацию к TListBoxItem   
    Не за что. Удачи!
  14. Like
    AngryOwl получил реакцию от Kikoma в Как программно добавить анимацию к TListBoxItem   
    "Height - не работает"
    а в Вашем TListBox, в котором Вы меняете Item'ы, свойство ItemHeight случаем <> 0 ?
    В смысле - если ItemHeight <> 0, то изменение свойства Height для любого TListBoxItem работать не будет
     
    P.S. Вот простой пример, который только-что опробовал и он прекрасно работает именно так, как Вам нужно
    (удаляет выбранный элемент списка с анимацией)
    ... TListBoxItem(TListBox(Sender).Selected).AnimateFloat('Opacity', 0, 0.3); TListBoxItem(TListBox(Sender).Selected).AnimateFloatWait('Height', 0, 0.3); TListBox(Sender).Items.Delete(TListBox(Sender).Selected.Index); ... P.P.S. проверил - все работает и на Windows и на Android. корректно и с анимацией
  15. Like
    AngryOwl получил реакцию от eser в Как программно добавить анимацию к TListBoxItem   
    TListBoxItem(ваш_item).Animate('Opacity', 0, 0.5); TListBoxItem(ваш_item).AnimateWait('Height', 0, 0.5); и только после этого удаляйте.
    Но здесь может возникнуть ряд проблем.
    Во-первых - оптимально делать синхронизацию. Во-вторых - ввиду "ряда особенностей" FMX все может работать на Windows 8, но не будет работать (или будет, но с ошибками) на Windows 7. А на Windows XP вообще может себя повести в "3-ем варианте"... ) Более стабильно будет работать на Маке и на Android ))) Вот такие чудеса могут быть.
     
    Чтобы всего этого избежать, Вам нужно точно определить ту последовательность, которую Вы хотите воспроизвести и сделать синхронизацию.
     
    Например, как писал выше:
    TListBoxItem(ваш_item).Animate('Opacity', 0, 0.5); TListBoxItem(ваш_item).AnimateWait('Height', 0, 0.5); // тогда Animate для 'Opacity' и 'Height' выполнится параллельно // а вот следующая процедура выполнится только после окончания AnimateWait 'Height' TThread.Synchronize(TThread.CurrentThread, тут_ваша_процера_удаления_item); Думаю, что корректно описал - как. Но было бы более точно и правильно, если бы на ваш вопрос ответил непосредственно Ярослав Бровин. Он все-таки более компетентен.
  16. Like
    AngryOwl получил реакцию от Brovin Yaroslav в Динамическое создание и уничтожение компонентов   
    1. Использование
    t1:=Now;
    t2:=Now;
    и
    MilliSecondsBetween(t2,t1)
    не даст в Вашем случае точного результата. Подозреваю, что он всегда будет разным, и разница может быть очень существенной.

    Однозначно, лучше использовать
    TThread.GetTickCount для того чтобы "засечь время".

    2.
    BeginUpdate;
    ...
    EndUpdate;
    Application.ProcessMessages;

    Это тоже не "выход из положения".
    Если хотите точно засечь именно время "отрисовки", то нужно использовать
    TThread.Synchronize(TThread.CurrentThread, .........

    3. Для чего Вы используете BeginUpdate и, соответственно, EndUpdate?
    Ведь в вашем случае они относятся к объекту Self, т.е. - к самой форме.

    4. И самое главное. Простите за откровенность - как-то все очень "криво"... Все очень и очень НЕ "правильно" )

    Может со мной не согласятся наши уважаемые гуру и кто-то захочет точно пояснить - почему у Вас происходит описанный Вами баг, но так не делается.
    Не поймите меня не правильно - я не хочу никого обидеть (когда-то мы все такими были, и я в том числе))).

    P.S. И еще возник сразу вопрос - это FMX-проект? Если да, то почему Вы не используете стили? Думаю, что зто Вам сильно упростило бы Ваши задачи, а заодно, и создали бы более удобный вариант (я бы даже сказал - более правильный с точки зрения ООП).
    Динамические массивы и "записи" - без них часто не обойтись, либо можно, но проще с ними. Но это не в Вашем случае.
  17. Like
    AngryOwl получил реакцию от Alexey Lovchikov в Как программно добавить анимацию к TListBoxItem   
    TListBoxItem(ваш_item).Animate('Opacity', 0, 0.5); TListBoxItem(ваш_item).AnimateWait('Height', 0, 0.5); и только после этого удаляйте.
    Но здесь может возникнуть ряд проблем.
    Во-первых - оптимально делать синхронизацию. Во-вторых - ввиду "ряда особенностей" FMX все может работать на Windows 8, но не будет работать (или будет, но с ошибками) на Windows 7. А на Windows XP вообще может себя повести в "3-ем варианте"... ) Более стабильно будет работать на Маке и на Android ))) Вот такие чудеса могут быть.
     
    Чтобы всего этого избежать, Вам нужно точно определить ту последовательность, которую Вы хотите воспроизвести и сделать синхронизацию.
     
    Например, как писал выше:
    TListBoxItem(ваш_item).Animate('Opacity', 0, 0.5); TListBoxItem(ваш_item).AnimateWait('Height', 0, 0.5); // тогда Animate для 'Opacity' и 'Height' выполнится параллельно // а вот следующая процедура выполнится только после окончания AnimateWait 'Height' TThread.Synchronize(TThread.CurrentThread, тут_ваша_процера_удаления_item); Думаю, что корректно описал - как. Но было бы более точно и правильно, если бы на ваш вопрос ответил непосредственно Ярослав Бровин. Он все-таки более компетентен.
  18. Like
    AngryOwl отреагировална Andrey Efimov в Мировой тур RAD Studio XE7   
    Место проведения:
    Москва (16 сентября 10:00 am - 14:00pm) - Русаковская ул., д. 13, стр. 5 Гостиница «Бородино»   Астана (18 сентября 10:00 am - 14:00pm) - ул.Карасакал Еримбет, 65 Отель "Жумбактас"   Екатеринбург (23 сентября 10:00 am - 14:00pm) - ул. Б. Ельцина, 1а БЦ «Президент» Ссылка на мероприятие: http://www.delphitour.ru/
    Регистрация: http://forms.embarcadero.com/EM14Q3RUDeveloperDirectLive
    Описание:
    На конференции вы узнаете, как с помощью новых возможностей RAD Studio XE7:
    разрабатывать кроссплатформенные приложения с новым конструктором единого интерфейса; улучшать производительность настольных и мобильных приложений с помощью библиотеки параллельных вычислений, используя преимущества многоядерных процессоров; cбалансировать ИТ инфраструктуру за счет включения мобильных сервисов  
    Количество мест ограничено, регистрируйтесь заранее.
  19. Like
    AngryOwl отреагировална Brovin Yaroslav в Как в FM нарисовать текст на Canvas под углом?   
    В общем ничего кроме стандартных знаний линейной алгебры здесь не требуется. Согласно линейной алгебры нужно построить матрицу трансформации задать ее для канвы и рисовать все что угодно.
     
    Если вспомнить, то выполнить нужно следующее:
    Сместить Систему Координат (СК) на вектор центра поворота. Повернуть СК на угол поворота Сместить СК на обратные вектор центра поворота. В коде это будет выглядеть так:
    uses System.Math.Vectors; {$R *.fmx} procedure TForm1.ButtonDrawRotatedTextClick(Sender: TObject); var RotationMatrix: TMatrix; TranslationMatrix: TMatrix; ReverseTranslationMatrix: TMatrix; begin Image1.Bitmap.SetSize(200, 200); Image1.Bitmap.Clear(TAlphaColorRec.Null); with Image1.Bitmap.Canvas do begin BeginScene; try TranslationMatrix := TMatrix.CreateTranslation(100, 100); RotationMatrix := TMatrix.CreateRotation(-Pi / 180 * nbAngle.Value); ReverseTranslationMatrix := TMatrix.CreateTranslation(-100, -100); SetMatrix(ReverseTranslationMatrix * RotationMatrix * TranslationMatrix); Fill.Color := TAlphaColorRec.Red; Fill.Kind := TBrushKind.Solid; Font.Size := 20; FillText(TRectF.Create(50, 50, 150, 150), 'Текст', False, 1, [], TTextAlign.Center, TTextAlign.Center); finally EndScene; end; Image1.Repaint; end; end; Результат:

    Проект: DrawRotatedTextDemo.zip
  20. Like
    AngryOwl отреагировална Brovin Yaroslav в [Windows] Как можно сделать эффект "Липкие окошки" TForm?   
    Добрый день,
     
    У FireMonkey нету готового решения из коробки. Но, можно реализовать вручную так:
    Получаем хендл окна формы: 
    uses FMX.Platform.Win; //...... var WinHandle: TWinWindowHandle; begin WinHandle := WindowHandleToPlatform(Handle); // WinHandle.Wnd < -- Хендл окна end Вешаем Hook на оконную процедуру, используя полученный хендл и функции установки хука: Hook Functions В перекрытой нами оконной процедуре перехватываем сообщение WM_WINDOWPOSCHANGING и корректируем позицию окна, используя информацию о границе экрана и других окнах на экране. Таким способом можно сделать прилипание не только к границе экрана, но и к другим окнам (так же как прилипают между собой окна виджетов).
  21. Like
    AngryOwl получил реакцию от Brovin Yaroslav в [Android] Изменить вид кнопки по умолчанию   
    Самый простой способ - отредактировать стиль, добавив копию "donetoolbutton", но обозвав ее иначе, например "donetoolrectbutton".
    Создав копию, и обозвав ее "donetoolrectbutton", у вас останется и старый стиль и будет новый (собственный). А вот с "donetoolrectbutton" вы уже можете делать что пожелаете. Т.е. - добавить в слой новый объект - тот же TRectangle.
    Можете изменить и "родной" стиль, добавив ему то, что требуется.
     
    P.S. Как создать копию... На мой взгляд - проще всего в том же редакторе (например Notepad++).
  22. Like
    AngryOwl получил реакцию от Brovin Yaroslav в [Windows] Как загрузить HBITMAP в TBitmap ?   
    Вам требуется, в первую очередь, подключить модули для возможности использования HBITMAP
    uses   ...   {$IFDEF MSWINDOWS}   Vcl.Graphics,   {$ENDIF}   ... Далее, предположим, у Вас есть изображение tmpBmp - в формате Vcl.Graphics.TBitmap (для примера - я его гружу из файла. Это как-раз тот формат, о котором идет речь в Вашем вопросе)
    Ну и далее все действия Вам должны быть понятны..
    var   tmpBmp : Vcl.Graphics.TBitmap;   tmpStream : TMemoryStream; begin   tmpBmp := Vcl.Graphics.TBitmap.Create;   try     tmpBmp.LoadFromFile('d:/index_cr.bmp');     tmpStream := TMemoryStream.Create;     tmpBmp.SaveToStream(tmpStream);     Image1.Bitmap.LoadFromStream(tmpStream);   finally     tmpBmp.Free;     tmpStream.Free;   end; end; Думаю, что все достаточно просто и понятно написал
     
    P.S. все написано "на коленке" и за пару минут, так-что сорри, что не учитывал все "нюансы".
    Собственно FMX сделает за вас всю работу по преобразованию...
  23. Like
    AngryOwl отреагировална Andrey Efimov в [Android] Изменить вид кнопки по умолчанию   
    Такая кнопка доступна, только когда вы создаёте не мобильный проект.
     
    В случае с мобильными проектами, необходимо кидать на форму компонент TStyleBook, в него подгружаете необходимый стиль и прописываете StyleBook в форме, в свойстве StyleBook. Как изменить дизайн конкретного стиля, вам написал AlexG.
     
    На форуме есть большой раздел "Стили", посвящённый работе со стилями, там можно найти ответы на многие вопросы.
    Вот ещё полезная тема: [Mobile platform] где редактор стилей?
  24. Like
    AngryOwl получил реакцию от Kitty в [Android] Изменить вид кнопки по умолчанию   
    Самый простой способ - отредактировать стиль, добавив копию "donetoolbutton", но обозвав ее иначе, например "donetoolrectbutton".
    Создав копию, и обозвав ее "donetoolrectbutton", у вас останется и старый стиль и будет новый (собственный). А вот с "donetoolrectbutton" вы уже можете делать что пожелаете. Т.е. - добавить в слой новый объект - тот же TRectangle.
    Можете изменить и "родной" стиль, добавив ему то, что требуется.
     
    P.S. Как создать копию... На мой взгляд - проще всего в том же редакторе (например Notepad++).
×
×
  • Создать...