Таблица лидеров


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

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

  1. 4 балла
  2. 4 балла
    Тут в процессе работы над одним проектом понадобилось узнать IP адрес устройства. Очень не хотелось включать дополнительные разрешения приложению. Думал ограничится одним "Доступ в Интернет". Вот как это можно сделать: С помощью TIdUDPServer посылаем широковещательное сообщение, с помощью того же TIdUDPServer сами получаем его и в ABinding узнаем с какого IP оно пришло. Таким образом мы узнаем IP адрес интерфейса с маршрутом по умолчанию. Вот код, все просто: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IdGlobal, IdSocketHandle, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer; const ConstUDPSendString = 'dfgb2hd3f6gbf'; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } FUDPServer : TIdUDPServer; FMyIP : String; procedure OnUDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); procedure GetMyIP; public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin GetMyIP; end; procedure TForm1.GetMyIP; begin FMyIP:=''; FUDPServer:=TIdUDPServer.Create; FUDPServer.DefaultPort:=46734; FUDPServer.BroadcastEnabled:=True; FUDPServer.OnUDPRead:=OnUDPServerUDPRead; FUDPServer.Active:=True; FUDPServer.Broadcast(ConstUDPSendString, FUDPServer.DefaultPort); end; procedure TForm1.OnUDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); begin AThread.Synchronize(AThread, procedure begin if BytesToString(AData).Equals(ConstUDPSendString) and FMyIP.IsEmpty then FMyIP:=ABinding.PeerIP; end ); end; end.
  3. 3 балла
    МихаилЪ чайковЪ

    Tlabel Click

    lblCompanyMail.HitTest := True; Есть такая строчка у вас?
  4. 1 балл
    Гумар Садиков

    Сканирование папок

    unit Unit3; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,System.IOUtils, FMX.ListView.Types, FMX.ListView; type TForm3 = class(TForm) ListView1: TListView; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form3: TForm3; implementation {$R *.fmx} {$R *.NmXhdpiPh.fmx ANDROID} procedure TForm3.FormCreate(Sender: TObject); var LList: TStringDynArray; // Cписок .JPG файлов LItem: TListViewItem; // Cписок .JPG файлов path: string; // Папки в которой будем искать файлы i: Integer; begin if TDirectory.Exists('/storage/') then path := '/storage/' else path := '/sdcard/'; try LList := TDirectory.GetFiles(path, '*.JPG', TSearchOption.soAllDirectories); except ShowMessage('Произошла ошибка !'); Exit; end; ListView1.BeginUpdate; try for i := 0 to Length(LList) - 1 do begin LItem := ListView1.Items.Add; LItem.Text := TPath.GetFileNameWithoutExtension(LList); LItem.Detail := LList; end; finally ListView1.EndUpdate; end; end; end. 0_3.rar
  5. 1 балл
    wamaco

    unauthorized access to "libqslite.so"

    Видимо использовать более свежую версию студии! Со времен XE7 много воды утекло, многое поправили.
  6. 1 балл
    Akad

    Перейти на якорь уже загруженной страницы

    Как бы это по мягче сказать.... он (почти) работает. На андроиде работает (хоть как-то) только он, на винде глюков в несколько раз меньше стокового. Я про российский компонент. TRichView. Даже бэкап сайта на его основе делал. Честно скажу - 700к в него не пихал, но порядка 80-100к - живал без проблем.
  7. 1 балл
    Добрый вечер, Перемещение контрола можно сделать двумя способами: Используя обычный набор событий 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. Поэтому в целом, первый вариант является универсальным и лучшим решением.
Эта таблица лидеров рассчитана в Москва/GMT+03:00