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

Лидеры

  1. Rusland

    Rusland

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


    • Баллы

      6

    • Постов

      1 204


  2. Brovin Yaroslav

    Brovin Yaroslav

    Администраторы


    • Баллы

      2

    • Постов

      2 124


  3. Pax Beach

    Pax Beach

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


    • Баллы

      2

    • Постов

      414


  4. rareMax

    rareMax

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


    • Баллы

      1

    • Постов

      553


Популярный контент

Показан контент с высокой репутацией 21.07.2016 во всех областях

  1. Может быть такой код поможет? unit UntNetwork; interface function IsConnected: Boolean; function IsWiFiConnected: Boolean; function IsMobileConnected: Boolean; implementation uses System.SysUtils, Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, FMX.Helpers.Android, Androidapi.Helpers{, Misc}; type JConnectivityManager = interface; JNetworkInfo = interface; JNetworkInfoClass = interface(JObjectClass) ['{E92E86E8-0BDE-4D5F-B44E-3148BD63A14C}'] end; [JavaSignature('android/net/NetworkInfo')] JNetworkInfo = interface(JObject) ['{6DF61A40-8D17-4E51-8EF2-32CDC81AC372}'] {Methods} function isAvailable: Boolean; cdecl; function isConnected: Boolean; cdecl; function isConnectedOrConnecting: Boolean; cdecl; end; TJNetworkInfo = class(TJavaGenericImport<JNetworkInfoClass, JNetworkInfo>) end; JConnectivityManagerClass = interface(JObjectClass) ['{E03A261F-59A4-4236-8CDF-0068FC6C5FA1}'] {Property methods} function _GetTYPE_WIFI: Integer; cdecl; function _GetTYPE_WIMAX: Integer; cdecl; function _GetTYPE_MOBILE: Integer; cdecl; {Properties} property TYPE_WIFI: Integer read _GetTYPE_WIFI; property TYPE_WIMAX: Integer read _GetTYPE_WIMAX; property TYPE_MOBILE: Integer read _GetTYPE_MOBILE; end; [JavaSignature('android/net/ConnectivityManager')] JConnectivityManager = interface(JObject) ['{1C4C1873-65AE-4722-8EEF-36BBF423C9C5}'] {Methods} function getActiveNetworkInfo: JNetworkInfo; cdecl; function getNetworkInfo(networkType: Integer): JNetworkInfo; cdecl; end; TJConnectivityManager = class(TJavaGenericImport<JConnectivityManagerClass, JConnectivityManager>) end; function GetConnectivityManager: JConnectivityManager; var ConnectivityServiceNative: JObject; begin ConnectivityServiceNative := SharedActivityContext.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE); if not Assigned(ConnectivityServiceNative) then raise Exception.Create('Could not locate Connectivity Service'); Result := TJConnectivityManager.Wrap( (ConnectivityServiceNative as ILocalObject).GetObjectID); if not Assigned(Result) then raise Exception.Create('Could not access Connectivity Manager'); end; function IsConnected: Boolean; var ConnectivityManager: JConnectivityManager; ActiveNetwork: JNetworkInfo; begin ConnectivityManager := GetConnectivityManager; ActiveNetwork := ConnectivityManager.getActiveNetworkInfo; Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected; end; function IsWiFiConnected: Boolean; var ConnectivityManager: JConnectivityManager; WiFiNetwork: JNetworkInfo; begin ConnectivityManager := GetConnectivityManager; WiFiNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_WIFI); Result := WiFiNetwork.isConnected; end; function IsMobileConnected: Boolean; var ConnectivityManager: JConnectivityManager; MobileNetwork: JNetworkInfo; begin ConnectivityManager := GetConnectivityManager; MobileNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_MOBILE); Result := MobileNetwork.isConnected; end; end. Хотя лично мне интересно как пропинговать какой-нибудь сервер (желательно без Indy компонент)...
    2 балла
  2. Полагаю что раскрашивается через сменю стиля... типа у кнопки нажимаем Edit Custom Style, в редакторе удаляем background, ставим вместо него Rectangle, меняем ему Align на Client, StyleName=background, Fill.Color=цвет (ну и Stroke поменять). Перенести Text на Rectangle... как-то так. Создать несколько вариантов стиля и в рантайме менять StyleLookup кнопки, не?
    2 балла
  3. Вот эту тему прочитайте, скорее всего аналогичная проблема.
    1 балл
  4. DimArt

    Не отображается TListItemImage

    Рабочий проект для Seattle TwoImages.zip
    1 балл
  5. Было за неделю 5 отказов (2 точно таких же), пока не перешел на Berlin и не обновил Mac на EL Capitan, ну и соответственно последний Xcode. У меня был Seatle (но С..КА не Update 1) , а в BugFix Seatle Update 1 есть такой исправленный баг -> RSP-12744 iOS app constantly rejected in AppStore IDE, IDE\Deployment https://quality.embarcadero.com/browse/RSP-12744 Думаю вам достаточно обновить до Update 1 Кстати (может это и элементарно) чуток попарился из-за того что не правильно прикрепил новый plist(для поддержки шрифта) в Deploy, так как для ios32 ios64 они разные(это понятно) но и для ApplicationStore он другой) Ну и очень радует что проверку они начали делать в течении суток. Пожалуйста скажите что у Вас тоже просто обычный Seatle!! Я хоть успокоюсь что я ни один такой , который время в пустую потратил
    1 балл
  6. ReportMemoryLeaksOnShutdown := true;
    1 балл
  7. Pax Beach

    Error "Message must be shown in the main UI thread"

    Вызов необходимо осуществлять в UI потоке: CallInUiThread( procedure begin ... show ur banner end);
    1 балл
  8. ну тогда только так как-то, через костыли: procedure TForm1.WebBrowser1DidFinishLoad(ASender: TObject); begin cannotloadlinks := true; end; procedure TForm1.WebBrowser1DidStartLoad(ASender: TObject); begin if cannotloadlinks and (WebBrowser1.URL <> Edit1.Text) then begin WebBrowser1.Stop; WebBrowser1.URL := Edit1.Text; WebBrowser1.Navigate; end else Edit1.Text := WebBrowser1.URL; end;
    1 балл
  9. Выложили вебинар по Будильнику на Андроид
    1 балл
  10. что-то типа этого? demoLV.zip
    1 балл
  11. Добрый день, В событии MouseDown у TListBoxItem ищем в стиле итема объект изображения. Для итема картинка имеет название 'icon'. Определяем координаты мыши в координатах формы (Абсолютные координаты). На случай отступов и произвольного размещения изображения. Конвертируем абсолютные координаты в локальные координаты изображения. Если картинка содержит координаты мыши, значит нажали на картинку. Delphi: procedure TForm6.ListBoxItem1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); var Item: TListBoxItem; StyleObject: TFmxObject; StyleIcon: TControl; LocalMousePos: TPointF; AbsoluteMousePos: TPointF; begin if Sender is TListBoxItem then begin Item := TListBoxItem(Sender); LocalMousePos := TPointF.Create(X, Y); AbsoluteMousePos := Item.LocalToAbsolute(LocalMousePos); // Ищем объект стиля - картинка. Лучше закешировать один раз, избежав постоянный поиск картинки StyleObject := Item.FindStyleResource('icon'); if (StyleObject <> nil) and (StyleObject is TControl) then begin StyleIcon := TControl(StyleObject); // Координаты в локальной системе координат картинки LocalMousePos := StyleIcon.AbsoluteToLocal(AbsoluteMousePos); if StyleIcon.LocalRect.Contains(LocalMousePos) then ShowMessage('Click on Image'); end; end; end; Builder C++: void __fastcall TForm4::ListBoxItem1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, float X, float Y) { TListBoxItem *item = dynamic_cast<TListBoxItem*>(Sender); if (item != 0){ TPointF localMousePos(X, Y); TPointF absoluteMousePos = item->LocalToAbsolute(localMousePos); // Ищем объект стиля - картинка. Лучше закешировать один раз, избежав постоянный поиск картинки TFmxObject *styleObject; styleObject = item->FindStyleResource("icon"); if (styleObject != NULL) { TControl *styleIcon = dynamic_cast<TControl*>(styleObject); // Координаты в локальной системе координат картинки localMousePos = styleIcon->AbsoluteToLocal(absoluteMousePos); if (styleIcon->LocalRect.Contains(localMousePos)) ShowMessage("Click on Image"); } } }
    1 балл
  12. Добрый вечер, Перемещение контрола можно сделать двумя способами: Используя обычный набор событий OnMouseDown, OnMouseMove, OnMouseUp. Использовать для перемещения жесты. 1. Реализация с использованием событий мыши Эти события реализованы для всех платформ. В том числе они эмулируются на мобильных платформ, где понятия мыши, как такового нету. Это означает, что их можно использовать для реализации перетаскивания контрола. Это можно сделать, например, следующим образом: а) Создаем форму и кидаем на нее картинку. Я назвал ее DraggableImage. б) Заводим два поля. TForm5 = class(TForm) DraggableImage: TImage; procedure DraggableImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure DraggableImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); procedure FormCreate(Sender: TObject); procedure DraggableImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); private FStartPos: TPointF; FPressed: Boolean; end; FStartPos - начальная локальная позиция мыши внутри нашего контрола (картинки), когда пользователь зажал кнопку мышки или опустил палец на экран. FPressed - флаг для сигнализирования, что пользователь опустил палец (зажал кнопку мыши) на нашу картинку и до текущего момента не снял с экрана. в) В конструкторе формы для перетаскиваемого контрола ОБЯЗАТЕЛЬНО задаем AutoCapture = True. Это позволит контролу генерировать события перемещения мыши, даже если курсор мыши ушел за локальные границы контрола. procedure TForm5.FormCreate(Sender: TObject); begin DraggableImage.AutoCapture := True; end; г) В момент нажатия на картинку сохраняем локальную позицию мыши и задаем флаг FPressed = True procedure TForm5.DraggableImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin FPressed := True; FStartPos := TPointF.Create(X, Y); end; д) В момент отпускания кнопки мыши или убирания пальца с экрана сбрасываем флаг FPressed: procedure TForm5.DraggableImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin FPressed := False; end; е) И собственно меняем позицию картинки, когда мы ведем мышкой по картинке: procedure TForm5.DraggableImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); var MoveVector: TVector; begin if FPressed then begin // Вычисляем локальное смещение относительно первоначальной позиции MoveVector := TVector.Create(X - FStartPos.X, Y - FStartPos.Y, 0); // Вычисляем смещение в координатах формы, чтобы учесть изменение // координат при смещении родительских контролов MoveVector := DraggableImage.LocalToAbsoluteVector(MoveVector); if DraggableImage.ParentControl <> nil then MoveVector := DraggableImage.ParentControl.AbsoluteToLocalVector(MoveVector); // Перемещаем картинку на вычисленный вектор // Для RAD Studio XE5 DraggableImage.Position.Point := DraggableImage.Position.Point + MoveVector.ToPointF; // Для новых версий // DraggableImage.Position.Point := DraggableImage.Position.Point + TPointF(MoveVector); end; end; Этот кусок стоит прокомментировать, чтобы корректно выполнить перетаскивание контролу обязательно нужно вычислять смещение в абсолютных координатах формы. Причина в том, что если контрол повернут или входит один в другой, то нужно учитывать смещения всей цепочки родительских контролов до формы. Поэтому мы вначале вычисляем смещение в локальных координатах, затем вычисляем его в абсолютных координатах формы. А затем обратно переводим в локальные координаты родительского контрола. После чего изменяем позицию контрола на вычисленное смещение. Такой подход используется, в частности, в контроле TSelection, который так же можно перемещать мышкой или пальцем. P.S. Чтобы лучше понять это, нарисуйте на листке бумаги положения контрола и попробуйте вручную выполнить этот алгоритм с преобразованием координат. Собственно говоря, такой подход отлично работает везде и не требует использования системы жестов. 2. Реализация с использованием жестов Этот способ будет работать только на мобильных платформах, поскольку нужный жест Pan (если я правильно помню) не поддерживается под Windows. Поэтому в целом, первый вариант является универсальным и лучшим решением.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...