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

dnekrasov

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

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

  • Посещение

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

    52

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

  1. Like
    dnekrasov отреагировална alexbirukov в Доступ к Yandex.Disk   
    Читал вот тут недавно статейку. Но сам пока не проверял.
  2. Like
    dnekrasov получил реакцию от Anatoliy в ListView ItemAppearance - как добраться до Footer   
    Как-то так:
        with lvObjects.Items.Add do     begin       Text := 'Footer';       Purpose := TListItemPurpose.Footer;     end;  
  3. Like
    dnekrasov отреагировална TK Studio в Изменение формы компонента TButtonStyleObject   
    Вот пример только без эффектов

    RoundButton.zip
  4. Like
    dnekrasov получил реакцию от Mars M в Как узнать номер нажатой строки в memo delphi fmx?   
    TCustomMemo.CaretPosition.Line
  5. Like
    dnekrasov получил реакцию от Rusland в Как узнать номер нажатой строки в memo delphi fmx?   
    TCustomMemo.CaretPosition.Line
  6. Like
    dnekrasov получил реакцию от Maximus в Стрелковый тир (игра)   
    Если игра под Windows, то самый простой выход (по моему мнению) - работа с регионами. Ведь каждый объект это по сути дела какой-то замкнутый полигон, а функции CreatePolygonRgn и PtInRegion еще никто не отменял. А вообще функций для работы с регионами немало, так что почитайте о них на MSDN. 
    Если не хотите использовать WinAPI-шные функции - работайте с полигонами. Мне когда-то очень помогла библиотека AlgLib - из нее можно вытянуть много полезных функций, чтобы самому не реализовывать алгоритмы.
  7. Like
    dnekrasov отреагировална Равиль Зарипов (ZuBy) в TThread.ForceQueue не работает в Android   
    В токио
  8. Like
    dnekrasov отреагировална Brovin Yaroslav в Получить список контрлов под курсором   
    Можно найти объект, который находится под курсором. При помощи ObjectAtPoint у формы.
    А потом пробегом вверх по всем родителям выполнить проверку на вхождение курсора в каждый родительский контрол. Это мне кажется проще...
  9. Like
    dnekrasov получил реакцию от Andrey Efimov в Как использовать CopyFromBitmap   
    Маленький примерчик
     
    CopyFromBitmap.zip
  10. Like
    dnekrasov получил реакцию от Rusland в Как использовать CopyFromBitmap   
    Маленький примерчик
     
    CopyFromBitmap.zip
  11. Like
    dnekrasov получил реакцию от Brovin Yaroslav в Как использовать CopyFromBitmap   
    Маленький примерчик
     
    CopyFromBitmap.zip
  12. Like
    dnekrasov получил реакцию от MrSergei2017 в Как использовать CopyFromBitmap   
    Маленький примерчик
     
    CopyFromBitmap.zip
  13. Like
    dnekrasov отреагировална Евгений Корепов в Проблема с сохранением объекта в 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.  
  14. Like
    dnekrasov отреагировална Pax Beach в Фотография стандартной камерой смартфона   
    Проблема решалась очень просто.
    Оказывается нужно при вызове startActivityForResult использовать requestCode отличный от занятых в FMX, я использую REQUEST_IMAGE_CAPTURE = 1001 тогда обработчик сообщений FMX поймет, что сообщение не для него и передаст его в систему. 
     
     
  15. Like
    dnekrasov отреагировална Равиль Зарипов (ZuBy) в Почему в Берлине нет кнопки Apply   
    В Токио снова появилась кнопка Apply
  16. Like
    dnekrasov получил реакцию от rareMax в Использование своего шрифта под Windows   
    В Berlin и Tokyo AddFontResource и RemoveFontResource прекрасно отрабатывают, только вызывать их надо до Application.Run.
    Кстати, лучше использовать  AddFontResourceEx и RemoveFontResourceEx с флагом FR_NOT_ENUM - тогда надобность в SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) отпадает.
  17. Like
    dnekrasov отреагировална dinero в Выбранный цвет в TComboColorBox в Tokyo   
    При переводе проекта с Berlin на Tokyo при выборе цвета в TComboColorBox, выбранный цвет не отображается. DropDownKind.Custom. В Berlin все работает нормально.
  18. Like
    dnekrasov получил реакцию от Winexcel в Горизонтальный скроллбар в TTreeView   
    Чтобы просто избавиться от горизонтального скроллбара нужно обработать событие OnCalcContentBounds. Что-то типа этого:
    procedure TMainForm.TreeView1CalcContentBounds(Sender: TObject; var ContentBounds: TRectF); begin ContentBounds.Width := TreeView1.Content.BoundsRect.Width; // Нужно учесть еще и ширину вертикального скроллбара end;  
  19. Like
    dnekrasov отреагировална kami в Посоветуйте функционал для приложения   
    Нормативная документация (устав, цели, программа)
    Актуальные вопросы на предстоящую повестку дня на какой-нибудь сессии
    Обращения от граждан (хотя они гораздо чаще идут на конкретного представителя)
    "Внутреннее" голосование по какому-нибудь разрабатываемому документу / согласование уполномоченными должностными лицами
    А вообще - лучше всего уточнить у заказчика. Не "какой функционал должен быть у приложения" , "дайте ТЗ", а "давайте вместе подумаем / пофантазируем - вот у нас есть мобильное приложение. И мы будем его использовать для / чтобы ...". Причем это лучше делать не в письменной форме, а при личной встрече (при наличии такой возможности).
     
  20. Like
    dnekrasov получил реакцию от giveaway в Как обратится к бинарнику внутри контейнера .app или вытащить его оттуда?   
    Вот код, который вернёт путь к исполняемому файлу (тот, который деплоится в "Contents\MacOS\")
    function GetModuleFName(AModule: Cardinal): string; begin SetLength(Result, MAX_PATH); GetModuleFileName(AModule, @Result[1], MAX_PATH); SetLength(Result, StrLen(PChar(Result))); end; function GetModuleFolder: string; begin Result := IncludeTrailingPathDelimiter(ExtractFilePath(GetModuleFolder(HInstance))); end; :
  21. Like
    dnekrasov получил реакцию от Rusland в Ищу несколько кросс-платформенных компонентов   
    По 1-му вопросу для MacOS:
    function CheckRunning: Boolean; var sl: TStringList; iCount: Integer; s: String; begin sl := TStringList.Create; try GetRunningAplications(sl); iCount := 0; for s in sl do if SameText(s, APP_BundleID) then // APP_BundleID - константа с BundleID приложения Inc(iCount); Exit(iCount < 2) finally sl.Free; end; end; procedure GetRunningAplications(AList: TStrings); var WorkSpace: NSWorkSpace; App: NSRunningApplicationEx; i: Integer; list: NSArray; begin WorkSpace := TNsWorkspace.Wrap(TNsWorkSpace.OCClass.SharedWorkspace); list := Workspace.runningApplications; if (list <> nil) and (list.count > 0) then begin for i := 0 to list.count-1 do begin App := TNSRunningApplicationEx.Wrap(list.objectAtIndex(i)); if App.bundleIdentifier <> nil then AList.Add(string(App.bundleIdentifier.UTF8String)) else AList.Add(String(App.executableURL.path.UTF8String)); end; end; end; Ответ на 3-ий вопрос сам уже долго ищу
  22. Like
    dnekrasov получил реакцию от giveaway в Ищу несколько кросс-платформенных компонентов   
    По 1-му вопросу для MacOS:
    function CheckRunning: Boolean; var sl: TStringList; iCount: Integer; s: String; begin sl := TStringList.Create; try GetRunningAplications(sl); iCount := 0; for s in sl do if SameText(s, APP_BundleID) then // APP_BundleID - константа с BundleID приложения Inc(iCount); Exit(iCount < 2) finally sl.Free; end; end; procedure GetRunningAplications(AList: TStrings); var WorkSpace: NSWorkSpace; App: NSRunningApplicationEx; i: Integer; list: NSArray; begin WorkSpace := TNsWorkspace.Wrap(TNsWorkSpace.OCClass.SharedWorkspace); list := Workspace.runningApplications; if (list <> nil) and (list.count > 0) then begin for i := 0 to list.count-1 do begin App := TNSRunningApplicationEx.Wrap(list.objectAtIndex(i)); if App.bundleIdentifier <> nil then AList.Add(string(App.bundleIdentifier.UTF8String)) else AList.Add(String(App.executableURL.path.UTF8String)); end; end; end; Ответ на 3-ий вопрос сам уже долго ищу
  23. Like
    dnekrasov отреагировална Равиль Зарипов (ZuBy) в Скачать курс валют через THTTPClient   
    нет такой проблемы, ваш код у меня отработал так

     
    uses System.Net.HTTPClient; procedure TForm2.Button1Click(Sender: TObject); var aHttp: THTTPClient; aStr: TStringStream; begin aHttp := THTTPClient.Create; aStr := TStringStream.Create('', TEncoding.UTF8); try aHttp.Get('http://www.cbr.ru/', aStr); Memo1.text := aStr.DataString; finally aHttp.Free; aStr.Free; end; end;  
  24. Like
    dnekrasov отреагировална dante333 в [Статья] Как конвертировать растровую картинку в векторный TPath Firemonkey. How to convert a bitmap image (png, jpeg, bmp) into a Firemonkey vector TPath.   
    Думаю будет полезно многим.Сам делал так же недавно в одном проекте,лучше этого метода тоже ничего не придумал.Да и svg оказался довольно годным форматом,который легко поддается манипуляциям.
    Вот так у меня выглядит:

  25. Like
    dnekrasov отреагировална RoschinSpb в Удалить картинку из TimageList   
    Ломать не строить, здесь нет ни каких сложностей.
    TImageList содержит две коллекции Source и Destination. Удаляете из них Item`ы как из обычных коллекций TCollection с помощью методов Delete и Clear. В Source находятся сами изображения, в Destination ссылки на Source.
    Если удалите только из Source, то в нумерация изображений не поменяется и останутся пустые элементы, хотя расход памяти уменьшится. Если удалите только из Destination, то нумерация картинок съедет, и расход памяти почти не изменится. Каждый элемент Destination может содержать несколько ссылок на Source это коллекция Layers, из которой точно также можно удалять элементы.
×
×
  • Создать...