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

kami

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

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

  • Посещение

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

    41

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

  1. Like
    kami получил реакцию от Dinkin в Развертка на Mac   
    Если XCode 8 (что, собственно, и должно было произойти при обновлении) то работать не будет. Для 8 хкода нужен 10.1 берлин
  2. Like
    kami получил реакцию от Dinkin в Развертка на Mac   
    А вот это имхо странно. Если SDK подтянулось, то компилятор вообще не лезет на мак. Хотя, с учетом XCode8 - да, ошибки могут пойти любые, ибо SDK не тот...
  3. Like
    kami получил реакцию от krapotkin в Пример работы с TObjectList   
    Не буду разводить холивар, тем более что with или не with имеет кучу обсуждений, в которых высказывались и именитые разработчики. Скажем так - использование with делает код не явным  (например - в классе, где используется эта конструкция с with тоже есть метод SaveToFile или свойство Text) и плохо читается сторонним разработчиком. Но - каждый решает для себя.
  4. Like
    kami получил реакцию от Rusland в Пример работы с TObjectList   
    Не буду разводить холивар, тем более что with или не with имеет кучу обсуждений, в которых высказывались и именитые разработчики. Скажем так - использование with делает код не явным  (например - в классе, где используется эта конструкция с with тоже есть метод SaveToFile или свойство Text) и плохо читается сторонним разработчиком. Но - каждый решает для себя.
  5. Like
    kami отреагировална Равиль Зарипов (ZuBy) в Пример работы с TObjectList   
    если вам не понятен этот код
    For i:=0 to List.Count-1 do with List.Items[i] do begin Position.Y:=Position.Y+0.5; end; то его можно переписать следующим образом
    for i:=0 to List.Count-1 do     List.Items[i].Position.Y := List.Items[i].Position.Y+0.5;  
    UPDATE: http://delphicode.org/delphi/with.htm
  6. Like
    kami отреагировална krapotkin в Механизмы синхронизации потоков в Android?   
    http://docwiki.embarcadero.com/Libraries/Seattle/en/System.SyncObjs
    например, критические секции, или менее известный
    http://docwiki.embarcadero.com/Libraries/XE5/en/System.SysUtils.TMultiReadExclusiveWriteSynchronizer
  7. Like
    kami получил реакцию от MrAnderson в argument out of range Listview(Баг ?)   
    точно не правильно.
    1. Создавать TNetHTTPClient нужно в execute потока, а не использовать лежащий на форме.
    2. Работать с визуальными объектами нельзя из execute, об этом 100500 раз предупреждали.
    Посему, правильно с технической точки зрения (упустим пока архитектуру) будет:
    1. в execute создать сетевой компонент и выполнить запрос.
    2. Распарсить запрос
    3. Передать результаты в основной поток и уже в нем работать с ListView.
    Полезно для правильного написания вынести код потока в отдельный модуль. Который НИЧЕГО не должен знать о модуле формы. Поток должен иметь событие, через которое он передает результаты своей работы куда надо. Само собой - вызывать это событие нужно в основном потоке, используя средства синхронизации. Форма при создании потока назначает ему обработчик события и выполняет в нем необходимые действия.
  8. Like
    kami получил реакцию от Rusland в argument out of range Listview(Баг ?)   
    точно не правильно.
    1. Создавать TNetHTTPClient нужно в execute потока, а не использовать лежащий на форме.
    2. Работать с визуальными объектами нельзя из execute, об этом 100500 раз предупреждали.
    Посему, правильно с технической точки зрения (упустим пока архитектуру) будет:
    1. в execute создать сетевой компонент и выполнить запрос.
    2. Распарсить запрос
    3. Передать результаты в основной поток и уже в нем работать с ListView.
    Полезно для правильного написания вынести код потока в отдельный модуль. Который НИЧЕГО не должен знать о модуле формы. Поток должен иметь событие, через которое он передает результаты своей работы куда надо. Само собой - вызывать это событие нужно в основном потоке, используя средства синхронизации. Форма при создании потока назначает ему обработчик события и выполняет в нем необходимые действия.
  9. Like
    kami получил реакцию от Просто Проги в argument out of range Listview(Баг ?)   
    точно не правильно.
    1. Создавать TNetHTTPClient нужно в execute потока, а не использовать лежащий на форме.
    2. Работать с визуальными объектами нельзя из execute, об этом 100500 раз предупреждали.
    Посему, правильно с технической точки зрения (упустим пока архитектуру) будет:
    1. в execute создать сетевой компонент и выполнить запрос.
    2. Распарсить запрос
    3. Передать результаты в основной поток и уже в нем работать с ListView.
    Полезно для правильного написания вынести код потока в отдельный модуль. Который НИЧЕГО не должен знать о модуле формы. Поток должен иметь событие, через которое он передает результаты своей работы куда надо. Само собой - вызывать это событие нужно в основном потоке, используя средства синхронизации. Форма при создании потока назначает ему обработчик события и выполняет в нем необходимые действия.
  10. Like
    kami получил реакцию от Andrey Efimov в argument out of range Listview(Баг ?)   
    точно не правильно.
    1. Создавать TNetHTTPClient нужно в execute потока, а не использовать лежащий на форме.
    2. Работать с визуальными объектами нельзя из execute, об этом 100500 раз предупреждали.
    Посему, правильно с технической точки зрения (упустим пока архитектуру) будет:
    1. в execute создать сетевой компонент и выполнить запрос.
    2. Распарсить запрос
    3. Передать результаты в основной поток и уже в нем работать с ListView.
    Полезно для правильного написания вынести код потока в отдельный модуль. Который НИЧЕГО не должен знать о модуле формы. Поток должен иметь событие, через которое он передает результаты своей работы куда надо. Само собой - вызывать это событие нужно в основном потоке, используя средства синхронизации. Форма при создании потока назначает ему обработчик события и выполняет в нем необходимые действия.
  11. Like
    kami получил реакцию от Rusland в Проверка свойств-методов объектов   
    Не претендую на самое лаконичное решение, но проверку можно организовать так:
    var tmp: TNotifyEvent; // понятно, что тут должен быть нужный тип события, лень смотреть, что там с OnKeyDown begin tmp:=myProc; if (TMethod(OnActivate).Code = TMethod(tmp).Code) and (TMethod(OnActivate).Data = TMethod(tmp).Data) then ;// именно myProc - обработчик события OnActivate  
  12. Like
    kami получил реакцию от enatechno в Паттерн Наблюдатель   
    Так куда уж подробнее
    Всё, что может меняться - должно иметь интерфейс подписки. Все заинтересованные объекты должны подписываться и отписываться. А уж реализация и передаваемая информация - это детали.
    У меня, например, в качестве события об уведомлении используется вот такое:
    type TNotificationAction = (naAdd, naChange, naDelete); TNotificationEvent<T> = procedure(Sender: TObject; Action: TNotificationAction; const Param: T) of object; Можете глянуть в исходники FMX, фраза для поиска - FreeNotification
  13. Like
    kami получил реакцию от Ufomaster в Паттерн Наблюдатель   
    Так куда уж подробнее
    Всё, что может меняться - должно иметь интерфейс подписки. Все заинтересованные объекты должны подписываться и отписываться. А уж реализация и передаваемая информация - это детали.
    У меня, например, в качестве события об уведомлении используется вот такое:
    type TNotificationAction = (naAdd, naChange, naDelete); TNotificationEvent<T> = procedure(Sender: TObject; Action: TNotificationAction; const Param: T) of object; Можете глянуть в исходники FMX, фраза для поиска - FreeNotification
  14. Like
    kami получил реакцию от Равиль Зарипов (ZuBy) в Паттерн Наблюдатель   
    Так куда уж подробнее
    Всё, что может меняться - должно иметь интерфейс подписки. Все заинтересованные объекты должны подписываться и отписываться. А уж реализация и передаваемая информация - это детали.
    У меня, например, в качестве события об уведомлении используется вот такое:
    type TNotificationAction = (naAdd, naChange, naDelete); TNotificationEvent<T> = procedure(Sender: TObject; Action: TNotificationAction; const Param: T) of object; Можете глянуть в исходники FMX, фраза для поиска - FreeNotification
  15. Like
    kami получил реакцию от Равиль Зарипов (ZuBy) в Паттерн Наблюдатель   
    https://github.com/jimmckeeth/DelphiPatterns
  16. Like
    kami получил реакцию от Равиль Зарипов (ZuBy) в Развертка на Mac   
    Если XCode 8 (что, собственно, и должно было произойти при обновлении) то работать не будет. Для 8 хкода нужен 10.1 берлин
  17. Like
    kami получил реакцию от zairkz в Благодраность   
    Двусмысленно
  18. Like
    kami получил реакцию от Kitty в TMS Pack for FireMonkey   
    Ничего в нем отличного нет. У меня подписка на эти компоненты, со всей ответственностью заявляю - TMS веббраузер - всего лишь надстройка над штатными нативными реализациями из FMX начиная с версии 3.0. До этого они использовали на мобильных платформах - реализацию из FMX (не уверен в этом утверждении, давненько было), на десктопе - хромиум.
    Причем ввиду того, что в FMX есть некоторые привязки к стандартному веббраузеру, многое из того, что штатно работает с TWebBrowser, не хочет работать с TMSWebBrowser. В качестве примера - вы не можете разместить TMSWebBrowser на закладке табконтрола. Вернее, можете, но результат вас не обрадует.
  19. Like
    kami получил реакцию от Brovin Yaroslav в TBitmap и экономия памяти   
    Не совсем. То есть - технически правильно, но идеологически - нет.
    Проведем мысленный эксперимент: что случится, если на BeginScene возникнет исключение? Правильно, битмап не будет уничтожен, потому что этот код не выполнялся внутри Try. Поэтому, если заниматься буквоедством, то код должен выглядывать так:
    MyBitmap := TBitmap.CreateFromFile(OpenDialog1.Files[0]); try Image1.Bitmap.Canvas.BeginScene; try Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyRect, MyRect, 20); finally Image1.Bitmap.Canvas.EndScene; end; finally myBitmap.Free; end;
  20. Like
    kami получил реакцию от Steepe_Hare в TBitmap и экономия памяти   
    Не совсем. То есть - технически правильно, но идеологически - нет.
    Проведем мысленный эксперимент: что случится, если на BeginScene возникнет исключение? Правильно, битмап не будет уничтожен, потому что этот код не выполнялся внутри Try. Поэтому, если заниматься буквоедством, то код должен выглядывать так:
    MyBitmap := TBitmap.CreateFromFile(OpenDialog1.Files[0]); try Image1.Bitmap.Canvas.BeginScene; try Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyRect, MyRect, 20); finally Image1.Bitmap.Canvas.EndScene; end; finally myBitmap.Free; end;
  21. Like
    kami получил реакцию от Равиль Зарипов (ZuBy) в TBitmap и экономия памяти   
    Не совсем. То есть - технически правильно, но идеологически - нет.
    Проведем мысленный эксперимент: что случится, если на BeginScene возникнет исключение? Правильно, битмап не будет уничтожен, потому что этот код не выполнялся внутри Try. Поэтому, если заниматься буквоедством, то код должен выглядывать так:
    MyBitmap := TBitmap.CreateFromFile(OpenDialog1.Files[0]); try Image1.Bitmap.Canvas.BeginScene; try Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyRect, MyRect, 20); finally Image1.Bitmap.Canvas.EndScene; end; finally myBitmap.Free; end;
  22. Like
    kami отреагировална Andrey Efimov в Тест функционала форума - Спойлер   
    Добавили кнопку "Спойлер" в редактор форума. Теперь можно прятать большие картинки/текст под спойлер.
     
  23. Like
    kami получил реакцию от Andrey Efimov в Методы шифрования delphi   
    всё классно, за исключением:
    2,3,6 - исключительно под win.
    5 - судя по комментариям в исходниках - тоже только win.
    4 - мормоты и не позиционировались как кросс-платформенные.
    Итого остается только TurboPack / TurboPower LockBox (подозреваю, что это одно и то же).
  24. Like
    kami получил реакцию от Andrey Efimov в Методы шифрования delphi   
    LockBox для FMX через GetIt ?
  25. Like
    kami получил реакцию от Rusland в Методы шифрования delphi   
    всё классно, за исключением:
    2,3,6 - исключительно под win.
    5 - судя по комментариям в исходниках - тоже только win.
    4 - мормоты и не позиционировались как кросс-платформенные.
    Итого остается только TurboPack / TurboPower LockBox (подозреваю, что это одно и то же).
×
×
  • Создать...